From 1b0fc82b597aca3a7eefc79b4b1079629acbce5e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 14 Mar 2015 23:02:20 +0000 Subject: etoc (14mar15) git-svn-id: svn://tug.org/texlive/trunk@36516 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/generic/etoc/README | 182 - Master/texmf-dist/doc/generic/etoc/README.md | 188 - Master/texmf-dist/doc/generic/etoc/etoc-DE.pdf | Bin 335594 -> 0 bytes Master/texmf-dist/doc/generic/etoc/etoc.pdf | Bin 361750 -> 0 bytes Master/texmf-dist/doc/latex/etoc/README | 201 + Master/texmf-dist/doc/latex/etoc/README.md | 195 + Master/texmf-dist/doc/latex/etoc/etoc-DE.pdf | Bin 0 -> 405216 bytes Master/texmf-dist/doc/latex/etoc/etoc.pdf | Bin 0 -> 430698 bytes Master/texmf-dist/source/generic/etoc/etoc.dtx | 11920 --------------------- Master/texmf-dist/source/generic/etoc/etoc.ins | 77 - Master/texmf-dist/source/latex/etoc/etoc.dtx | 12641 +++++++++++++++++++++++ Master/texmf-dist/source/latex/etoc/etoc.ins | 77 + Master/texmf-dist/tex/generic/etoc/etoc.sty | 1280 --- Master/texmf-dist/tex/latex/etoc/etoc.sty | 1271 +++ 14 files changed, 14385 insertions(+), 13647 deletions(-) delete mode 100644 Master/texmf-dist/doc/generic/etoc/README delete mode 100644 Master/texmf-dist/doc/generic/etoc/README.md delete mode 100644 Master/texmf-dist/doc/generic/etoc/etoc-DE.pdf delete mode 100644 Master/texmf-dist/doc/generic/etoc/etoc.pdf create mode 100644 Master/texmf-dist/doc/latex/etoc/README create mode 100644 Master/texmf-dist/doc/latex/etoc/README.md create mode 100644 Master/texmf-dist/doc/latex/etoc/etoc-DE.pdf create mode 100644 Master/texmf-dist/doc/latex/etoc/etoc.pdf delete mode 100644 Master/texmf-dist/source/generic/etoc/etoc.dtx delete mode 100644 Master/texmf-dist/source/generic/etoc/etoc.ins create mode 100644 Master/texmf-dist/source/latex/etoc/etoc.dtx create mode 100644 Master/texmf-dist/source/latex/etoc/etoc.ins delete mode 100644 Master/texmf-dist/tex/generic/etoc/etoc.sty create mode 100644 Master/texmf-dist/tex/latex/etoc/etoc.sty (limited to 'Master') diff --git a/Master/texmf-dist/doc/generic/etoc/README b/Master/texmf-dist/doc/generic/etoc/README deleted file mode 100644 index 219efa41dc4..00000000000 --- a/Master/texmf-dist/doc/generic/etoc/README +++ /dev/null @@ -1,182 +0,0 @@ - Source: etoc.dtx (v1.08 2015/03/10) - Author: Jean-Francois Burnol - Author for German tranlation: Christine Roemer - Info: Completely customisable TOCs - License: LPPL 1.3c or later - -Copyright (C) 2012-2015 Jean-Francois Burnol - -Copyright (C) 2014-2015 Christine Roemer and collaborators for the -translation into German of the documentation. - - - -ABSTRACT - - - The etoc package gives to the user complete control on how the entries - of the table of contents should be constituted from the _name_, - _number_, and _page number_ of each sectioning unit. This goes via the - definition of _line styles_ for each sectioning level used in the - document. The package provides its own custom line styles. Simpler - ones are given as examples in the documentation. The simplest usage - will be to take advantage of the layout facilities of packages dealing - with list environments. - - Regarding the _global toc display_, etoc provides pre-defined styles - based on a multi-column format, with, optionally, a ruled title or - framed contents. - - The \tableofcontents command may be used arbitrarily many times and it - has a variant \localtableofcontents which prints tables of contents - 'local' to the current surrounding document unit. An extension of the - \label/\ref syntax allows to reproduce (with another layout) a local - table of contents defined somewhere else in the document. - - Via ''depth tags'', one gets an even finer control for each table of - contents of which sectioning units it should, or not, display. - - The formatting inherited (and possibly customized by other packages) - from the document class will be used when in compatibility mode. - - The assignment of levels to the sectioning units can be changed at any - time, and etoc can thus be used in a quite general manner to create - custom ''lists of'', additionally to the tables of contents related to - the document sectioning units. No auxiliary file is used additionally - to the standard .toc file. - - - -INSTALLATION - - -The simplest is to download - - http://mirrors.ctan.org/install/macros/latex/contrib/etoc.tds.zip - -and then run unzip etoc.tds.zip -d where is a -TDS-compliant repertory. - -Else, to extract the package (.sty) and driver (.tex) files from -etoc.dtx: - -- if etoc.ins is present: etex etoc.ins (or tex etoc.ins) -- without etoc.ins: etex etoc.dtx (or tex etoc.dtx) - -It is also possible to run latex or pdflatex directly on etoc.dtx. - -At least three ways to produce etoc.pdf (method (3) is preferred): - -(1) latex etoc.dtx (three times), then dvips, then ps2pdf - -(2) pdflatex etoc.dtx (three times) - -(3) latex etoc.tex (three times), then dvipdfmx - -Method (3) produces the smallest pdf files. Options can be set in -etoc.tex: - scrdoc class options (paper size, font size, ...) - with or -without source code, - with dvipdfmx or with latex+dvips or pdflatex. - -To produce etoc-DE.pdf (German documentation) run tex on etoc.ins or -etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with latex -(thrice) then dvipdmx, or set first to 0 in etoc-DE.tex to allow -compilation with pdflatex. - -Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen zu -lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen mit -dvipdfmx ist auf 0 in etoc-DE.tex zu setzen, dann ist pdflatex dreimal -mit etoc-DE.tex laufen zu lassen. - -Installation: - - etoc.sty -> TDS:tex/latex/etoc/etoc.sty - etoc.dtx -> TDS:source/latex/etoc/etoc.dtx - etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf - etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf - README.md -> TDS:doc/latex/etoc/README.md - -The other files may be discarded. - - - -LICENSE - - - This Work may be distributed and/or modified under the - conditions of the LaTeX Project Public License, either - version 1.3c of this license or (at your option) any later - version. This version of this license is in - - http://www.latex-project.org/lppl/lppl-1-3c.txt - - and the latest version of this license is in - - http://www.latex-project.org/lppl.txt - - and version 1.3 or later is part of all distributions of - LaTeX version 2005/12/01 or later. - -The Authors of this Work are: - -- Jean-Francois Burnol for the source code and English documentation, - and -- Christine Roemer and collaborators for the translation into German - of the documentation. - - This Work consists of the main source file etoc.dtx and the - derived files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, - etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. - - - -RECENT CHANGES - - -v1.08 [2015/03/10] - - \etocskipfirstprefix may now appear anywhere in the part of a level - style. - - New commands \etociffirst, \etocxiffirst, \etocxifnumbered. - - It is now possible to issue line style specifications directly with & - and \\ tokens, in order to typeset a TOC as a tabular or longtable - with the opening for example in the first argument of \etocsettocstyle - and the closing in its second argument. - - It is mandatory for such uses to issue \etocglobaldefs which tells - etoc to proceed globally for certain definitions. This is also useful - in the context of the inline environments of package enumitem. - - On this occasion, various old parts of the code have been improved. - -v1.07n [2015/03/05] - - No more use of \toks@ when etoc constructs \etocthelinkedname etc... - Thus \toks@ can be put in the line styles in order to accumulate - information. Only useful if it is certain nothing else will change - \toks@ either. - - In the documentation: list of main commands now in alphabetic order. - -v1.07m [2015/01/23] - - Reading of .toc file is delayed to \begin{document} to account for - possible Babel active characters used therein. Thanks to Denis Bitouzé - who reported a Babel related problem. - - Improved global toc display emulation under KOMA-script classes. - - New command \etocbeforetitlehook. New command \etocdisplay. - -v1.07l [doc of 2014/04/29] - - Added to the documentation an example of use of \etocthelinkedname - together with an enumitem inline itemize* environment; moved main TOC - to immediately after the title, and license to the first pages. - - Incorporation of the translation into German done on the initiative of - Christine Römer by Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel - Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU Jena). - My grateful thanks to all! - diff --git a/Master/texmf-dist/doc/generic/etoc/README.md b/Master/texmf-dist/doc/generic/etoc/README.md deleted file mode 100644 index d2d34b77857..00000000000 --- a/Master/texmf-dist/doc/generic/etoc/README.md +++ /dev/null @@ -1,188 +0,0 @@ -% README -% etoc 1.08 -% 2015/03/10 - - Source: etoc.dtx (v1.08 2015/03/10) - Author: Jean-Francois Burnol - Author for German tranlation: Christine Roemer - Info: Completely customisable TOCs - License: LPPL 1.3c or later - -Copyright (C) 2012-2015 Jean-Francois Burnol - -Copyright (C) 2014-2015 Christine Roemer - and collaborators for the translation into German of the documentation. - -ABSTRACT -======== - -> - The etoc package gives to the user complete control on how - the entries of the table of contents should be constituted - from the *name*, *number*, and *page number* of each - sectioning unit. This goes via the definition of *line - styles* for each sectioning level used in the document. The - package provides its own custom line styles. Simpler ones - are given as examples in the documentation. The simplest - usage will be to take advantage of the layout facilities of - packages dealing with list environments. -> - Regarding the *global toc display*, etoc provides - pre-defined styles based on a multi-column format, with, - optionally, a ruled title or framed contents. -> - The `\tableofcontents` command may be used arbitrarily many - times and it has a variant `\localtableofcontents` which - prints tables of contents 'local' to the current surrounding - document unit. An extension of the `\label/\ref` syntax allows - to reproduce (with another layout) a local table of contents - defined somewhere else in the document. -> - Via ''depth tags'', one gets an even finer control for each - table of contents of which sectioning units it should, or - not, display. -> - The formatting inherited (and possibly customized by other - packages) from the document class will be used when in - compatibility mode. -> - The assignment of levels to the sectioning units can be - changed at any time, and etoc can thus be used in a quite - general manner to create custom ''lists of'', additionally - to the tables of contents related to the document sectioning - units. No auxiliary file is used additionally to the - standard .toc file. - -INSTALLATION -============ - -The simplest is to download - -> - -and then run `unzip etoc.tds.zip -d ` where `` is a -TDS-compliant repertory. - -Else, to extract the package (.sty) and driver (.tex) files from etoc.dtx: - - - if etoc.ins is present: etex etoc.ins (or tex etoc.ins) - - without etoc.ins: etex etoc.dtx (or tex etoc.dtx) - -It is also possible to run latex or pdflatex directly on etoc.dtx. - -At least three ways to produce etoc.pdf (method (3) is preferred): - -(1) latex etoc.dtx (three times), then dvips, then ps2pdf - -(2) pdflatex etoc.dtx (three times) - -(3) latex etoc.tex (three times), then dvipdfmx - -Method (3) produces the smallest pdf files. -Options can be set in etoc.tex: - - scrdoc class options (paper size, font size, ...) - - with or without source code, - - with dvipdfmx or with latex+dvips or pdflatex. - -To produce etoc-DE.pdf (German documentation) run tex on etoc.ins -or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with -latex (thrice) then dvipdmx, or set first to 0 \Withdvipdfmx in -etoc-DE.tex to allow compilation with pdflatex. - -Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen -zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen -mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, -dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. - -Installation: - - etoc.sty -> TDS:tex/latex/etoc/etoc.sty - etoc.dtx -> TDS:source/latex/etoc/etoc.dtx - etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf - etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf - README.md -> TDS:doc/latex/etoc/README.md - -The other files may be discarded. - -LICENSE -======= - -> - This Work may be distributed and/or modified under the - conditions of the LaTeX Project Public License, either - version 1.3c of this license or (at your option) any later - version. This version of this license is in - -> - and the latest version of this license is in - -> - and version 1.3 or later is part of all distributions of - LaTeX version 2005/12/01 or later. - -The Authors of this Work are: - -- Jean-Francois Burnol for the source code and - English documentation, and -- Christine Roemer and collaborators - for the translation into German of the documentation. - -> - This Work consists of the main source file etoc.dtx and the - derived files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, - etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. - -RECENT CHANGES -============== - -v1.08 [2015/03/10] - -> `\etocskipfirstprefix` may now appear anywhere in the - part of a level style. - -> New commands `\etociffirst`, `\etocxiffirst`, `\etocxifnumbered`. - -> It is now possible to issue line style specifications directly - with `&` and `\\` tokens, in order to typeset a TOC as a tabular - or longtable with the opening for example in the first - argument of `\etocsettocstyle` and the closing in its second - argument. - -> It is mandatory for such uses to issue `\etocglobaldefs` which - tells etoc to proceed globally for certain definitions. This - is also useful in the context of the inline environments of - package enumitem. - -> On this occasion, various old parts of the code have been - improved. - -v1.07n [2015/03/05] - -> No more use of `\toks@` when etoc constructs `\etocthelinkedname` etc... - Thus `\toks@` can be put in the line styles in order to accumulate - information. Only useful if it is certain nothing else will change - `\toks@` either. - -> In the documentation: list of main commands now in alphabetic order. - -v1.07m [2015/01/23] - -> Reading of .toc file is delayed to `\begin{document}` to account for - possible Babel active characters used therein. Thanks to Denis - Bitouzé who reported a Babel related problem. - -> Improved global toc display emulation under KOMA-script classes. - -> New command `\etocbeforetitlehook`. New command `\etocdisplay`. - -v1.07l [doc of 2014/04/29] - -> Added to the documentation an example of use of `\etocthelinkedname` - together with an enumitem inline itemize\* environment; moved main TOC - to immediately after the title, and license to the first pages. - -> Incorporation of the translation into German done on the initiative - of Christine Römer by Felix Baral-Weber, Jenny Rothkrämer-Vogt, - Daniel Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU - Jena). My grateful thanks to all! - diff --git a/Master/texmf-dist/doc/generic/etoc/etoc-DE.pdf b/Master/texmf-dist/doc/generic/etoc/etoc-DE.pdf deleted file mode 100644 index 1eef29ff2c0..00000000000 Binary files a/Master/texmf-dist/doc/generic/etoc/etoc-DE.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/generic/etoc/etoc.pdf b/Master/texmf-dist/doc/generic/etoc/etoc.pdf deleted file mode 100644 index 4bf8a133d19..00000000000 Binary files a/Master/texmf-dist/doc/generic/etoc/etoc.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/etoc/README b/Master/texmf-dist/doc/latex/etoc/README new file mode 100644 index 00000000000..e30b103f3d0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/etoc/README @@ -0,0 +1,201 @@ + Source: etoc.dtx (v1.08a 2015/03/13) + Author: Jean-Francois Burnol + Author for German tranlation: Christine Roemer + Info: Completely customisable TOCs + License: LPPL 1.3c or later + +Copyright (C) 2012-2015 Jean-Francois Burnol + +Copyright (C) 2014-2015 Christine Roemer + and collaborators for the +translation into German of the documentation. + + + +ABSTRACT + + +The etoc package gives to the user complete control on how the entries +of the table of contents should be constituted from the _name_, +_number_, and _page number_ of each sectioning unit. This goes via the +definition of _line styles_ for each sectioning level used in the +document. The package provides its own custom line styles. Simpler ones +are given as examples in the documentation. The simplest usage will be +to take advantage of the layout facilities of packages dealing with list +environments. + +Regarding the _global toc display_, etoc provides pre-defined styles +based on a multi-column format, with, optionally, a ruled title or +framed contents. + +The \tableofcontents command may be used arbitrarily many times and it +has a variant \localtableofcontents which prints tables of contents +'local' to the current surrounding document unit. An extension of the +\label/\ref syntax allows to reproduce (with another layout) a local +table of contents defined somewhere else in the document. + +Via ''depth tags'', one gets an even finer control for each table of +contents of which sectioning units it should, or not, display. + +The formatting inherited (and possibly customized by other packages) +from the document class will be used when in compatibility mode. + +The assignment of levels to the sectioning units can be changed at any +time, and etoc can thus be used in a quite general manner to create +custom ''lists of'', additionally to the tables of contents related to +the document sectioning units. No auxiliary file is used additionally to +the standard .toc file. + + + +INSTALLATION + + +The simplest is to download + + http://mirrors.ctan.org/install/macros/latex/contrib/etoc.tds.zip + +and then run unzip etoc.tds.zip -d where is a +TDS-compliant repertory. + +Else, to extract the package (.sty) and driver (.tex) files from +etoc.dtx: + +- if etoc.ins is present: etex etoc.ins (or tex etoc.ins) +- without etoc.ins: etex etoc.dtx (or tex etoc.dtx) + +It is also possible to run latex or pdflatex directly on etoc.dtx. + +At least three ways to produce etoc.pdf (method (3) is preferred): + +(1) latex etoc.dtx (three times), then dvips, then ps2pdf + +(2) pdflatex etoc.dtx (three times) + +(3) latex etoc.tex (three times), then dvipdfmx + +Method (3) produces the smallest pdf files. Options can be set in +etoc.tex: + +- scrdoc class options (paper size, font size, ...) +- with or without source code, +- with dvipdfmx or with latex+dvips or pdflatex. + +To produce etoc-DE.pdf (German documentation) run tex on etoc.ins or +etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with latex +(thrice) then dvipdmx, or set first to 0 \Withdvipdfmx in etoc-DE.tex to +allow compilation with pdflatex. + +Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen zu +lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen mit +dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, dann ist +pdflatex dreimal mit etoc-DE.tex laufen zu lassen. + +Installation: + + etoc.sty -> TDS:tex/latex/etoc/etoc.sty + etoc.dtx -> TDS:source/latex/etoc/etoc.dtx + etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf + etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf + README.md -> TDS:doc/latex/etoc/README.md + +The other files may be discarded. + + + +LICENSE + + +This Work may be distributed and/or modified under the conditions of the +LaTeX Project Public License, either version 1.3c of this license or (at +your option) any later version. This version of this license is in + + http://www.latex-project.org/lppl/lppl-1-3c.txt + +and the latest version of this license is in + + http://www.latex-project.org/lppl.txt + +and version 1.3 or later is part of all distributions of LaTeX version +2005/12/01 or later. + +The Authors of this Work are: + +- Jean-Francois Burnol for the source code and + English documentation, and +- Christine Roemer and + collaborators for the translation into German of the documentation. + +This Work consists of the main source file etoc.dtx and the derived +files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, etoc.pdf, etoc-DE.pdf, +etoc.dvi, etoc-DE.dvi. + + + +RECENT CHANGES + + +v1.08a [2015/03/13] + +\etocname, \etocnumber and \etocpage are now the robust variants of +\etocthelinkedname, \etocthelinkednumber and \etocthelinkedpage. This +should arguably have been done since the addition of the latter to etoc +with v1.07f [2013/03/07]. The earlier \etocname etc... contained the +hyperlink destination only in an unexpanded form. + +The documentation has a brand new title page and a new section _The TOC +as a TikZ mind map_ both illustrating further uses of etoc to display +tables of contents as trees in an automatic manner. + + +v1.08 [2015/03/10] + +\etocskipfirstprefix may now appear anywhere in the part of a +level style. + +New commands \etociffirst, \etocxiffirst, \etocxifnumbered. + +It is now possible to issue line style specifications directly with & +and \\ tokens, in order to typeset a TOC as a tabular or longtable with +the opening for example in the first argument of \etocsettocstyle and +the closing in its second argument. + +It is mandatory for such uses to issue \etocglobaldefs which tells etoc +to proceed globally for certain definitions. This is also useful in the +context of the inline environments of package enumitem. + +On this occasion, various old parts of the code have been improved. + + +v1.07n [2015/03/05] + +No more use of \toks@ when etoc constructs \etocthelinkedname etc... +Thus \toks@ can be put in the line styles in order to accumulate +information. Only useful if it is certain nothing else will change +\toks@ either. + +In the documentation: list of main commands now in alphabetic order. + + +v1.07m [2015/01/23] + +Reading of .toc file is delayed to \begin{document} to account for +possible Babel active characters used therein. Thanks to Denis Bitouzé +who reported a Babel related problem. + +Improved global toc display emulation under KOMA-script classes. + +New command \etocbeforetitlehook. New command \etocdisplay. + + +v1.07l [doc of 2014/04/29] + +Added to the documentation an example of use of \etocthelinkedname +together with an enumitem inline itemize* environment; moved main TOC to +immediately after the title, and license to the first pages. + +Incorporation of the translation into German done on the initiative of +Christine Römer by Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel +Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU Jena). My +grateful thanks to all! + diff --git a/Master/texmf-dist/doc/latex/etoc/README.md b/Master/texmf-dist/doc/latex/etoc/README.md new file mode 100644 index 00000000000..7100fcaa401 --- /dev/null +++ b/Master/texmf-dist/doc/latex/etoc/README.md @@ -0,0 +1,195 @@ + + + Source: etoc.dtx (v1.08a 2015/03/13) + Author: Jean-Francois Burnol + Author for German tranlation: Christine Roemer + Info: Completely customisable TOCs + License: LPPL 1.3c or later + +Copyright (C) 2012-2015 Jean-Francois Burnol `` + +Copyright (C) 2014-2015 Christine Roemer `` +and collaborators for the translation into German of the documentation. + +ABSTRACT +======== + +The etoc package gives to the user complete control on how the entries +of the table of contents should be constituted from the *name*, +*number*, and *page number* of each sectioning unit. This goes via the +definition of *line styles* for each sectioning level used in the +document. The package provides its own custom line styles. Simpler +ones are given as examples in the documentation. The simplest usage +will be to take advantage of the layout facilities of packages dealing +with list environments. + +Regarding the *global toc display*, etoc provides pre-defined styles +based on a multi-column format, with, optionally, a ruled title or +framed contents. + +The `\tableofcontents` command may be used arbitrarily many times and +it has a variant `\localtableofcontents` which prints tables of +contents 'local' to the current surrounding document unit. An +extension of the `\label/\ref` syntax allows to reproduce (with +another layout) a local table of contents defined somewhere else in +the document. + +Via ''depth tags'', one gets an even finer control for each table of +contents of which sectioning units it should, or not, display. + +The formatting inherited (and possibly customized by other packages) +from the document class will be used when in compatibility mode. + +The assignment of levels to the sectioning units can be changed at any +time, and etoc can thus be used in a quite general manner to create +custom ''lists of'', additionally to the tables of contents related to +the document sectioning units. No auxiliary file is used additionally +to the standard .toc file. + +INSTALLATION +============ + +The simplest is to download + +> + +and then run `unzip etoc.tds.zip -d ` where `` is a +TDS-compliant repertory. + +Else, to extract the package (.sty) and driver (.tex) files from etoc.dtx: + +- if etoc.ins is present: etex etoc.ins (or tex etoc.ins) +- without etoc.ins: etex etoc.dtx (or tex etoc.dtx) + +It is also possible to run latex or pdflatex directly on etoc.dtx. + +At least three ways to produce etoc.pdf (method (3) is preferred): + +(1) latex etoc.dtx (three times), then dvips, then ps2pdf + +(2) pdflatex etoc.dtx (three times) + +(3) latex etoc.tex (three times), then dvipdfmx + +Method (3) produces the smallest pdf files. +Options can be set in etoc.tex: + +- scrdoc class options (paper size, font size, ...) +- with or without source code, +- with dvipdfmx or with latex+dvips or pdflatex. + +To produce etoc-DE.pdf (German documentation) run tex on etoc.ins +or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +latex (thrice) then dvipdmx, or set first to 0 `\Withdvipdfmx` in +etoc-DE.tex to allow compilation with pdflatex. + +Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +mit dvipdfmx ist `\Withdvidpdfmx` auf 0 in etoc-DE.tex zu setzen, +dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. + +Installation: + + etoc.sty -> TDS:tex/latex/etoc/etoc.sty + etoc.dtx -> TDS:source/latex/etoc/etoc.dtx + etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf + etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf + README.md -> TDS:doc/latex/etoc/README.md + +The other files may be discarded. + +LICENSE +======= + +This Work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. This version of this license is in + +> + +and the latest version of this license is in + +> + +and version 1.3 or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +The Authors of this Work are: + +- Jean-Francois Burnol `` for the source code and + English documentation, and +- Christine Roemer `` and collaborators + for the translation into German of the documentation. + +This Work consists of the main source file etoc.dtx and the +derived files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, +etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. + +RECENT CHANGES +============== + +v1.08a [2015/03/13] +------------------- + +`\etocname`, `\etocnumber` and `\etocpage` are now the robust variants of +`\etocthelinkedname`, `\etocthelinkednumber` and `\etocthelinkedpage`. +This should arguably have been done since the addition of the latter to +etoc with v1.07f [2013/03/07]. The earlier `\etocname` etc... contained +the hyperlink destination only in an unexpanded form. + +The documentation has a brand new title page and a new section *The TOC as +a TikZ mind map* both illustrating further uses of etoc to display tables +of contents as trees in an automatic manner. + +v1.08 [2015/03/10] +------------------ + +`\etocskipfirstprefix` may now appear anywhere in the `` +part of a level style. + +New commands `\etociffirst`, `\etocxiffirst`, `\etocxifnumbered`. + +It is now possible to issue line style specifications directly with +`&` and `\\` tokens, in order to typeset a TOC as a tabular or +longtable with the opening for example in the first argument of +`\etocsettocstyle` and the closing in its second argument. + +It is mandatory for such uses to issue `\etocglobaldefs` which tells +etoc to proceed globally for certain definitions. This is also useful +in the context of the inline environments of package enumitem. + +On this occasion, various old parts of the code have been improved. + +v1.07n [2015/03/05] +------------------- + +No more use of `\toks@` when etoc constructs `\etocthelinkedname` +etc... Thus `\toks@` can be put in the line styles in order to +accumulate information. Only useful if it is certain nothing else +will change `\toks@` either. + +In the documentation: list of main commands now in alphabetic order. + +v1.07m [2015/01/23] +------------------- + +Reading of .toc file is delayed to `\begin{document}` to account for +possible Babel active characters used therein. Thanks to Denis +Bitouzé who reported a Babel related problem. + +Improved global toc display emulation under KOMA-script classes. + +New command `\etocbeforetitlehook`. New command `\etocdisplay`. + +v1.07l [doc of 2014/04/29] +-------------------------- + +Added to the documentation an example of use of `\etocthelinkedname` +together with an enumitem inline itemize\* environment; moved main +TOC to immediately after the title, and license to the first pages. + +Incorporation of the translation into German done on the initiative +of Christine Römer by Felix Baral-Weber, Jenny Rothkrämer-Vogt, +Daniel Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU +Jena). My grateful thanks to all! diff --git a/Master/texmf-dist/doc/latex/etoc/etoc-DE.pdf b/Master/texmf-dist/doc/latex/etoc/etoc-DE.pdf new file mode 100644 index 00000000000..ea01b0fde7a Binary files /dev/null and b/Master/texmf-dist/doc/latex/etoc/etoc-DE.pdf differ diff --git a/Master/texmf-dist/doc/latex/etoc/etoc.pdf b/Master/texmf-dist/doc/latex/etoc/etoc.pdf new file mode 100644 index 00000000000..f01cc06728b Binary files /dev/null and b/Master/texmf-dist/doc/latex/etoc/etoc.pdf differ diff --git a/Master/texmf-dist/source/generic/etoc/etoc.dtx b/Master/texmf-dist/source/generic/etoc/etoc.dtx deleted file mode 100644 index 12bb38b9730..00000000000 --- a/Master/texmf-dist/source/generic/etoc/etoc.dtx +++ /dev/null @@ -1,11920 +0,0 @@ -% -*- coding: utf-8; -*- -%<*none> -{\def\doctimestamp {Time-stamp: <10-03-2015 22:45:02 CET>}% - \def\getdtxtimestamp #1 <#2 #3 #4>{#2 at #3 #4}% - \xdef\etocdtxtimestamp {\expandafter\getdtxtimestamp\doctimestamp }}% -% -%<*!readme> -%% -%% Package: etoc -%% Version: 1.08 (2015/03/10) -%% License: LPPL 1.3c or later (see etoc.dtx) -%% Copyright (C) 2012-2015 Jean-Francois Burnol -%% Copyright (C) 2014-2015 Christine Roemer -%% and collaborators for the translation into German of the documentation -%% -% -%<*insfile> -\def\etocpkgdate {2015/03/10} -\def\etocdocdate {2015/03/10} -\def\etocpkgversion {v1.08} -\def\etocpkgdescription {Completely customisable TOCs (jfB)} -% -%<*none> -% Now the date and version which are specific to the German translation. -% Replace \let by suitable \def's in case this lags behing English version. -\let\etocDEpkgdate \etocpkgdate % -\let\etocDEdocdate \etocdocdate % -\let\etocDEpkgversion\etocpkgversion % -% Definition of \etocLicense -% -------------------------- -\begingroup - \long\def\firstofone #1{#1}\catcode1=14\catcode2=0 - \catcode`\%=12\catcode`\_=12\endlinechar13\catcode13=13 ^^A - \catcode32=13\catcode`\\=12^^Brelax^^A -^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A -{% Package: etoc -% Version: 1.08 (2015/03/10) -% License: LPPL 1.3c or later -% Copyright (C) 2012-2015 Jean-Francois Burnol -% Copyright (C) 2014-2015 Christine Roemer -% and collaborators for the translation into German of the documentation -% -% This Work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. This version of this license is in -% http://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of -% LaTeX version 2005/12/01 or later. -% -% The Authors of this Work are: -% Jean-Francois Burnol for the source code and -% English documentation, and -% Christine Roemer and collaborators -% for the translation into German of the documentation. -% -% This Work consists of the main source file etoc.dtx and the derived -% files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, etoc.pdf, etoc-DE.pdf, -% etoc.dvi, etoc-DE.dvi, README.md. -% -% Running tex or etex on etoc.dtx extracts etoc.sty, etoc.ins, etoc.etex, -% etoc-DE.tex, and README.md. See README.md for further instructions. -% -% It is also possible to typeset etoc.dtx directly via latex or pdflatex. -}}% -\iffalse -% -%% README -%% etoc 1.08 -%% 2015/03/10 -%<*readme> - - Source: etoc.dtx (v1.08 2015/03/10) - Author: Jean-Francois Burnol - Author for German tranlation: Christine Roemer - Info: Completely customisable TOCs - License: LPPL 1.3c or later - -Copyright (C) 2012-2015 Jean-Francois Burnol - -Copyright (C) 2014-2015 Christine Roemer - and collaborators for the translation into German of the documentation. - - -ABSTRACT -======== - -> - The etoc package gives to the user complete control on how - the entries of the table of contents should be constituted - from the *name*, *number*, and *page number* of each - sectioning unit. This goes via the definition of *line - styles* for each sectioning level used in the document. The - package provides its own custom line styles. Simpler ones - are given as examples in the documentation. The simplest - usage will be to take advantage of the layout facilities of - packages dealing with list environments. -> - Regarding the *global toc display*, etoc provides - pre-defined styles based on a multi-column format, with, - optionally, a ruled title or framed contents. -> - The `\tableofcontents` command may be used arbitrarily many - times and it has a variant `\localtableofcontents` which - prints tables of contents 'local' to the current surrounding - document unit. An extension of the `\label/\ref` syntax allows - to reproduce (with another layout) a local table of contents - defined somewhere else in the document. -> - Via ''depth tags'', one gets an even finer control for each - table of contents of which sectioning units it should, or - not, display. -> - The formatting inherited (and possibly customized by other - packages) from the document class will be used when in - compatibility mode. -> - The assignment of levels to the sectioning units can be - changed at any time, and etoc can thus be used in a quite - general manner to create custom ''lists of'', additionally - to the tables of contents related to the document sectioning - units. No auxiliary file is used additionally to the - standard .toc file. - - -INSTALLATION -============ - -The simplest is to download - -> - -and then run `unzip etoc.tds.zip -d ` where `` is a -TDS-compliant repertory. - -Else, to extract the package (.sty) and driver (.tex) files from etoc.dtx: - - - if etoc.ins is present: etex etoc.ins (or tex etoc.ins) - - without etoc.ins: etex etoc.dtx (or tex etoc.dtx) - -It is also possible to run latex or pdflatex directly on etoc.dtx. - -At least three ways to produce etoc.pdf (method (3) is preferred): - -(1) latex etoc.dtx (three times), then dvips, then ps2pdf - -(2) pdflatex etoc.dtx (three times) - -(3) latex etoc.tex (three times), then dvipdfmx - -Method (3) produces the smallest pdf files. -Options can be set in etoc.tex: - - scrdoc class options (paper size, font size, ...) - - with or without source code, - - with dvipdfmx or with latex+dvips or pdflatex. - -To produce etoc-DE.pdf (German documentation) run tex on etoc.ins -or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with -latex (thrice) then dvipdmx, or set first to 0 \Withdvipdfmx in -etoc-DE.tex to allow compilation with pdflatex. - -Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen -zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen -mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, -dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. - -Installation: - - etoc.sty -> TDS:tex/latex/etoc/etoc.sty - etoc.dtx -> TDS:source/latex/etoc/etoc.dtx - etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf - etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf - README.md -> TDS:doc/latex/etoc/README.md - -The other files may be discarded. - -LICENSE -======= - -> - This Work may be distributed and/or modified under the - conditions of the LaTeX Project Public License, either - version 1.3c of this license or (at your option) any later - version. This version of this license is in - -> - and the latest version of this license is in - -> - and version 1.3 or later is part of all distributions of - LaTeX version 2005/12/01 or later. - -The Authors of this Work are: - -- Jean-Francois Burnol for the source code and - English documentation, and -- Christine Roemer and collaborators - for the translation into German of the documentation. - -> - This Work consists of the main source file etoc.dtx and the - derived files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, - etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. - -RECENT CHANGES -============== - -v1.08 [2015/03/10] - -> `\etocskipfirstprefix` may now appear anywhere in the - part of a level style. - -> New commands `\etociffirst`, `\etocxiffirst`, `\etocxifnumbered`. - -> It is now possible to issue line style specifications directly - with `&` and `\\` tokens, in order to typeset a TOC as a tabular - or longtable with the opening for example in the first - argument of `\etocsettocstyle` and the closing in its second - argument. - -> It is mandatory for such uses to issue `\etocglobaldefs` which - tells etoc to proceed globally for certain definitions. This - is also useful in the context of the inline environments of - package enumitem. - -> On this occasion, various old parts of the code have been - improved. - -v1.07n [2015/03/05] - -> No more use of `\toks@` when etoc constructs `\etocthelinkedname` etc... - Thus `\toks@` can be put in the line styles in order to accumulate - information. Only useful if it is certain nothing else will change - `\toks@` either. - -> In the documentation: list of main commands now in alphabetic order. - -v1.07m [2015/01/23] - -> Reading of .toc file is delayed to `\begin{document}` to account for - possible Babel active characters used therein. Thanks to Denis - Bitouzé who reported a Babel related problem. - -> Improved global toc display emulation under KOMA-script classes. - -> New command `\etocbeforetitlehook`. New command `\etocdisplay`. - -v1.07l [doc of 2014/04/29] - -> Added to the documentation an example of use of `\etocthelinkedname` - together with an enumitem inline itemize\* environment; moved main TOC - to immediately after the title, and license to the first pages. - -> Incorporation of the translation into German done on the initiative - of Christine Römer by Felix Baral-Weber, Jenny Rothkrämer-Vogt, - Daniel Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU - Jena). My grateful thanks to all! - -% -%<*tex>------------------------------------------------------------------------- -%% 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 (due to hyperlinks extending over page -%% breaks) may be ignored, but in case of a too old dvipdfmx, it may -%% be preferable to use pdflatex. Set \Withdvipdfmx to 0 first. -%% -\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex -\chardef\NoSourceCode 0 % replace 0 by 1 for the doc *without* the source code -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile {etoc.tex}[Driver for etoc documentation]% -\PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc} -\PassOptionsToPackage {ngerman,english}{babel} -\chardef\ForEnglish 1 % (can NOT be both 1..) -\chardef\ForDeutsch 0 % -\input etoc.dtx -%%% Local Variables: -%%% mode: latex -%%% End: -%------------------------------------------------------------------------- -%<*DEtex>----------------------------------------------------------------------- -%% run latex thrice on this file etoc-DE.tex then dvipdfmx on etoc-DE.dvi -%% to produce the German documentation etoc-DE.pdf (without source code). -%% -%% possible dvipdfmx warnings (due to hyperlinks extending over page -%% breaks) may be ignored, but in case of a too old dvipdfmx, it may -%% be preferable to use pdflatex. For this set \Withdvipdfmx to 0. -%% -%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen -%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen -%% mit dvipdfmx ist \Withdvidpdfmx auf 0 zu setzen, dann ist pdflatex -%% dreimal mit etoc-DE.tex laufen zu lassen. -%% -\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex -\chardef\NoSourceCode 1 % replace 1 by 0 for the doc *with* the source code -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile {etoc-DE.tex}[Driver for etoc German documentation]% -\PassOptionsToClass {a4paper,fontsize=11pt,twoside,ngerman}{scrdoc} -\PassOptionsToPackage {english,ngerman}{babel} -\chardef\ForEnglish 0 % (can NOT be both 1..) -\chardef\ForDeutsch 1 % -\input etoc.dtx -%%% Local Variables: -%%% mode: latex -%%% End: -%----------------------------------------------------------------------- -%<*insfile>--------------------------------------------------------------------- -%% Run tex on this file to extract from etoc.dtx: -%% etoc.sty, etoc.tex, etoc-DE.tex and README.md -%% -%% At least three ways to produce etoc.pdf (method (3) is preferred): -%% (1) latex etoc.dtx (three times), then dvips, then ps2pdf -%% (2) pdflatex etoc.dtx (three times) -%% (3) latex etoc.tex (three times), then dvipdfmx -%% -%% Method (3) produces the smallest pdf files. -%% Options can be set in etoc.tex (and etoc-DE.tex): -%% - scrdoc class options (paper size, font size, ...) -%% - with or without source code, -%% - with dvipdfmx or with latex/pdflatex. -%% -%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins -%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with -%% latex (thrice) then dvipdmx, or edit the suitable toggle in -%% etoc-DE.tex to allow compilation to proceed with pdflatex. -%% -%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen -%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen -%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, -%% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. -%% -%% Installation: -%% -%% etoc.sty -> TDS:tex/latex/etoc/etoc.sty -%% etoc.dtx -> TDS:source/latex/etoc/etoc.dtx -%% etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf -%% etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf -%% README.md -> TDS:doc/latex/etoc/README.md -%% -\input docstrip.tex -\askforoverwritefalse -\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% -\string\NeedsTeXFormat{LaTeX2e}^^J% -\string\ProvidesPackage{etoc}^^J% -\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% -\generate{\nopreamble\nopostamble -\file{README.md}{\from{etoc.dtx}{readme}}% -\usepostamble\defaultpostamble -\file{etoc.tex}{\from{etoc.dtx}{tex}}% -\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% -\usepreamble\etocpkgpreamble -\file{etoc.sty}{\from{etoc.dtx}{package}}}% -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* etoc.sty} -\Msg{*} -\Msg{* To produce the documentation run latex thrice on file etoc.tex} -\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.} -\Msg{* etoc-DE.dvi} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} -\endbatchfile -%--------------------------------------------------------------------- -%<*none>------------------------------------------------------------------------ -\fi -% -\chardef\noetex 0 -\expandafter\ifx\csname numexpr\endcsname\relax \chardef\noetex 1 \fi -\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop -\else -% \ifdefined does not count as \if with Knuth tex ! -% no way to use it or \ifcsname here ! (besides hiding it in macros) - \expandafter\ifx\csname ProvidesFile\endcsname\relax - \chardef\extractfiles 0 % etex etc.. on etoc.dtx - \else % latex/pdflatex on etoc.tex or on etoc.dtx - \ProvidesFile{etoc.dtx}% - [`etoc' source and documentation (\etocdtxtimestamp)]% - \expandafter\ifx\csname Withdvipdfmx\endcsname\relax - % latex run is on etoc.dtx - \chardef\extractfiles 1 % 1 = extract files and typeset manual - \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips - \chardef\NoSourceCode 1 % do not include source code - \chardef\ForEnglish 1 \chardef\ForDeutsch 0 - \PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc}% - \PassOptionsToPackage {ngerman,english}{babel}% - \else % latex run is on etoc.tex or etoc-DE.tex - \chardef\extractfiles 2 % do not extract files - \fi - \fi -\fi -\ifnum\extractfiles<2 % extract files -\def\MessageDeFin{\newlinechar10 \let\Msg\message -\Msg{********************************************************************^^J}% -\Msg{*^^J}% -\Msg{* To finish the installation you have to move the following^^J}% -\Msg{* file into a directory searched by TeX:^^J}% -\Msg{*^^J}% -\Msg{*\space\space\space\space etoc.sty^^J}% -\Msg{*^^J}% -\Msg{* To produce the documentation with source code included run latex^^J}% -\Msg{* thrice on file etoc.tex and then dvipdfmx on etoc.dvi^^J}% -\Msg{*^^J}% -\Msg{* To produce the German documentation run latex thrice on file^^J}% -\Msg{* etoc-DE.tex and then dvipdfmx on etoc-DE.dvi^^J}% -\Msg{*^^J}% -\Msg{* Happy TeXing!^^J}% -\Msg{*^^J}% -\Msg{********************************************************************^^J}% -}% -\begingroup - \input docstrip.tex - \askforoverwritefalse - \def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% - \string\NeedsTeXFormat{LaTeX2e}^^J% - \string\ProvidesPackage{etoc}^^J% - \space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% - \generate{\nopreamble\nopostamble - \file{README.md}{\from{etoc.dtx}{readme}}% - \usepostamble\defaultpostamble - \file{etoc.ins}{\from{etoc.dtx}{insfile}}% - \file{etoc.tex}{\from{etoc.dtx}{tex}}% - \file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% - \usepreamble\etocpkgpreamble - \file{etoc.sty}{\from{etoc.dtx}{package}}}% -\endgroup -\fi % end of file extraction -\ifnum\extractfiles=0 % tex/etex/xetex/etc on etoc.dtx, files extracted, stop - \MessageDeFin\expandafter\end\fi -% no use of docstrip to extract files if latex run was on etoc.tex -\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi -%------------------------------------------------------------------------------- -% START OF USER MANUAL TEX SOURCE -\documentclass[abstract]{scrdoc} - -\ifnum\NoSourceCode=1 \OnlyDescription\fi - -\makeatletter -\ifnum\Withdvipdfmx=1 - \@for\@tempa:=hyperref,bookmark,graphicx,xcolor\do - {\PassOptionsToPackage{dvipdfmx}\@tempa} - % - \PassOptionsToPackage{dvipdfm}{geometry} - \PassOptionsToPackage{bookmarks=true}{hyperref} - \PassOptionsToPackage{dvipdfmx-outline-open}{hyperref} - \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark} - % - \def\pgfsysdriver{pgfsys-dvipdfm.def} -\else - \PassOptionsToPackage{bookmarks=true}{hyperref} -\fi -\makeatother - -\usepackage[T1]{fontenc} -\usepackage[utf8]{inputenc} -\usepackage[hscale=0.66,vscale=0.75]{geometry} -\pagestyle{headings} - -% January 2014. work-around a bug in KOMA 3.12 (December 2013): -\makeatletter -\def\buggysectionmark #1{% KOMA 3.12 as released to CTAN December 2013 - \if@twoside\expandafter\markboth\else\expandafter\markright\fi - {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat\fi}{}#1}}{}} -\ifx\buggysectionmark\sectionmark -\def\sectionmark #1{% - \if@twoside\expandafter\markboth\else\expandafter\markright\fi - {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat}{}#1}}{}} -\fi -\makeatother - -\makeatletter -% 2013/03/07. -% This macro allows to conveniently center a line inside a paragraph and still -% use therein \verb or other commands changing catcodes. -% Note: \centerline in LaTeX still uses \hsize and not \linewidth/\columnwidth - \def\@centeredline {\hbox to \linewidth - \bgroup \hss \bgroup - \aftergroup\centeredline@ } - \newcommand*\centeredline {% - \ifhmode - \\\relax - \def\centeredline@{\hss\egroup\hskip\z@skip}% - \else - \def\centeredline@{\hss\egroup}% - \fi - \afterassignment\@centeredline - \let\next=} - -% pour maintenir les % en début de ligne dans les blocs verbatim -% - - \let\original@check@percent\check@percent - \let\check@percent\relax -\makeatother - - -% pour les environnements verbatim -% uniformisé finalement, avec quelques exceptions, pour dtx du 3 déc 2013 -\def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax} - -% ATTENTION: (avec doc.sty ou les classes scrdoc ou ltxdoc) -% -% - l'environnement macrocode se fait avec \macro@font qui est le -% \MacroFont du \begin{document}. -% -% - les environnements verbatim utilisent le \MacroFont courant. -% -% - \verb utilise un \ttfamily !! et non pas \verbatim@font que l'on -% peut customiser. -% -% - (9 mars 2015) il ne faut PAS commencer des macrocode directement après -% un \section, il faut un paragraphe (par exemple un \indent\par) - -%---- -% better \verb pour doc. -% 12 octobre 2013, importé de xint.dtx -% je rajoute pour { afin que truc{machin puisse avoir hyphénation -% retire \leavemmode, pas nécessaire pour emploi ici - -% NOTE 9 mars 2015. J'ai depuis une version plus aboutie dans xint.dtx -% mais je laisse ici tel quel. - -\def\MicroFont{\ttfamily\hyphenchar\font45 } -% modif de \do@noligs: \char`#1} --> \char`#1 } -\makeatletter -\def\do@noligs #1% -{% - \catcode `#1\active - \begingroup \lccode `\~=`#1\relax - \lowercase {\endgroup \def ~{\kern \z@ \char `#1 }}% -}% -\def\dobackslash -{% - \catcode92 \active - \begingroup \lccode `\~=92\relax - \lowercase {\endgroup \def ~{\kern \z@ \char 92 }}% -}% -\def\dobraces -{% - \catcode123 \active - \begingroup \lccode `\~=123\relax - \lowercase {\endgroup \def ~{\hskip \z@\@plus.1pt\@minus.1pt - \char 123 }}% - \catcode125 \active - \begingroup \lccode `\~=125\relax - \lowercase {\endgroup \def ~{\char 125 \hskip \z@\@plus.1pt\@minus.1pt }}% -}% -\def\verb -{% - \relax \ifmmode\hbox\else\leavevmode\null\fi - \bgroup \MicroFont - \let\do\do@noligs \verbatim@nolig@list - \let\do\@makeother \dospecials - \catcode32 10 - \dobackslash \dobraces \makestarlowast - \@jfverb -}% -\def\@jfverb #1{\catcode`#1\active - \lccode`\~`#1\lowercase{\def~{\egroup\unskip}}}% -% (\unskip ajouté le 14 octobre) -% \lowast est défini plus loin -\begingroup - \lccode`\~=`\* -\lowercase{% -\endgroup -\def\makestarlowast {\catcode`\*\active\let~\lowast}}% -\makeatother -% -\usepackage{txfonts} - -% m'occuper de la taille de txtt: -% au passage je supprime le \hyphenchar \font\m@ne - -% avril 2013 -% ATTENTION ATTENTION ATTENTION Un changement de taille comme \small semble -% déclencher (peut-être) la relecture de t1txtt.fd et quoi qu'il en soit le -% \hyphenchar est REMIS à -1 ! - -% update: 13 octobre 2013 -% et pourtant tailles sont ok, donc au moins cette information est -% maintenue je ne sais donc pas exactement ce qui se passe. - -\DeclareFontFamily{T1}{txtt}{\hyphenchar\font 45\relax} -\DeclareFontShape{T1}{txtt}{m}{n}{ %medium - <->s*[.96] t1xtt% -}{} -\DeclareFontShape{T1}{txtt}{m}{sc}{ %cap & small cap - <->s*[.96] t1xttsc% -}{} -\DeclareFontShape{T1}{txtt}{m}{sl}{ %slanted - <->s*[.96] t1xttsl% -}{} -\DeclareFontShape{T1}{txtt}{m}{it}{ %italic - <->ssub * txtt/m/sl% -}{} -\DeclareFontShape{T1}{txtt}{m}{ui}{ %unslanted italic - <->ssub * txtt/m/sl% -}{} -\DeclareFontShape{T1}{txtt}{bx}{n}{ %bold extended - <->t1xbtt% -}{} -\DeclareFontShape{T1}{txtt}{bx}{sc}{ %bold extended cap & small cap - <->t1xbttsc% -}{} -\DeclareFontShape{T1}{txtt}{bx}{sl}{ %bold extended slanted - <->t1xbttsl% -}{} -\DeclareFontShape{T1}{txtt}{bx}{it}{ %bold extended italic - <->ssub * txtt/bx/sl% -}{} -\DeclareFontShape{T1}{txtt}{bx}{ui}{ %bold extended unslanted italic - <->ssub * txtt/bx/sl% -}{} -\DeclareFontShape{T1}{txtt}{b}{n}{ %bold - <->ssub * txtt/bx/n% -}{} -\DeclareFontShape{T1}{txtt}{b}{sc}{ %bold cap & small cap - <->ssub * txtt/bx/sc% -}{} -\DeclareFontShape{T1}{txtt}{b}{sl}{ %bold slanted - <->ssub * txtt/bx/sl% -}{} -\DeclareFontShape{T1}{txtt}{b}{it}{ %bold italic - <->ssub * txtt/bx/it% -}{} -\DeclareFontShape{T1}{txtt}{b}{ui}{ %bold unslanted italic - <->ssub * txtt/bx/ui% -}{} - -\usepackage{xspace} -\usepackage[dvipsnames]{xcolor} -\usepackage{graphicx} -\usepackage[inline]{enumitem} -\usepackage{array} -\usepackage{longtable} - -\definecolor{joli}{RGB}{225,95,0} -\definecolor{JOLI}{RGB}{225,95,0} -\definecolor{BLUE}{RGB}{0,0,255} -\colorlet{niceone}{green!35!blue!75} - -\usepackage {babel} % ngerman and english options have been passed to babel -\AtBeginDocument { - \ifnum\ForEnglish=1 \renewcommand\partname{Part}\fi - \addto\captionsenglish{\renewcommand\partname{Part}} - \addto\captionsgerman {\renewcommand\partname{Teil}} -} - -\usepackage{tikz} -\usetikzlibrary{trees} % added for "cyclic" grow function 2013/03/02 -\usepackage{forest} % switched from tikz-qtree to forest 2013/09/09 -% No problem with hyperlinks then, contrarily to tikz-qtree. - -% NOTE: (12 octobre 2013) -% - si compilation pour dvipdfmx, les arbres dans le dvi visualisés par xdvi -% montrent correctement les textes, mais rien au point de vue graphique, -% - si compilation pour dvips, l'arbre fait par forest est tout empilé, celui -% fait par tikz sans forest est presque correct, les labels débordent. -% Dans les deux cas, le résultat final dans le pdf est bon. -% grosso modo dans l'état actuel le pdf fait 250K (dvipdfmx), 340K (pdflatex) et -% 1M pour dvips+ps2pdf. - -% 9 octobre 2013, je me décide à ne plus utiliser hidelinks, mais il est tout de -% même ajouté au .toc - -% 18 mai 2014: pdfinfo différent suivant anglais ou allemand -\ifnum\ForEnglish=1 -\usepackage[pdfencoding=pdfdoc]{hyperref} -\hypersetup{% -linktoc=all,% why is the important stuff -%% bookmarksdepth=3,% in a *hard* to find README? -%% (but not needeed anymore now, v1.07g) -breaklinks=true,% -colorlinks,% -linkcolor=RoyalBlue,% Orchid -urlcolor=OliveGreen,% -pdfauthor={Jean-Fran\c cois Burnol},% -pdftitle={The etoc package},% -pdfsubject={Tables of contents with LaTeX},% -pdfkeywords={LaTeX, table of contents},% -pdfstartview=FitH,% -pdfpagemode=UseOutlines} -\fi - -\ifnum\ForDeutsch=1 -\usepackage[pdfencoding=pdfdoc]{hyperref} -\hypersetup{% -linktoc=all,% -breaklinks=true,% -colorlinks,% -linkcolor=RoyalBlue,% Orchid -urlcolor=OliveGreen,% -pdfauthor={Jean-Fran\c cois Burnol, Christine Römer},% -pdftitle={Das etoc Paket},% -pdfsubject={Inhaltsverzeichnisse mit LaTeX},% -pdfkeywords={LaTeX, Inhaltsverzeichnis},% -pdfstartview=FitH,% -pdfpagemode=UseOutlines} -\fi - -% added usage of package bookmark 2013/10/10 -\usepackage{bookmark} - -\usepackage{framed} -\usepackage{varioref} - -\usepackage{etoc} % loads multicol - -%-------- -% 10 octobre 2013: -\AtBeginDocument{\addtocontents{toc}{\protect\hypersetup{hidelinks}}} -% mieux que de passer hidelinks comme option à hyperref. -% Comme toutes les tocs sont faites dans un groupe, c'est très -% bien. (et j'utilise \etocaftertitlehook pour autre chose) - -%-------- -% add-ons for the new section `surprising uses of etoc' (2013/01/24) -\newcounter{visibletoc} -\renewcommand{\etocaftertitlehook} - {\stepcounter{visibletoc}% - \phantomsection - \etoctoccontentsline{visibletoc}{\thevisibletoc}} -\etocsetlevel{visibletoc}{6} -%-------- -% add-ons for the `fancy TOC' (2013/01/25) - \newcounter{dummypart} - \newcounter{dummychapter} - \newcounter{dummysection} - \etocsetlevel{dummypart}{6} - \etocsetlevel{dummychapter}{6} - \etocsetlevel{dummysection}{6} -%-------- -% for "Another compatibility mode" (2013/02/21): -% attention au 5 qui est hard-coded -% (pour 1.07f c'était 3, maintenant 5 pour 1.07g; et 4 maintenant pour 1.07h...) -% (et pour 1.07i.. à nouveau 3 faudra vraiment que je change cela) -% et maintenant =4 pour version de la doc du 28 avril 2014... faudra vraiment qu -% je mette un mécanisme plus robuste pour cette TOC. -\makeatletter -\newcommand*{\MyQuasiStandardTOC}[1]{% - \begingroup - \let\savedsectionline\l@section - \let\savedsubsectionline\l@subsection - \etocsetstyle{section}{} - {\ifnum\etocthenumber=4 % <- check this if new sections added to user manual - \etocsetstyle{subsection} - {\par\nopagebreak\begingroup - \leftskip1.5em \rightskip\@tocrmarg - \parfillskip \@flushglue - \parindent 0pt - \normalfont\normalsize\rmfamily\itshape - \etocskipfirstprefix} - {\allowbreak\,--\,} - {\etocname\ \textup{(\etocnumber)}} - {.\par\endgroup}% - \else - \etocsetstyle{subsection}{}{} - {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \fi} - {\savedsectionline - {\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} - {}% - \etocstandarddisplaystyle - \etocsetnexttocdepth {2}% - \tableofcontents #1 - \endgroup} -\makeatother -%-------- -% Statistics on sections and subsections in a part \thispartstats: -% 2 mars 2013 -% cette version utilise des box, plutôt que des macros. -% mais on ne peut plus alors changer de police etc... - -% 11 octobre 2013, je retire les \color{teal}. - -\newsavebox\firstnamei -\newsavebox\firstnumberi -\newsavebox\lastnamei -\newsavebox\lastnumberi -\newsavebox\firstnameii -\newsavebox\firstnumberii -\newsavebox\lastnameii -\newsavebox\lastnumberii -\newcounter{mycounti} -\newcounter{mycountii} - -\newcommand*{\thispartstatsauxi}{} -\newcommand*{\thispartstatsauxii}{} -\newcommand*{\oldtocdepth}{} - -\newcommand*{\thispartstats}{% - \setcounter{mycounti}{0}% - \setcounter{mycountii}{0}% - \def\thispartstatsauxi{% - \sbox{\firstnamei}{\etocname}% - \sbox{\firstnumberi}{\etocnumber}% - \def\thispartstatsauxi{}}% - \def\thispartstatsauxii{% - \sbox{\firstnameii}{\etocname}% - \sbox{\firstnumberii}{\etocnumber}% - \def\thispartstatsauxii{}}% - \begingroup - \etocsetstyle{subsection} - {} - {} - {\thispartstatsauxii - \stepcounter{mycountii}% - \sbox{\lastnameii}{\etocname}% - \sbox{\lastnumberii}{\etocnumber}} - {} -\ifnum\ForEnglish=1 - \etocsetstyle{section} - {} - {} - {\thispartstatsauxi - \stepcounter{mycounti}% - \sbox{\lastnamei}{\etocname}% - \sbox{\lastnumberi}{\etocnumber}} - {Here are some statistics for this part: it contains \arabic{mycounti} - section\ifnum\value{mycounti}>1 s\fi{} and - \arabic{mycountii} subsection\ifnum\value{mycountii}>1 s\fi. The name of - the first section is - ``\unhbox\firstnamei{}'' and the corresponding number is - ``\unhbox\firstnumberi''. The name of the last section is - ``\unhbox\lastnamei{}'' and its number is - ``\unhbox\lastnumberi''. - \ifnum\value{mycountii}>0 The name of - the first subsection is - ``\unhbox\firstnameii{}'' and the corresponding number is - ``\unhbox\firstnumberii''. The name of the last subsection is - ``\unhbox\lastnameii{}'' and its number is - ``\unhbox\lastnumberii''.\fi } -\fi -\ifnum\ForDeutsch=1 - \etocsetstyle{section} - {} - {} - {\thispartstatsauxi - \stepcounter{mycounti}% - \sbox{\lastnamei}{\etocname}% - \sbox{\lastnumberi}{\etocnumber}} -% Hier wird ein Befehl definiert, der fuer jedes Teil ein paar Fakten sammelt -% und ausgibt. - {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält - \arabic{mycounti} Abschnitt\ifnum\value{mycounti}>1 e\fi{} und - \arabic{mycountii} Unterabschnitt\ifnum\value{mycountii}>1 e\fi. Der Name des ersten - Abschnitts lautet - \glqq\unhbox\firstnamei{}\grqq~und er hat die Gliederungsnummer - \glqq\unhbox\firstnumberi\grqq. Der Name des letzten Abschnitts lautet - \glqq\unhbox\lastnamei{}\grqq~und er hat die Nummer - \glqq\unhbox\lastnumberi\grqq. - \ifnum\value{mycountii}>0 Der erste - Unterabschnitt heißt - \glqq\unhbox\firstnameii{}\grqq~und er hat die Nummer - \glqq\unhbox\firstnumberii\grqq. Der Name des letzten Unterabschnitts ist - \glqq\unhbox\lastnameii{}\grqq~und dessen Nummer ist - \glqq\unhbox\lastnumberii\grqq.\fi }% -\fi - \etocinline -% october 10, 2013. - \etocsetnexttocdepth {2}% - \etocsettocstyle {\pdfbookmark[1]{Statistics}{\thepart.STATS}}{} - \localtableofcontents - \endgroup -} - - -\newcommand\etoc{% - \texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}}{etoc}\xspace} - -\DeclareRobustCommand\csa [1] {{\ttfamily\hyphenchar\font45 \char`\\ #1}} - -\DeclareRobustCommand\csb [1] - {\hyperref[#1] {\ttfamily\hyphenchar\font45 \char`\\ #1}} - -\newcommand\cshyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} - -\newcommand\csbhyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} - -\newcommand\toc{\csa{table\-of\-contents}\xspace} -\newcommand\localtoc{\csa{local\-table\-of\-contents}\xspace} - -\newcommand\lowast{\raisebox{-.25\height}{*}} -\newcommand\starit[1]{\csa{#1\lowast}} -\newcommand\staritb[1]{\csb{#1}\lowast} - -\hyphenation{toc-depth sec-num-depth con-tents-line} -\hyphenation{etoc-tan-dard-lines -etoc-de-fault-lines -etoc-toc-lines -etoc-set-style -etoc-name -etoc-page -etoc-skip-first-pre-fix -etoc-num-ber -etoc-if-first -etoc-ifnum-bered -etoc-the-name -etoc-the-num-ber -etoc-the-page -etoc-link -etoc-the-linked-name -etoc-the-linked-num-ber -etoc-the-linked-page -etoc-the-link -etoc-set-level -etoc-set-toc-depth -etoc-set-next-toc-depth -etoc-set-toc-depth -etoc-obey-toc-toc-depth -etoc-ig-nor-toc-depth -etoc-depth-tag -etoc-set-tag-depth -etoc-obey-depth-tags -etoc-ig-nore-depth-tags -etoc-stan-dard-dis-playstyle -etoc-set-toc-style -etoc-mul-ti-col-style -etoc-mul-ti-col -etoc-lo-cal-mul-ti-col -etoc-toc-style -etoc-toc-style-with-marks -etoc-toc-style-with-mark-snouc -etoc-ruled-style -etoc-ruled -etoc-lo-cal-ruled -etoc-framed-style -etoc-framed -etoc-lo-cal-framed -etoc-in-line -etoc-af-ter-ti-tle-hook -etoc-af-ter-con-tentshook -etoc-af-ter-toc-hook -etoc-skip-first-pre-fix -etoc-only-on-first} - -\hyphenation{ -etoc-font-mi-nus-two -etoc-font-mi-nus-one -etoc-font-zero -etoc-font-one -etoc-font-two -etoc-font-three -etoc-sep-mi-nus-two -etoc-sep-mi-nus-one -etoc-sep-zero -etoc-sep-one -etoc-sep-two -etoc-sep-three -etoc-mi-nus-two-left-mar-gin -etoc-mi-nus-two-right-mar-gin -etoc-mi-nus-one-left-mar-gin -etoc-mi-nus-one-right-mar-gin -etoc-base-line-spread-mi-nus-two -etoc-base-line-spread-mi-nus-one -etoc-base-line-spread-zero -etoc-base-line-spread-one -etoc-base-line-spread-two -etoc-base-line-spread-three -etoc-toc-line-lead-ers -etoc-ab-brev-page-name -etoc-part-name -etoc-book-name -etoc-above-toc-skip -etoc-be-low-toc-skip -etoc-column-sep -etoc-mul-ti-col-sep -etoc-mul-ti-col-pre-tol-er-ance -etoc-mul-ti-col-tol-er-ance -etoc-de-fault-nb-col -etoc-in-ner-top-sep -etoc-top-rule -etoc-top-rule-col-or-cmd -etoc-in-ner-left-sep -etoc-in-ner-right-sep -etoc-in-ner-bot-tom-sep -etoc-left-rule -etoc-right-rule -etoc-bot-tom-rule -etoc-left-rule-col-or-cmd -etoc-rightrule-col-or-cmd -etoc-bot-tom-rule-col-or-cmd -etoc-bkg-col-or-cmd -etoc-framed-mp-hook} - -\hyphenation{next-toc-with-tags} -\frenchspacing - -\renewcommand\familydefault\sfdefault - -% for illustration only. Not to be recommended in general. -\setcounter{secnumdepth}{4} - -\ifnum\ForDeutsch=1 - \renewcommand*{\etocabbrevpagename}{S.~} -\fi - -\begin{document}\rmfamily -\thispagestyle{empty} - -%------------------------------------------------------------------------------- -% THIS IS TO AVOID TEX BEING CONFUSED BY CONDITIONALS IN FALSE BRANCHES -\catcode1 0 -\catcode92 12 - -^^Aifnum^^AForEnglish=1 - - ^^Acatcode92 0 - -% START ENGLISH VERSION -\bookmark[named=FirstPage,level=1]{Title page} - -\begin{center} - {\normalfont\Large The \etoc package}\\ - \textsc{Jean-François Burnol}\par - \footnotesize \ttfamily jfbu (at) free (dot) fr\\ - Package version: \etocpkgversion\ (\etocpkgdate) - \let\thefootnote\empty - \footnote{Documentation (\etocdocdate) generated from the source file - with timestamp ``\etocdtxtimestamp''.}\par -\end{center} -\setcounter{footnote}{0} - -\etocdepthtag.toc {preamble} - -%---- -% MAIN TOC -% -\etocsettocdepth {subsubsection} -\etoctoclines -\etocmarkboth\contentsname -\etocmulticolstyle[1] - {\pdfbookmark[1]{Table of contents}{MAINTOC}% - \noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} - -\begingroup - \etocsetlevel{subsection}{3} - \etocsetlevel{subsubsection}{6} - \tableofcontents \label{toc:main} -\endgroup - -\phantomsection\addcontentsline{toc}{section}{\abstractname} -\begin{abstract} - The \etoc package gives to the user complete control on how - the entries of the table of contents should be constituted - from the \emph{name}, \emph{number}, and \emph{page number} - of each sectioning unit. This goes via the definition of - \emph{line styles} for each sectioning level used in the - document. The package provides its own custom line styles. - Simpler ones are given as examples in the documentation. The - simplest usage will be to take advantage of the layout facilities - of packages dealing with list environments. - - Regarding the \emph{global toc display}, \etoc provides pre-defined styles - based on a multi-column format, with, optionally, a ruled title or framed - contents. - - The \csa{tableofcontents} command may be used arbitrarily many times and it - has a variant \csa{localtableofcontents} which prints tables of contents - `local' to the current surrounding document unit. An extension of the - \csa{label}/\csa{ref} syntax allows to reproduce (with another layout) a local - table of contents defined somewhere else in the document. - - Via ``depth tags'', one gets an even finer control for each table of contents - of which sectioning units it should, or not, display. - - The formatting inherited (and possibly customized by other - packages) from the document class will be used when in - \emph{compatibility mode}. - - The assignment of levels to the sectioning units can be changed at any - time, and \etoc can thus be used in a quite general manner to - create custom ``lists of'', additionally to the tables of contents - related to the document sectioning units. No auxiliary file is used - additionally to the standard |.toc| file. -\end{abstract} - -\section{Foreword} - -Popular packages dealing with TOCs include |tocloft|, |titletoc| -and |minitoc|. Why another one? I started \etoc -for my own use, and found out only later about these mentioned -packages. - -As is well explained in the |tocloft| package documentation, -the standard \LaTeX{} layout for the Table of Contents is -buried in the class definitions. In particular, most of the -lengths therein are hardcoded, and the only way for the user -to change them is to recopy the class definitions into the -document and then change them to obtain what is desired -(within suitable \csa{makeatletter} and \csa{makeatother}). -The more reasonable alternative is to use a dedicated package such as -|tocloft| or to use another flexible document class. - -However, although now things are hopefully not hard-coded, one -still has to go through the package or class interface. This -means one has to memorize a (possibly large) number of macros -which will serve only to this task, and one will always be -constrained to customizing one initially given layout. - -The spirit of \etoc is something else. The user will deal with -the \emph{name}, the \emph{number} and the \emph{page number} -corresponding to each document sectional division (and -found in a line of the |.toc| file) in a completely arbitrary -manner: they are made available via the \csb{etocname}, -\csb{etocnumber}, and \csb{etocpage} commands. - -\etoc appears to be (at least partially) compatible with the -|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| and -|memoir| classes. Starting with release |1.07k| it is possible to -use \etoc concurrently with package |tocloft|. - -\section{License} - -\begingroup\ttfamily\small\hyphenchar\font -1 - \parindent0pt - \obeyspaces\obeylines % -\etocLicense\endgroup - - -\clearpage - -\etocsettocdepth {subsection} - -\etocdepthtag.toc{overview} - -\part{Overview}\label{part:overview} - -\thispartstats - -\invisiblelocaltableofcontents \label{toc:overview} - -\section{Do I need to be a geek to use \etoc?} - -Not quite. The simplest way is to use |enumerate| environments, -with the customizing facilities of packages such as -|enumitem|,\footnote{\url{http://ctan.org/pkg/enumitem}} to -display the data fetched by \etoc from the |.toc| file. The data -consists of the \emph{name} (\csb{etocname}), \emph{number} -(\csb{etocnumber}), and \emph{page number} (\csb{etocpage}) as -extracted -% \footnote{although \LaTeX{} has been promoted as -% separating contents from form, there are some areas where its -% real implementation is very far from this ideal. And the |.toc| -% file is a case in point; not to mention the hard-coded -% dimensions, with use of the @ sign, -% in the macros responsible for constructing the typeset table of -% contents.} -from the |.toc| file. - -This is -illustrated \hyperref[toc:a]{at the start} of -\autoref{part:linestyles}. More -sophisticated examples would use more sophisticated |enumitem| -options. One may say then that again the user has to memorize some -customizing! indeed, but the syntax and option names to memorize -are in no way related only to matters of tables of contents, hence -an economy of use of the poor brain. - -% People who -% know the internals of \LaTeX2e well (which is not my case) could -% happily use directly a |\list| command; - -Next in ease of use, perhaps, is the method explained -\hyperref[sec:firstexample]{later in this part} (\autoref{sec:firstexample}). -For this some knowledge of |\leftskip|, |\rightskip|, etc... is necessary. And a -slight elaboration of this method, whose code is to be found in -\autoref{ssec:tocwithdepthtags}, allows to mimick very well, if so desired, the -standard looks. - -As will be amply illustrated in this manual, \etoc is quite -versatile (especially as it allows to re-define at any point in -the document the hierarchy of sectioning units) and one can -achieve surprising effects with it: \autoref{part:surprising} is -devoted to this, and some more is to be found in -\autoref{part:tipsandtricks}. - -\begin{framed} -\setcounter{mycounti}{0}% - \etocinline -\etocsetlevel{part}{1} -\etocsetlevel{chapter}{1} -\etocsetlevel{visibletoc}{0} -\etocsetstyle{visibletoc} - {} - {\stepcounter{mycounti}} - {} - {} -\etocsettocstyle{}{} -\etocsetnexttocdepth{0} -\tableofcontents -A very important aspect of \etoc is that it is geared towards making many TOCs -in the same document, \emph{using only one |.toc| file}! The present -documentation contains \arabic{mycounti} visible tables of contents (and a few -invisible ones) and uses only one |.toc| file!\footnotemark{} So one should -think -twice before adding manually extra commands to the |.toc| file (see -\autoref{sec:addingtotoc}). -\end{framed} - -\footnotetext{and the counting itself has been achieved by a table of contents - which was inserted in the framed paragraph! \dots the technique for this kind - of effect will be explained later.} - - -\subsection{Limitations in the use of list environments for - tables of contents} -\label{ssec:limitations} - -There are some limitations to the use of list environments -for typesetting TOCs. One of them is intrinsic to the scope -limitations created by the groups associated to the -environments: the |.toc| file -may contain, besides the information to be typeset in the -TOCs, some other commands, such as language changing -commands, which do not expect to see their scope limited in -this way inside a group (\LaTeX's environments create groups). - -Therefore the built-in ``line styles'' proposed by \etoc as an example (and -which are illustrated\footnote{with a twist, subsections having been downgraded - to the subsubsection style\dots} by the \hyperref[toc:main]{main table of - contents} in this document) do not make use of environments. Actually, in this -user manual, only the \hyperref[toc:a]{table of contents} at the start of -\autoref{part:linestyles} and the \autoref{toc:allsubsections} (which is a TOC!) -have their line styles expressed in terms of enumerate environments. - -\section{Line styles and toc display style} - -A distinction shall be made between the \emph{line styles}, -\emph{i.e.} the way the name, number and page numbers are -used at each level, and the \emph{toc display style} (for -lack of a better name) which tells how the title should be -set, whether an entry in the |.toc| file should be made, -whether the contents should be typeset with multiple columns, -etc... the latter is governed by the command -\csa{etocsettocstyle} (or some higher-level commands) and the -former by the command \csa{etocsetstyle}. - - -\subsection{\csbhyp{etocsetstyle} for the line styles} - -The command to inform \etoc of what to do with \csa{etocname}, \csa{etocnumber}, -and \csa{etocpage} is called \csb{etocsetstyle}. It has five mandatory -arguments. The first one is the name of the sectional unit: a priori known names -are |book|, |part|, |chapter|, |section|, |subsection|, |subsubsection|, -|paragraph|, and |subparagraph|, and any other name can be declared and assigned -to a (numeric) level via the \csb{etocsetlevel} command.\footnote{under the - \texttt{memoir} class, \etoc knows \texttt{appendix} as a sectioning - name.} - -The four other arguments of \csb{etocsetstyle} specify: 1) \emph{what to do when - this level is first encountered, down from a more general one,} then 2) \& 3) -(two arguments, a `prefix' and a `contents') \emph{what to do when a new entry - of that type is found,} and 4) \emph{the last argument is the code to execute - when a division unit of higher importance is again hit upon.} - -\subsection{\csbhyp{etocsettocstyle} for the toc display} - -The \csb{etocsettocstyle} command allows to specify what -should be done before and after the line entries of the TOC -are typeset, and in particular how the title should be -printed. It has two arguments, the first one is executed -before the TOC contents (typically it will print -``Contents'' and define suitable marks for the page headings) and -the second is executed after the TOC contents. - -\etoc provides four (customizable) higher level toc styles: -\csb{etocmulticolstyle}, \csb{etoctocstyle}, -\csb{etocruledstyle}, and \csb{etocframedstyle}. All use the -|multicol| package with a default of two columns -(single-column mode is obtained with the optional argument |[1]|). - -These commands must be followed either by \toc or \localtoc. - -\subsection{Compatibility mode}\label{ssub:compat} -\label{etoctoclines} -\label{etocstandardlines} - -Both for the ``line styles'' and the ``toc display style'', it is -possible to switch into a compatibility mode which uses the -defaults from the -document class.\footnote{for the ``toc display style'' - \etoc checks if it knows the class, and if not defaults to - the |article| class layout. It will also check if - \texttt{tocloft} has customized the TOC title.} -This is activated by:\\ -\makebox[5.2cm][l]{\csb{etocstandardlines}} - |% `line entries' as without \usepackage{etoc}|\\ -\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}} - |% `toc display' as without \usepackage{etoc}| - - -If the command \csa{etocsetstyle} has \emph{not been used in the -preamble} the package will be at |\begin{document}| in this - compatibility mode: hence just adding \csa{usepackage\{etoc\}} - should hopefully not change anything to the look of a - previously existing document, under the |article|, |book|, - |report|, |scrartcl|, |scrbook|, |scrreprt| and |memoir| - classes. - - Any use of \csa{etocsetstyle} in the \emph{preamble or body} of - the document turns off from that point on the compatibility mode - for line styles, but maintains the compatibility mode for the - TOC title. One re-activates the compatibility mode for line - styles with \csb{etocstandardlines}; and - \csb{etoctoclines} will re-activate the line styles as defined - with the help of \csa{etocsetstyle}, if their scope was not - limited to a group or environment. - - The command \csb{etocdefaultlines} resets the line styles as - pre-defined internally by \etoc and described in - \autoref{etocdefaultlines}. - -Even if \csb{etocsetstyle} has been used, the global display style -remains initially as defined by the document class (or the -|tocloft| package); one needs to use the command -\csb{etocsettocstyle} or its variants to exit from this -compatibility mode at the ``toc display style'' level. It will be -re-activated if use if made of \csb{etocstandarddisplaystyle}. - -\section{A first example} -\label{sec:firstexample} - -Let us present a first example of specification for line styles. -Immediately after the start of \autoref{part:overview} we inserted in the -source file: -\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|} This -sets-up the label |toc:overview|, and we can use it at any location in the -document: \centeredline{|\tableofcontents \ref{toc:overview}|} And as we used -|\invisible...|,\footnote{this is a shortcut for setting temporarily the - |tocdepth| to |-3|, which has the effect to tell \etoc not to print the TOC, - and not even the heading.} the local TOC will exist only through its clones -elsewhere in the document. - -We could use the line styles defined by \etoc, with \csb{etocdefaultlines}, or -the default document class styles with \csb{etocstandardlines}, but we were a -bit more ambitious here and wanted to design our own. The technique is a simple -one: each heading is in its own paragraph, which may extend on multiple lines; -it is responsible for setting its own |\leftskip|. - - - -\begingroup -\parindent 0pt -\parfillskip 0pt -\leftskip 0cm -\rightskip 1cm -\etocsetstyle {section} - {} - {\leavevmode\leftskip 0cm\relax} - {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip .5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 1.5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC of - \autoref{part:overview} (\nameref{part:overview})} -\tableofcontents \ref {toc:overview} -\endgroup - - -This is a simple design which does not make provisions for page breaks -which should be discouraged in-between a section and a subsection -etc\dots{} as we only used it for the table of contents of this part, thus -with sections as top levels, there was no need to specify a style for -parts too (we defined a subsubsection line style but as it turns -out there are no subsubsections in this part). The two commands used are -\csb{etocsetstyle} for specifying the line styles, and -\csb{etocruledstyle} for the TOC global style. - -The |\rightskip| is shared by all, and creates space where the page -numbers get printed. For an elaboration of this technique see the next -\autoref{sec:secondexample} as well as \autoref{ssec:tocwithdepthtags} -which provides a TOC with parts and paragraphs. Both allow multi-line -headings and employ a technique for putting page numbers in the right margin -which was inspired from what \LaTeX2e's |\@dottedtocline| macro does. - - - -\begin{verbatim} -\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm -\etocsetstyle {section} - {} - {\leavevmode\leftskip 0cm\relax} - {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip .5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 1.5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC of - \autoref{part:overview} (\nameref{part:overview})} -\tableofcontents \ref {toc:overview} -\endgroup -\end{verbatim} - -\section{A second example} -\label{sec:secondexample} - -This second example displays only the contents from -\autoref{part:linestyles} and \autoref{part:globalcmds}. This selection -is done via the technique of \emph{depth tags}, described in -\autoref{etocsettagdepth} and \autoref{ssec:tocwithdepthtags}. Its -layout is a bit like the one of the \hyperref[toc:main]{main document - TOC}, although the line styles are coded very differently. - -\begingroup -\newcommand*{\DotsAndPage} -{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% - \hfill\nobreak - \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} - -\etocsetstyle {part} -{\parindent 0pt - \nobreak - \etocskipfirstprefix} -{\pagebreak[3]\bigskip} -{\large\rmfamily\bfseries\scshape\centering - \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} -{} - -\etocsetstyle {section} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \nobreak\medskip - \etocskipfirstprefix} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \pagebreak[1]\smallskip} -{\normalsize\rmfamily\bfseries\scshape - \etocnumber. \etocname\DotsAndPage } -{\parfillskip 0pt plus 1fil\relax } - -\etocsetstyle {subsection} -{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax - \nobreak\smallskip} -{} -{\footnotesize\sffamily\mdseries\itshape - \etocname{} (\etocnumber, p. \etocpage). } -{\par\medskip} - -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {none} -\etocsettagdepth {arbitrarily}{none} -\etocsettagdepth {surprising} {none} -\etocsettagdepth {linestyles} {subsection} -\etocsettagdepth {globalcmds} {subsection} -\etocsettagdepth {custom} {none} -\etocsettagdepth {tips} {none} -\etocsettagdepth {code} {none} - -\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} -\etocsetnexttocdepth {subsection} -\tableofcontents -\endgroup - -The code: -\begin{verbatim} -\begingroup -\newcommand*{\DotsAndPage} -{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% - \hfill\nobreak - \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} - -\etocsetstyle {part} -{\parindent 0pt - \nobreak - \etocskipfirstprefix} -{\pagebreak[3]\bigskip} -{\large\rmfamily\bfseries\scshape\centering - \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} -{} - -\etocsetstyle {section} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \nobreak\medskip - \etocskipfirstprefix} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \pagebreak[1]\smallskip} -{\normalsize\rmfamily\bfseries\scshape - \etocnumber. \etocname\DotsAndPage } -{\parfillskip 0pt plus 1fil\relax } - -\etocsetstyle {subsection} -{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax - \nobreak\smallskip} -{} -{\footnotesize\sffamily\mdseries\itshape - \etocname{} (\etocnumber, p. \etocpage). } -{\par\medskip} - -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {none} -\etocsettagdepth {arbitrarily}{none} -\etocsettagdepth {surprising} {none} -\etocsettagdepth {linestyles} {subsection} -\etocsettagdepth {globalcmds} {subsection} -\etocsettagdepth {custom} {none} -\etocsettagdepth {tips} {none} -\etocsettagdepth {code} {none} - -\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} -\etocsetnexttocdepth {subsection} -\tableofcontents -\endgroup -\end{verbatim} - -\section{Linked list of the main package commands} - -\begingroup\raggedcolumns -\advance\linewidth18pt -\begin{multicols}{3}\parindent0pt\relax - \csb{etocaftercontentshook}\par - \csb{etocaftertitlehook}\par - \csb{etocaftertochook}\par - \csb{etocbeforetitlehook}\par - \csb{etocdefaultlines}\par - \csb{etocdepthtag.toc}\par - \csb{etocdisplay}\par - \csb{etocframedstyle}\par - \csb{etocframed}\par - \csb{etociffirst}\par - \csb{etocifnumbered}\par - \csb{etocignoredepthtags}\par - \csb{etocignoretoctocdepth}\par - \csb{etocinline}\par - \csb{etoclink}\par - \csb{etoclocalframed}\par - \csb{etoclocalmulticol}\par - \csb{etoclocalruled}\par - \csb{etocmulticolstyle}\par - \csb{etocmulticol}\par - \csb{etocname}\par - \csb{etocnumber}\par - \csb{etocobeydepthtags}\par - \csb{etocobeytoctocdepth}\par - \csb{etocpage}\par - \csb{etocruledstyle}\par - \csb{etocruled}\par - \csb{etocsetlevel}\par - \csb{etocsetnexttocdepth}\par - \csb{etocsetstyle}\par - \csb{etocsettagdepth}\par - \csb{etocsettocdepth.toc}\par - \csb{etocsettocdepth}\par - \csb{etocsettocstyle}\par - \csb{etocskipfirstprefix}\par - \csb{etocstandarddisplaystyle}\par - \csb{etocstandardlines}\par - \csb{etocthelinkedname}\par - \csb{etocthelinkednumber}\par - \csb{etocthelinkedpage}\par - \csb{etocthelink}\par - \csb{etocthename}\par - \csb{etocthenumber}\par - \csb{etocthepage}\par - \csb{etoctoccontentsline}\par - \csb{etoctoclines}\par -%\vspace{5\baselineskip}\hrule height 0pt -\end{multicols} -\endgroup - - -\clearpage -% 15 octobre, je teste les tags -\etocdepthtag.toc {arbitrarily} - -\part{Arbitrarily many TOCs, and local ones too} -% 13 octobre, ceci était une section avant - -\thispartstats - -\etocsettocstyle{}{} -\etocstandardlines -\localtableofcontents - -\section{Labeling and reusing elsewhere} - -\etoc allows arbitrarily many \csa{tableofcontents} commands in -your document. The line styles and the toc display style may of -course be changed in-between. Furthermore -\csa{localtableofcontents} will print local tables of -contents: \emph{i.e.} all sections and sub-units inside a -given chapter, or all subsubsections and lower inside a given -subsection, etc . . . - -\etoc allows the labeling of a TOC with (for example) -\csa{label\{toc:A\}} and will redisplay it elsewhere when -told \csa{tableofcontents}\csa{ref\{toc:A\}}. The actual -layout (title inclusive) used for the cloned TOC will be -decided locally. The line styles and toc display style -(including the title) will be the current ones and the -current value of the |tocdepth| counter is obeyed. As an -example the table of contents of -\autoref{part:custom} is in a \hyperref[toc:d]{float} which appears -\vpageref{toc:d}. -\begin{figure}[ht!] - \centering - \begingroup - \etocstandardlines - \renewcommand{\etocbkgcolorcmd}{\color{green!5}} - \renewcommand{\etocbelowtocskip}{0pt\relax} - \fboxsep1ex - \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone - \hyperref[toc:c]{I am from far away}}}} - \tableofcontents \label{toc:d} \ref{toc:c} - \endgroup -%% \centeredline{The original is \hyperref[toc:c]{there}.} -\end{figure} - -We used this: -\begin{verbatim} -\begin{figure}[ht!] - \centering - \begingroup - \etocstandardlines - \renewcommand{\etocbkgcolorcmd}{\color{green!5}} - \renewcommand{\etocbelowtocskip}{0pt\relax} - \fboxsep1ex - \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone - \hyperref[toc:c]{I am from far away}}}} - \tableofcontents \label{toc:d} \ref{toc:c} - \endgroup -\end{figure} -\end{verbatim} -Important: one should not use elsewhere \toc|\ref{toc:d}|. To clone again, one -must use a reference to the original label: \toc|\ref{toc:c}|. - -\section{A powerful functionality of \etoc: the - re-assignment of levels with \csbhyp{etocsetlevel}} - -The intrinsic levels manipulated by \etoc are numeric: from -|-2| (which corresponds to |book| in the |memoir| class) -down (from the big to the small) -to |5| (|subparagraph|). But the assignment of a numeric level -to a given name can be modified at any time with the command -\csb{etocsetlevel}\marg{level\_name}\marg{number}. In conjunction -with the use of the \LaTeX{} |tocdepth| counter, this has -powerful applications: \meta{level\_name} does not have to -coincide with an actual document sectioning command, and \etoc -can be used to print arbitrary ``lists of things'', using no -other auxiliary file than the |.toc| file. This is -explained further in \autoref{part:surprising}. - -\begin{framed} - It is often said that in the standard classes, the sectioning - level of |\part| is |0| in the classes not having a |\chapter| - command, and |-1| in classes having a |\chapter| command. This - is \emph{correct} for what regards the \emph{automatic - numbering}, as is governed by the value of the |secnumdepth| - counter; but it is \emph{wrong} for what regards the effect of - the |tocdepth| counter: setting the |tocdepth| to |-1| in the - |article| class just before |\tableofcontents| does \emph{not} - prevent Parts from appearing in the Table of Contents. One has - to set it to |-2| for that, whether in the |article| or in the - |book| class. - - The canonical levels, a priori known to \etoc, are those of - relevance to the \textbf{|tocdepth|} counter in the standard - classes and are recapitulated in this table: \centeredline{ - \fbox{\begin{tabular}{rc} - (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\ - section&1\\ subsection&2 \\ - subsubsection&3 \\ paragraph&4 \\ subparagraph& 5 - \end{tabular}}} - -\smallskip With \etoc, the user can easily print a local table of -contents inside a given subsection, where subsubsections will be -printed in the style of sections, paragraphs in the style of -subsections, and subparagraphs in the style of subsubsections, if -so desired. One can also decide to set everything to be at the level -|6| (never displayed by \etoc), except for example -paragraphs, promoted to be at level |1|, and then one obtains a nice -table of contents of all the paragraphs from the document! -(|tocdepth| at least |1|)\footnotemark -\end{framed} - -\footnotetext{and one should naturally not print this TOC of paragraphs in - compatibility mode, which would insist on inserting a gigantic left - margin.} - -\section{The \csbhyp{etoc\-set\-toc\-depth} and - \csbhyp{etoc\-set\-next\-toc\-depth} commands} -\label{etocsettocdepth} -\label{etocsetnexttocdepth} - -The |tocdepth| counter has no bearing on what gets written to the |.toc| file; -its action is only on the actual typesetting of the table of contents: in the -standard classes there is only one |\tableofcontents| possible, whereas with -\etoc, arbitrarily many are allowed, so one may change |tocdepth| to the -appropriate value (which decides the finest sectioning level displayed) again -and again each time a table of contents needs to be typeset. - -\etoc provides \csb {etocsettocdepth}\marg{level} whose mandatory argument is -either -numeric (from |-3| to |5|) or a division name such as |subsection| or -|subsubsection| or any name previously declared to \etoc with -\csb{etocsetlevel} (the keywords |all| and |none| are recognized, although not -corresponding to a document division). -This does the appropriate |\setcounter{tocdepth}{numeric_level}|. - -As is explained in the next subsection, |tocdepth| is used by |hyperref|, and -one must take steps to prevent its changes from influencing the bookmarks, too. -So, \etoc has \csb {etocsetnexttocdepth}\marg{level} whose influence ceases -immediately after the next table of contents. Thus, |\invisibletableofcontents| -is essentially |\etocsetnexttocdepth{none}\tableofcontents|. - -The simplest course is thus to have after |\begin{document}| and before the - first |\tableofcontents| a single instance of the \csb{etocsettocdepth} - command, with argument the deepest level (or most commonly used deepest level) - among the tables of contents of the document, and to use locally, - where needed, \csb{etocsetnexttocdepth} before |\tableofcontents| or - |\localtableofcontents|. - -\subsection{The hyperref option \emph{bookmarksdepth}} -\label{ssec:bookmarksdepth} - -When modifying the counter |tocdepth| for the purposes of -multiple uses of \toc or \localtoc, one should be aware that -package |hyperref| by default takes into account the -\emph{current} value of the |tocdepth| counter to decide -whether the |pdf| file will contain a bookmark corresponding -to sectioning commands encountered in the source file. Thus, -one typically needs to reset |tocdepth| to its previous -value after having temporarily modified it for a given table of -contents. - -Or, there is the \emph{bookmarksdepth=n} option of package -|hyperref|, with \emph{n} the desired document bookmarks -maximal depth, which can be numeric or the name of a level known to -|hyperref|. This documentation previously passed |bookmarksdepth=3| as -option to |hyperref|, so even if |tocdepth| was left to |1| -by inadvertance after printing a certain table of contents -this did not modify the bookmark tree of the |pdf| file. Now that -\csb{etocsetnexttocdepth} has been added to the package, we have used it -systematically and there was no need for |bookmarksdepth=3| anymore. - -\section{The command \csbhyp{etoc\-set\-toc\-dep\-th.toc}} -\label{etocsettocdepth.toc} - -This command \csb{etocsettocdepth.toc} implements some functionality of -|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. I thank D.B. for drawing - my attention to the incompatibility of this package with \etoc.}, a package -which however was incompatible with \etoc (it can still be used for its -|secnumdepth|-related commands, but its |toc|-related activities will get -canceled by \etoc) and more-or-less designed for a single table of contents. - -The action of \csb{etocsettocdepth.toc} is totally different than the one of -\csb{etocsettocdepth}. Rather than modifying the |tocdepth| counter immediately, -it adds a line to the |.toc| file which, when executed inside a table of -contents will enact this change. - -The command \csb{etocsettocdepth.toc}, like -\csb{etocsettocdepth}, accepts both numeric and named -arguments. In the case of a named argument, the actual numeric -value to be used is not yet decided at the time the |.toc| -file is created; it will be the value currently specified for -the named level at the time each table of contents (not having -done |\etocignoretoctocdepth|) is typeset. - -The |tocdepth| counter will never be set to a value finer than its initial value -at the start of the table of contents: so adding commands -\csb{etocsettocdepth.toc} in the document is a way to \emph{restrict} locally -the depth of the table of contents. For example to prevent inclusion in the -tables of contents of the sub-sub-sections of a given chapter. - -This -{\fbox{gets executed in ALL tables of contents.}} - -\subsection{The commands \csbhyp{etocobeytoctocdepth} and \csbhyp{etocignoretoctocdepth}} -\label{etocobeytoctocdepth} -\label{etocignoretoctocdepth} - - -So \csb{etocignoretoctocdepth} is provided to cancel the -\csa{etocsettocdepth.toc} mechanism when -needed; and \csb{etocobeytoctocdepth} will -re-activate it. The package does initially \csb{etocobeytoctocdepth}. - - -\section{The commands \csbhyp{etoc\-depth\-tag.toc} and \csbhyp{etocsettagdepth}} -\label{etocdepthtag.toc} -\label{etocsettagdepth} - -As mentioned above, when the argument to \csb{etocsettocdepth.toc} isn't -numeric but a named level the actual numeric level used is decided at the time -the TOC gets typeset, thus with the \emph{shuffling abilities of \etoc}, one may -obtain a very flexible control in the following way: one first declares with -\csb{etocsetlevel} some -dummy named level, say |partIII|, assigning it the invisible numeric level |6|. -Then before the actual third |\part| command in the source one inserts -\csb{etocsettocdepth.toc}|{partIII}|. At the location where the effect should -cease one inserts in the source \csb{etocsettocdepth.toc}|{all}|. It is now -possible to specify, each time one wants to typeset a TOC, what will be the -finest level for the entries originating in the third part: one just has to do -\csa{etocsetlevel}|{partIII}{1}| for example. This will limit to sections -(if |tocdepth| was at least at that level at the time \toc is encountered). - -This method has some limitations: -\begin{enumerate*}[label={(\roman*)}] - \item the second argument to \csb{etocsetlevel} must be numeric, - \item it can not be set to |-3| (which would be necessary if one wanted to - exclude an entire Book from a TOC in a |memoir| document with multiple such - Books \dots admittedly a possibly rare case!), - \item it is a bit of a hack as |partIII| is not a real division unit, but just - a \emph{tag}. -\end{enumerate*} - -Release |1.07h| has a command \csb{etocdepthtag.toc} which -makes it easier to achieve this variable local control of the |tocdepth| at the -time of typesetting TOCs. - -It is used as \csb{etocdepthtag.toc}\marg{tag\_name}, where the \meta{tag\_name} -is anything, and this will put the tag in the |.toc| file. When typesetting a -TOC, one issues a series of commands -\csb{etocsettagdepth}\marg{tag\_name}\marg{level} where the \meta{level} may be -either numeric (from |-3| to |5|) or the name of a division unit known to \etoc, -or |none| or |all|. The effect of the tag inside the |.toc| file will then be to -set the |tocdepth| counter to the desired value, in real time (as mentioned -already, this can not get finer than the initial value of |tocdepth| at the -start of the TOC). - -The added flexibility is thus that \csb{etocsetlevel} has not been used in a -kind of hacky way, that one may use named level depths, and the -keywords |none| and |all|. - -As usual, once the tag depths have been set, they remain in effect until getting -redefined or seeing their scope expire via the closing of a group or of a -surrounding -environment. For an example, see \autoref{ssec:tocwithdepthtags}. - - -\subsection{The commands \csbhyp{etocobeydepthtags} and \csbhyp{etocignoredepthtags}} -\label{etocobeydepthtags} -\label{etocignoredepthtags} - - -After \csb{etocignoredepthtags}, the |.toc| depth tags are ignored (but -\csb{etocdepthtag.toc} still works). The package does initially -\csb{etocobeydepthtags} which makes \etoc react to the found tags in the -|.toc| file. - - - - - -\section{Adding commands to the \texorpdfstring{\texttt{.toc}}{.toc} file} -\label{sec:addingtotoc} - -We described above \csb{etocsettocdepth.toc} and \csb{etocdepthtag.toc} which -both insert commands inside the |.toc| file. An even more general mechanism of -adding ``action tags'' to the |.toc| file could be envisioned, but this would -just be a wrapper for direct use of |\addtocontents{toc}{\something}|. - -One should be cautious when adding in this way -things -to the |.toc| file. For example, inserting -\csa{addtocontents}|{toc}{\string\clearpage}| -just -before a \csa{part} to fix the problem when some part entry (in -the table of contents) is isolated at the bottom of one page, -will cause problems with multiple TOCs: this \csa{clearpage} -will be executed by \etoc each time a \toc or \localtoc -command is encountered! The more prudent thing is to do -rather: {\csa{addtocontents}|{toc}{\string\myclearpage}|,} -to have a |\let\myclearpage\relax| at the top level of the -document and to use where needed something like: -\begin{verbatim} -\let\myclearpage\clearpage -\tableofcontents -\let\myclearpage\relax -\end{verbatim} -The |memoir| class has the command \csa{settocdepth} which -writes a \csa{changetoc\-depth} command inside the |.toc| file. -This will impact the typesetting by \etoc of \emph{all} tables -of contents, with (possibly) unexpected results: imagine the -document has \csa{settocdepth}|{chapter}| at some point to -avoid having the sections from subsequent chapters be listed -in the main table of contents. Then a local table of contents -in one of these chapters will print a title but will be -without any entry. - -As the |memoir| class by itself allows multiple\toc - these issues already arise there, - independently of \etoc, see page 170 of the |memoir| - manual. - -For this specific issue, the commands \csb{etocsettocdepth.toc}, -\csb{etocignoretoctocdepth} and \csb{etocobeytoctocdepth} are the way to go; or -their variants \csb{etocdepthtag.toc} and \csb{etocsettagdepth}. - -As an aside, any |\setcounter{tocdepth}{n}| command added directly to the |.toc| -file sees its effect (since release |1.07g|) canceled at the end of each table -of contents, which automatically does a |\setcounter{tocdepth}{previous_value}| -with the value active on entering the table of contents. - -\subsection{The hyperref option \emph{hidelinks}}\label{ssec:hidelinks} - -The colored links (and also the rectangle links) are a bit -annoying when used in tables of contents, especially when -the document uses \etoc and has plenty of them! One may wish -for having colored links, \emph{except} for those within -table of contents! -Indeed, why would things in TOCs need to be either framed in -rectangles or colored, when the user \emph{already expects - them to be links}? - -I use the following trick: either in the preamble using -|\AtBeginDocument|, or right after |\begin{document}|, I - have the command - \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|} - - \begin{framed} - All TOCs typeset by \etoc have their contents done - within a group (as if enclosed in an environment). So - the command \csa{hypersetup}|{hidelinks}| will be - executed by \emph{each} TOC, but its effect will be - limited to that TOC. - \end{framed} - - I found out experimentally that the option |hidelinks| could - indeed be set many times with |\hypersetup| (this is not the - case of all |hyperref| options). - - - -\section{Two Examples} - -\subsection{A Beautiful Thesis example} - -Here is another relatively simple example of use of the package -functionalities. -Let us set up some line styles. We choose a style for sections and -sub-sections which would be suitable for, respectively, sections and -sub-sections in an average length memoir. The line style specifications have -some redundancy for clarity, and do not care about what to do at possible page -breaks. Also, they do not worry about potential multi-column use. - -\begin{verbatim} -\begingroup % we start a group to keep the style changes local -\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm} -\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm} - -\etocsetstyle{section} % will pretend to be a Chapter -{\addvspace{1ex}\parfillskip0pt - \leftskip\tocleftmargin % (already done in title) - \rightskip\the\tocrightmargin plus 1fil - \parindent0pt\color{cyan}} % (already done) -{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} -{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\etocsetstyle{subsection} % will pretend to be a Section -{} -{\mdseries\large\addvspace{.5ex}\leavevmode} -{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\def\tmptitle{My Beautiful Thesis} -\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin - \leavevmode\leaders\hrule height 1pt\hfill\ - \huge\textit{\tmptitle}\par}{\bigskip} - -\tableofcontents \ref{toc:overview} -\endgroup -\end{verbatim} - - -\begingroup -\newlength{\tocleftmargin} -\setlength{\tocleftmargin}{5cm} -\newlength{\tocrightmargin} -\setlength{\tocrightmargin}{1cm} - -\etocsetstyle{section} -{\addvspace{1ex}\parfillskip0pt - \leftskip\tocleftmargin - \rightskip\the\tocrightmargin plus 1fil - \parindent0pt\color{cyan}} -{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} -{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\etocsetstyle{subsection} -{} -{\mdseries\large\addvspace{.5ex}\leavevmode} -{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\def\tmptitle{My Beautiful Thesis} - -\etocsettocstyle{\color{cyan}\parindent0pt\leftskip\tocleftmargin - \leavevmode\leaders\hrule height 1pt\hfill\ - \huge\textit{\tmptitle}\par}{\bigskip} - -\tableofcontents \ref{toc:overview} -% And again, for the fun of it: -% \def\tmptitle{My Very Beautiful Thesis} -% \tableofcontents \ref{toc:c} -\endgroup - - -\subsection{A TOC with a background color}\label{ssec:again} - -Let us now try out some more sophisticated line styles. The -display will use the \csa{etocframedstyle} package command, which -requires that the produced table of contents fits on a single -page. -We wrap it up in a \hyperref[toc:floating]{figure environment} showing up -\vpageref{toc:floating}. - - -\begin{figure}[htbp!]\centering -\colorlet{subsecnum}{black} -\colorlet{secbackground}{green!30} -\colorlet{tocbackground}{red!20!green!20} - -\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} -\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} - -\renewcommand{\etocleftrule}{\vrule width 3cm} -\renewcommand{\etocrightrule}{\vrule width 1cm} -\renewcommand{\etocbottomrule}{\hrule height 12pt} -\renewcommand{\etoctoprule}{\hrule height 12pt} - -\renewcommand{\etocinnertopsep}{0pt} -\renewcommand{\etocinnerbottomsep}{0pt} -\renewcommand{\etocinnerleftsep}{0pt} -\renewcommand{\etocinnerrightsep}{0pt} - -\newcommand\shiftedwhiterule[2]{% - \hbox to \linewidth{\color{white}% - \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip -\vskip#2} - -\etocsetstyle{subsubsection}{\etocskipfirstprefix} -{\shiftedwhiterule{\leftskip}{6pt}} -{\sffamily\footnotesize -\leftskip2.3cm\hangindent1cm\rightskip.5cm\noindent -\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par -\nointerlineskip\vskip3pt} -{} - -\etocsetstyle{subsection}{\etocskipfirstprefix} -{\shiftedwhiterule{1.5cm}{6pt}} -{\sffamily\small -\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent -\hbox to .75cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par -\nointerlineskip\vskip3pt} -{} - -\newcommand{\coloredstuff}[2]{% - \leftskip0pt\rightskip0pt\parskip0pt - \fboxsep0pt % \colorbox uses \fboxsep also when no frame! - \noindent\colorbox{secbackground} - {\parbox{\linewidth}{% - \vskip5pt - {\noindent\color{#1}#2\par}\nointerlineskip - \vskip3pt}}% - \par\nointerlineskip} - -% v1.07l on the occasion of traduction into German documentation: - % APRIL 26, 2014 Improvement in the section style for better placement of - % page number when the section name is more than one line long. Use of - % \makebox rather than \hbox, to be more LaTeX like. -\etocsetstyle{section} -{\coloredstuff{blue} - {\hfil \bfseries\large Contents of Part One\hfil}} -{\vskip3pt\sffamily\small} -{\coloredstuff{blue} - {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip - \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}% - \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}% - \vskip6pt} -{} - - -% attention car \ref{toc:floating} fera référence au compteur de -% toutes les toc, pas visibletoc. - -\etocframedstyle[1]{} -\tableofcontents \label{toc:floating} \ref{toc:overview} -\vspace{-\baselineskip} -\centeredline{|\tableofcontents \ref{toc:overview}| -(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})} -\end{figure} - -The actual design is not pre-built in \etoc; it uses its `framed' style with a -background color. The frame borders have been set to have the same color as the -one serving as background for the entire thing. This design (with other colors) -is in use also for \hyperref[toc:clone]{this other toc}, and the -reader is referred to its \hyperref[ssec:tocclone]{subsection} for the -coding used. - -% 11 octobre 2013 ceci était une section avant: -% (17 octobre, je m'aperçois qu'à cause des différents chgts, des -% sous-sections devenant des sections etc... \thisspecialstats ici ne -% faisait pas du tout des statistiques; vaut mieux supprimer et faire -% simplement \localtableofcontents pour maintenir le même layout.) - -% les \clearpage sont embêtants; surtout si je prétends qu'on peut -% recompiler facilement sous d'autres conditions... - -% on va plutôt faire un \vspace suffisant, cela sera un moindre mal - -%\vspace{1cm} - -\clearpage -\etocdepthtag.toc {surprising} -\part{Surprising uses of \etoc} -\label{part:surprising} - -\thispartstats %% (pas de sous-section) - -\etocstandardlines -\etocsettocstyle {}{} -\localtableofcontents - -\section{The TOC of TOCs} - -\begingroup % \endgroup just after the \tableofcontents command -\etocinline -\etocsetlevel{part}{1} -\etocsetlevel{visibletoc}{0} -\etocsetstyle{visibletoc} - {\etocskipfirstprefix} - {, } - {{\color{niceone}\etocname}} - {} -\etocsettocstyle{}{} -\etocsetnexttocdepth{visibletoc} - - -Here is the numbered and linked list of all tables of contents which are -displayed within this document:\footnote{The TOCs put in - floats may change the order: the numbers are listed - in the order the TOCs are typeset in the document; but the numbering - itself is from the order of the TOCs in the \emph{source} of - this document... } -\tableofcontents\endgroup. And to obtain -it here we just wrote:\par\smallskip -{\leftskip1cm\rightskip2cm - \ttfamily\small\baselineskip11pt \noindent Here is the - numbered and linked list of all tables of contents which are - displayed within this - document:~\string\tableofcontents.\par} - - The preparatory work was the following. First, we defined a - counter |visibletoc| whose vocation is to get incremented at - each displayed toc. \etoc has its own private counter but it - counts all TOCs, even those not displayed because the |tocdepth| - value was |-2| or |-3|. - - We could have added manually |\refstepcounter{visibletoc}| - and |\label| commands at all suitable locations in the - document source, and we would then have used here |\ref| - commands, but this imposes heavy manual editing of the source. - - There is a much better way: there is a hook - \csb{etocaftertitlehook} and we told it to increment the - |visibletoc| counter and to write a line to the |.toc| file, - in a manner analogous to what sectioning commands such as - |chapter|, |section|, or |subsection| do. As \etoc - increments its own private counter even before typesetting - the title of a table of contents, this provides (most of the - time) a better link destination than any counter manipulated - from inside \csa{etocaftertitlehook} (for which the link - would target the area just after the title). So, rather than - including |\refstepcounter{visibletoc}| inside - \csa{etocaftertitlehook}, we just put there - |\stepcounter{visibletoc}| followed by the command - \csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. This \etoc - command \csb{etoctoccontentsline}\marg{level\_name}\marg{name} has the same - effect as: - \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}} - but its usefulness is to circumvent\footnote{using \csa{addtocontents} rather - than \csa{addcontentsline}} the patching for automatic creation - of bookmarks done to \csa{addcontentsline} by the |hyperref| package, - as pdf bookmarks don't make - much sense here (and would elicit a complaint - of |hyperref| that the bookmark level is `unknown').\footnote{% - The package provides a starred variant - \staritb{etoctoccontentsline}, which does allow the creation - of bookmarks and has a third mandatory argument which is the - Level to be used by these bookmarks; depending on the context - the starred as well as the non-starred variants may be - profitably preceded by \csa{phantomsection}.} - - Finally, the preamble of the document did - |\etocsetlevel{visibletoc}{6}|. The level |6| (or anything - with a higher number) is ignored, even if |tocdepth| has - value |10| for example; this is independently of whether \etoc - uses the document class default line styles or its own line - styles, or the ones defined by the user with the - \csa{etocsetstyle} command. So there is no need to worry that - something could go wrong. - - Then, only here we have set |\etocsetlevel{visibletoc}{0}|. And to display - only this kind of entries we assign temporarily to |part| and |chapter| level - |1| (or anything higher than zero) and set |tocdepth| to the value |0|. We - also did \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{, - \}\{\string\etocname\}\{\}} which defines an inline display with the comma - as separator. Finally, as \etoc issues |\par| automatically by default just - before typesetting a table of contents, we used the command \csb{etocinline} - (also known as \cs{etocnopar}) which turns off this behavior. - -Here are the implementation details: - -\begingroup -\begin{verbatim} - < in the preamble > -\newcounter{visibletoc} -\renewcommand{\etocaftertitlehook} - {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}} -\etocsetlevel{visibletoc}{6} -\begin{document} - < document body > -\subsection{Surprising uses of etoc} -\begingroup - \etocinline - \etocsetlevel{part}{1} - % \etocsetlevel{chapter}{1} % (no chapters in scrartcl class) - \etocsetlevel{visibletoc}{0} - \etocsetstyle{visibletoc} - {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{} - \etocsettocstyle{}{} % don't set any title, rules or frame or multicol! - \etocsetnexttocdepth{visibletoc} % display only the `visibletoc' entries from .toc - -Here is the numbered and linked list of all tables of contents which are -displayed within this document: \tableofcontents. -\endgroup -\end{verbatim} - -\endgroup - -After |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, all future TOCs (not in -compatibility mode) will use the -defined style for level |0| (which is normally the level for -chapters). To keep these changes strictly local the simplest -manner is to put everything inside a group. - -The \autoref{subsec:interverting} gives another use of the -shuffling of levels. - - -\section{Arbitrary ``Lists Of...'', \csbhyp{etoctoccontentsline}} -\label{etoctoccontentsline} - -This idea of interverting the levels is very powerful and allows -to let \etoc display lists of arbitrary things contained in the -document. All of that still -using nothing else than the |.toc| file! -Example: imagine a document with dozens of -exercises, perhaps defined as |\newtheorem{exercise}{}[section]|. Let -us explain how to instruct \etoc to display an hyperlinked list -of all these exercises. For this we put in the preamble: -\begin{verbatim} - \newtheorem{exerci}{}[section] - % the exercice number will be recoverable via \etocname: v--here--v - \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}} - \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}} - \etocsetlevel{exercise}{6} -\end{verbatim} -In this way, \csa{etocname} will give the exercise number (but \csa{etocnumber} -will be empty). Had we used instead -\begin{verbatim} - \newcommand*{\exercisetotoc} - {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}} -\end{verbatim} -the exercise number would then have been available via \csa{etocnumber}, and -\csa{etocname} would have been empty. It doesn't matter which one of the two -methods is used. The \etoc command \csa{etoctoccontentsline}|{..}{..}| is -provided as a substitute to \csa{addcon\-tentsline}|{toc}{..}{..}|: this is to -avoid the patching which is done by |hyperref| to \csa{addcontentsline} in its -process of creation of bookmarks. If one wants to authorize |hyperref| to create -bookmarks at a specific level \meta{n}, one can use (here with \meta{n}$=$|2|) -the starred variant \starit{etoctoccontentsline} which has an additional -argument: -\begin{verbatim} -\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}} -\end{verbatim} - -The counter |exerci| is already -incremented by the |exerci| theorem environment, and -provides the correct destination for the link added by package -|hyperref|. The command \csa{exercisetotoc} adds for each exercise a line -to the |.toc| file, corresponding to a fictitious document -unit with name `|exercise|'. A -four-column list, including the sections, can then be -typeset with the following code: -\begin{verbatim} - \etocsetnexttocdepth{2} % sections are at level 1 and will show up -\begingroup - \etocsetlevel{exercise}{2} % but: - \etocsetlevel{chapter}{3} % no chapters - \etocsetlevel{subsection}{3} % no subsections - \etocsetlevel{part}{3} % no parts - \etocsetstyle{exercise}{}{} % \etocname = exercise number - {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par} - {\pagebreak[2]\vskip\baselineskip} - \etocsetstyle{section}{}{} - {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par - \nopagebreak[3]}{} - \etocruledstyle[4]{\Large\bfseries List of the exercises} - \setlength{\columnseprule}{.4pt} - \tableofcontents -\endgroup -\end{verbatim} - - -\section{A TOC with a fancy layout} - -Here is a table of contents where -the sections from a given chapter are to be represented by a number -range (like 18--22 for a given chapter, 42--49 for another one ... -of course to be inserted automatically in the TOC). - -This is not an image inclusion, the TOC is produced from its original -|tex| source inserted in this document after replacement of -|part|, |chapter| or |section| with |dummypart|, |dummychapter| and -|dummysection| (and there is also a dummy page count). We -copied the line styles used in the original and -displayed the table of contents following: -\begin{verbatim} - \etocsetlevel{dummypart} {-1} \etocsetlevel{part} {2} - \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2} - \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2} - \etocsetnexttocdepth{dummysection} -\end{verbatim} -Each chapter displays the numbers of only the first and the last sections it - contains. See the -source file |etoc.dtx| for the details of how this is done. - -Another technique for doing this kind of things is explained in - \autoref{ssec:statistics}. - -\begingroup - - \etocsetlevel{dummypart}{-1} - \etocsetlevel{dummychapter}{0} - \etocsetlevel{dummysection}{1} - \etocsetlevel{part}{2} - \etocsetlevel{chapter}{2} - \etocsetlevel{section}{2} - - \newif\ifextraidone - \newif\ifextraiidone - - \etocsetstyle{dummypart} - {} - {} - {\begin{center}\Large\bfseries PART \etocnumber - \ifextraiidone\\\etocname.\fi\end{center} - \ifextraidone\else - \noindent\hskip.7\linewidth - \hbox to .2\linewidth -% février (ou janvier?) 2013 -% je modifie ici en ajoutant un \hss, pour compenser la plus petite -% taille de txrm. Ok. - {\hss\small\textsc{\bfseries Sections.\hss Page.}}\par\fi - \extraidonetrue - } - {} - - \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}} - \etocsetstyle{dummychapter} - {} - {\par\noindent\etocifnumbered - {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}} - {\hspace*{.15\linewidth}}} - {\hbox to .65\linewidth - {\hspace{1em}\etocname\leaders\mytocleaders\hss}% - \hskip-.1\linewidth - \hbox to .2\linewidth{\hspace{1.5em}...\hss - \etocifnumbered - {\etocpage} - {\ifextraiidone\else\etocpage\fi}}% - \hskip-.2\linewidth - } - {} - - \newbox\forsectionnumbers - \makeatletter -% 21 février 2013: je rajoute \color@begingroup et \color@endgroup - \etocsetstyle{dummysection} - {\setbox\forsectionnumbers=\hbox to .1\linewidth - \bgroup\color@begingroup\hss\etocskipfirstprefix} - {\@gobble} - {\etocnumber---} - {\etocnumber\color@endgroup\egroup - % for reasons I do not quite understand, in some pdf viewers the dots - % do not completely disappear if here \fboxsep0pt is used. - % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) - % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais - % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à - % « effacer ») - \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par - \ifextraiidone\else - \begin{center}\bfseries Concord.\end{center} - \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Lesson.}}\par - \fi\extraiidonetrue - } - \makeatother - - \renewcommand{\etocinnertopsep}{0pt} - - \etocruledstyle[1]{% - \parbox{\linewidth}{% - \centering - \textsc{\bfseries\LARGE\MakeUppercase{Table of Contents}}\\ - \rule{.2\linewidth}{2pt}}% - } - - \etocsetnexttocdepth{dummysection} - - \tableofcontents - -\makeatletter - \def\adddummysection {\stepcounter{dummysection}% - \addtocontents {toc}{\protect\contentsline - {dummysection}{\protect\numberline{\thedummysection}}% - {\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} - - \def\adddummychapter #1{\stepcounter{dummychapter}% - \advance\dummypage2 - \addtocontents {toc}{\protect\contentsline - {dummychapter}{\protect\numberline{\thedummychapter}#1}% - {\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} - - - \def\adddummychapno #1{\advance\dummypage2 - \addtocontents {toc}{\protect\contentsline - {dummychapter}{#1}{\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} - - \def\adddummypart #1{\stepcounter{dummypart}% - \advance\dummypage4 - \addtocontents {toc}{\protect\contentsline - {dummypart}{\protect\numberline{\Roman{dummypart}}#1}% - {\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} -\makeatother - - \newcount\dummypage \dummypage-1 - - \adddummypart {} - - \adddummychapno {Introductory} - - \newcount\tempcount - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<8 - \repeat - - \adddummychapter {Concord of Subject and Verb} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<17 - \repeat - - \adddummychapter {Concord of Substantive and Adjective} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<22 - \repeat - - \adddummychapno {Concord of Relative and its Antecedent} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<25 - \repeat - - \adddummypart {Government} - - \adddummychapter {The Accusative Case} - - \adddummychapno {General uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<30 - \repeat - - \adddummychapno {Particular uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<37 - \repeat - - \adddummychapter {Verbs governing two Accusatives} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<41 - \repeat - - \adddummychapter {The Causal} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<49 - \repeat - - \adddummychapter {The Instrumental Case} - - \adddummychapno {General uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<54 - \repeat - - \adddummychapno {Particular uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<59 - \repeat - - \adddummychapter {The Dative Case} - - \adddummychapno {General uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<65 - \repeat - - \adddummychapno {Particular uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<71 - \repeat - - \adddummychapter {The Ablative Case} - - \adddummychapno {General uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<75 - \repeat - - \adddummychapno {Particular uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<86 - \repeat - - \adddummychapter {The Locative Case} - - \adddummychapno {General uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<92 - \repeat - - \adddummychapno {Particular uses} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<100 - \repeat -\endgroup - -\section{Another compatibility mode} - -As explained in \autoref{ssub:compat}, the commands -\csa{etocstandardlines} and \csa{etocstandarddisplaystyle} tell \etoc to, -essentially, act as an observer. The document class layout for the table of -contents is then perfectly obeyed. There is no way to customize this standard -layout (change fonts, margins, vertical spacings, etc...) from within the -package. For this, use some package dedicated to this task; because \etoc either -is (temporarily perhaps) in compatibility mode with no customization on its part -possible, or the user has specified the layout in \csa{etocsetstyle} commands -(and \csa{etocsettocstyle}) and is (supposedly...) in complete control. - -Well, there is actually an alternative. It is possible to use the -\csa{etocsetstyle} commands to recreate an artificial compatibility mode, in -order to achieve effects like the following, all things being otherwise equal to -the document class defaults: -\begin{enumerate}[noitemsep] -\item get the |hyperref| link to encapsulate only the names, but not the numbers - of each entry of the table of contents, -\item use the document class style for chapters and sections, but modify it only - for subsections, -\item do either of the above only for some portions of the table of contents. -\end{enumerate} - -Here is how to proceed. One puts in the preamble: -\begin{verbatim} -\makeatletter -\newcommand{\MyStandardTOC}{% - \begingroup - \let\savedpartline\l@part - \let\savedchapterline\l@chapter %% remove if article/scrartcl class - \let\savedsectionline\l@section - \let\savedsubsectionline\l@subsection - % and so on if \subsubsection, etc... is used - % - % for the book or article classes: - \etocsetstyle{part}{}{} - {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}% - % for the scrbook or scrartcl classes: - \etocsetstyle{part}{}{} - {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - % identical in book/article/scrbook/scrartcl classes: - \etocsetstyle{chapter}{}{} %%% only for book and scrbook - {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \etocsetstyle{section}{}{} - {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \etocsetstyle{subsection}{}{} - {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - % etc... if further sectioning units are used - % (see the text for what to do with the memoir class) - \etocstandarddisplaystyle % this is for the title, page-marks, etc... - \tableofcontents - \endgroup} -\makeatother -\end{verbatim} -Of course if the document has only one table of contents then there is no need -to put the commands inside a macro, or even inside a group.\footnote{and if -moreover one just wants to keep the same layout as in the default, one may -question why using \etoc... there is \emph{one} good reason: numbers and names -are separately \texttt{hyperref} links, whereas normally there is only one link -holding both the number and the name corresponding to one toc entry.} With these -commands -\etoc will construct a TOC completely identical to what would have been done by -one of the document class: |article|, |book|, |scrartcl|, |scrbook|. \footnote{For the -|memoir| class, one needs a bit more: each of the command \csa{booknumberline}, -\csa{partnumberline} and \csa{chapternumberline} will have to be saved with a -\csa{let}, and, one then specifies: -\centeredline{% -\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{% -\string\savedchapternumberline}} -\hbox to \linewidth{\hfil\hfil \ttfamily - \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} -(and analogously for |part|, respectively |book|).} -The number and the name of each entry are each separately an |hyperref| link, as -is always the case with \etoc, when not in compatibility mode. Replacing -\csa{etocnumber} with \csa{etocthenumber} will give a TOC where the numbers are -not links anymore, but the names still are. Or one may decide to use \csa{etocthename} -and keep an hyperlinked number with -\csa{etocnumber}. - -Here is a subtler example where one only marginally modifies the -sections (adding color to the number and removing the |hyperref| link) and keeps -the subsections as in the default, \emph{except} for those of one specific -section, for which the layout is completely modified: -\MyQuasiStandardTOC{\ref{toc:overview}} -\bigskip -This example only has sections and subsections, and the code used in \csa{MyStandardTOC} was: -\begin{verbatim} -\etocsetstyle{section}{} - {\ifnum\etocthenumber=3 - \etocsetstyle{subsection} - {\par\nopagebreak\begingroup - \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue - \parindent 0pt \normalfont\normalsize\rmfamily\itshape - % \columnsep1em - % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}% - % \begin{multicols}{2}% - \etocskipfirstprefix} - {\allowbreak\,--\,} - {\etocname\ \textup{(\etocnumber)}} - {.\par\endgroup}% - % {.\par\end{multicols}\end{minipage}\par\endgroup}% - \else - \etocsetstyle{subsection} - {}{} - {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}} - {}% - \fi} - {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} - {}% -\end{verbatim} - -Notice the page head-mark added by this standard TOC. Sections and subsections -are printed exactly as in the default (except for the subsections of one -specific user-chosen section and except for the color of the section numbers), -with no need to specify explicitely any length, font or other formatting -instructions. But we had to examine the |scrartcl| sources to determine what to -use for \csa{leftskip} and \csa{rightskip} for our customized section -entries. - - -\section{The TOC as a tree}\label{tocastree} - -Using |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} and the package -|forest|\footnote{\url{http://ctan.org/pkg/forest}} we shall display the table -of contents of this part as a tree. The technique is to -use the \etoc modified command \csa{tableofcontents} not for typesetting, but to -prepare a macro, or rather here a \emph{token list} variable, with all the -instructions to be executed later. \textsc{Leslie Lamport}'s book has no mention -whatsoever of token lists, and \LaTeX{} gives the impression to not really -expect the general user to ever hear about them (or delimited macros); this -whole section and the next are thus for -advanced users. - -Putting the \csa{etocnumber} and \csa{etocname} -commands in \csa{treetok} would be of no use: to which number or name would they -then refer to, in a delayed execution? - -We need to store, not the macro names, but the macro contents. And also we wish -to maintain the correct |hyperref| hyperlinks.\footnote{This manual up to the -version of May 14, 2013 used package |tikz-qtree| but there were problems with -hyperlinks. No such problem arises either when using |forest| or the native -|tikz| syntax for trees (which will be illustrated in the next section).} The -hyperlink information put by \etoc inside \csa{etocname}, etc\dots, is just a -pointer, not storable for later use; but the package provides -\csa{etocthelinkednumber}, \csa{etocthelinkedname}, and \csa{etocthelinkedpage} -whose contents contain the hyperlink in a form which can be stored and later -reused. - -For this |forest| tree we have designed very special \etoc styles for sections -and subsections. They use a token list register called |\treetok| and a -macro |\appendtotok| whose r\^ole is to append to a given token list variable -the contents of a macro given as second argument. All this will happen in -reaction to a |\tableofcontents| command, but \emph{nothing} has yet been -printed in the process.\footnote{There is always a \csa{par}, which here is not -a problem, but can be suppressed if need be via the command \csb{etocinline} or -its synonym \csb{etocnopar}.} This is the later job of a |forest| environment -which will be given the contents of |\treetok|. - -\newtoks\treetok -\newtoks\tmptok - -\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 - #1\expandafter\expandafter\expandafter - {\expandafter\the\expandafter #1#2}} - - -% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f -% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de -% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre -% TikZ natif. - -% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème -% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu -% de sa syntaxe et de celle de TikZ). - -\newcommand*\PrepareSectionNode{% - \tmptok {\centering\bfseries}% - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% -} - -% 7 mars: j'utilise maintenant \etocthelinkedname -\newcommand*{\PrepareSubsectionNode}{% - \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsettocstyle - {\treetok{[{\hyperref[part:overview]{Overview}}}} - {\global\appendtotok\treetok{ ]}} - - -% 11 octobre -% forest ne veut pas @\the\treetok avec un \treetok vide, donc -% il faut lui donner une valeur par défaut. -\treetok{[{run latex again}]} - -% 12 octobre -% pour que varioref fonctionne bien, je dois mettre la \tableofcontents -% au plus près de l'environnement forest - -\begin{figure}[th!]\centering - \etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:forest}\ref{toc:overview} - \hypersetup{hidelinks}% - \bracketset{action character=@} - \begin{forest} - for tree={anchor=center,child anchor=west, - grow'=east,draw,thick, - edge={draw,thick,dashed,color=teal}}, - where={level()==1}{circle,thick,fill=blue!5, - before computing xy={l=3cm}}{}, - where={level()==2}{fill=red!5, - before computing xy={l=6cm}}{}, - % je trouve ce truc pour une position absolue. OK! - rectangle, thick, fill=cyan!5, inner sep=6pt, - @\the\treetok - \end{forest} - \centeredline{A table of contents displayed as a |forest| tree.} -\end{figure} - - -The resulting tree has been put in a \hyperref[toc:forest]{float}, which -appears \vpageref[above]{toc:forest}. Here is the -code used for its production: -\begin{verbatim} -\newtoks\treetok -\newtoks\tmptok - -\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 - #1\expandafter\expandafter\expandafter - {\expandafter\the\expandafter #1#2}} - -\newcommand*\PrepareSectionNode{% - \tmptok {\centering\bfseries}% - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% -} - -\newcommand*{\PrepareSubsectionNode}{% - \tmptok {\raggedright}% - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsettocstyle - {\treetok{[{\hyperref[part:overview]{Overview}}}} - {\global\appendtotok\treetok{ ]}} - -% forest does not like @\the\treetok if \treetok is empty. On first latex -% run, this will be the case because the TOC style defined above will not -% have been executed, as the label {toc:overview} does not refer to a valid -% TOC yet. So we must give a safe default value to \treetok -\treetok{[{run latex again}]} - -\begin{figure}[th!]\centering - \etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:forest}\ref{toc:overview} - \hypersetup{hidelinks}% - \bracketset{action character=@} - \begin{forest} - for tree={anchor=center,child anchor=west, - grow'=east,draw,thick, - edge={draw,thick,dashed,color=teal}}, - where={level()==1}{circle,thick,fill=blue!5, - before computing xy={l=3cm}}{}, - where={level()==2}{fill=red!5, - before computing xy={l=6cm}}{}, - rectangle, thick, fill=cyan!5, inner sep=6pt, - @\the\treetok - \end{forest} -\end{figure} -\end{verbatim} - -Why |\hypersetup{hidelinks}|? as explained in -\autoref{ssec:hidelinks}, I prefer the links in TOCs not to be -colorized, nor framed, so this document inserts a command -%\csa{hypersetup}\texttt{\{hidelinks\}} % ok pour hyphénation -%\csa{hypersetup}|{hidelinks}| % pas ok -|\hypersetup{hidelinks}| % ok maintenant 12 octobre 2013 - in the |.toc| file. But at the time the -|\treetok| contents are unpacked the |\hyperlink| commands -originating in -|\etocthelinkedname|, etc\dots{} will be executed in the normal -environment for links (which, in this document, is to colorize -them). Rather than having \etoc's code try to guess what the current ``style'' -for links is (a concept not really provided by |hyperref| it -seems) and store it in |\etocthelinkedname|, etc\dots, I opted for -the simpler solution to leave it up to the user to recreate -whatever conditions are desired. So here it is necessary to re-issue -|\hypersetup{hidelinks}| in the |figure| environment. - -There are some other examples in this documentation where -|\tableofcontents| is used to prepare material for later -typesetting: -\begin{itemize} -\item printing the statistics at the start of each Part (see - \autoref{ssec:statistics}) is done using save boxes (so the problem of the - appearance of the links does not arise then). -\item the typesetting of the TOC as a table in the pre-|1.08| way (see - \autoref{ssec:tocastableold}); there we also have to issue - |\hypersetup{hidelinks}| after having collected the names, numbers and - page numbers in a token list register. -\item and the two additional tree examples in the next section. -\end{itemize} - - -\section{The TOC as a molecule}\label{ssec:molecule} - -It is also possible to construct a TOC tree obeying the TikZ -syntax for trees: but this is a more complicated task for the -\etoc line styles for reasons related to the way braces are -handled by \TeX{} (they need, when filling up the token list to be -always balanced at each step, else complicated tricks must be -employed.) - -The simplest strategy is to allocate a token list (or use a macro) for each -level used: we may need a \csa{parttok}, a \csa{chaptertok}, a -\csa{sectiontok} and a \csa{subsectiontok}, to help in the task of filling -up the total \csa{treetok}. As we are interested here in the table of -contents of this (or another) document part, only a \csa{sectiontok} and a -\csa{subsectiontok} will be needed. - - -\begin{verbatim} -% \newtoks\treetok % already done earlier -\newtoks\sectiontok \newtoks\subsectiontok \newcommand*{\treenode}{} - -\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} - \edef\tmp{\the#1 child {\the#2}}% - #1\expandafter{\tmp}% -} -\newcommand*{\preparetreenode}{% - \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory) - \edef\treenode{node {\the\tmptok}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendchildtree\treetok\sectiontok} - {\preparetreenode \sectiontok\expandafter{\treenode}} - {\appendchildtree\treetok\sectiontok} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendchildtree\sectiontok\subsectiontok} - {\preparetreenode \subsectiontok\expandafter{\treenode}} - {\appendchildtree\sectiontok\subsectiontok} - -\etocsettocstyle - {\treetok{\node {\hyperref[part:overview]{Overview}}}} - {\global\appendtotok\treetok{ ;}} - -% moved to the inside of the figure environment for correct \pageref{toc:molecule} -% \etocsetnexttocdepth{subsection} -% \tableofcontents \label{toc:molecule} \ref{toc:overview} -\end{verbatim} - -\newtoks\sectiontok -\newtoks\subsectiontok -\newcommand*\treenode {} - -\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} - \edef\tmp{\the#1 child {\the#2}}% - #1\expandafter{\tmp}% -} - -\newcommand*{\preparetreenode}{% - \tmptok\expandafter{\etocthelinkednumber}% - \edef\treenode{node {\the\tmptok}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendchildtree\treetok\sectiontok} - {\preparetreenode - \sectiontok\expandafter{\treenode}} - {\appendchildtree\treetok\sectiontok} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendchildtree\sectiontok\subsectiontok} - {\preparetreenode - \subsectiontok\expandafter{\treenode}} - {\appendchildtree\sectiontok\subsectiontok} - -\etocsettocstyle - {\treetok{\node {\hyperref[part:overview]{Overview}}}} - {\global\appendtotok\treetok{ ;}} - -\begin{figure}[th!]\centering -\etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:molecule}\ref{toc:overview} - \hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=4cm,sibling angle=72}, - level 2/.style={level distance=2cm,sibling angle=60}, - every node/.style={ball color=red,circle,text=SkyBlue}, - edge from parent path={[dashed,very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture} - \centeredline{A table of contents as a ``molecule.''} -\end{figure} - -% Pour que \pageref fonctionne correctement, je dois mettre -% le \tableofcontents dans la figure. - - -The |\tableofcontents| command appears just above the -|tikzpicture| environment in a figure float (for the label of the -table of contents to certainly -refer to the same page as the one where the picture will actually be printed). -We thus get the table of contents as a ``\hyperref[toc:molecule]{molecule}'', -which -appears \vpageref[above]{toc:molecule}. Here is the code actually -producing it: -\begin{verbatim} -\begin{figure}[th!]\centering - \etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:molecule} \ref{toc:overview} - \hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=4cm,sibling angle=72}, - level 2/.style={level distance=2cm,sibling angle=60}, - every node/.style={ball color=red,circle,text=SkyBlue}, - edge from parent path={[dashed,very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture} -\end{figure} -\end{verbatim} - - - -This \hyperref[toc:molecule]{TikZ TOC} is fully hyperlinked, like the -previous -\hyperref[toc:forest]{Forest TOC}. - - -\etocsettocstyle - {\treetok{\node {\autoref{part:globalcmds}}}} - {\global\appendtotok\treetok{ ;}} - -\etocsetnexttocdepth {subsection} -\tableofcontents \ref{toc:globalcmds} - -\noindent -\parbox{4cm}{\hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=2.5cm,sibling angle=60}, - level 2/.style={level distance=1cm,sibling angle=45}, - every node/.style={ball color=red!50,circle,text=black}, - edge from parent path={[very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture}}% -\begin{minipage}{\dimexpr\linewidth-4cm\relax} - On the side, the (fully hyperlinked) table of contents of - \autoref{part:globalcmds}. - \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}% -\begin{verbatim} -\etocsettocstyle - {\treetok{\node {\autoref{part:globalcmds}}}} - {\global\appendtotok\treetok{ ;}} -\etocsetnexttocdepth {subsection} -\tableofcontents \ref{toc:globalcmds} -\noindent -\parbox{4cm}{\hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=2.5cm,sibling angle=60}, - level 2/.style={level distance=1cm,sibling angle=45}, - every node/.style={ball color=red!50,circle,text=black}, - edge from parent path={[very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture}}% -... -\end{verbatim} -\end{minipage} - - -\section{The TOC as a table} -\label{sec:tocastable} - -With release |1.08| it is easier to typeset a TOC as a table. It is -possible to open a tabular in the title part of the TOC (first argument -to \csb{etocsettocstyle}) and then close it after the contents (second -argument to \csb{etocsettocstyle}), and specify in the line styles how -to use the tabulation |&| and tabular end of row |\\|. There are some -conditions and a few caveats: - -\begin{enumerate} -\item it is mandatory to issue \csb{etocglobaldefs} for \etoc's - definitions to have global scope, -\item use \csb{etocthelinkedname}, - \csb{etocthelinkednumber} and \csb{etocthelinkedpage} in preference to - \csb{etocname}, \csb{etocnumber}, \csb{etocpage}: if |hyperref| is - present, this is mandatory, and if it is not present, it does not hurt - and gives the same output, -\item it is impossible to start one of the \meta{start}, \meta{prefix}, - \meta{contents} or \meta{finish} specification with a sole |\hline|, - \emph{i.e.} one not preceded by a |\\| (it is however possible to put - |\\| at the end of \meta{prefix} and the |\hline| at the start of - \meta{contents}). -\item as is explained next, it is recommended to use the |\\| at - the start of the \meta{prefix} or \meta{contents} - specifications to close the \emph{previous} row, not at the end - to close the \emph{current} row; when the TOC is a partial one (a - \csa{localtableofcontents}) this advice becomes (in almost all - situations) mandatory. -\end{enumerate} - -Here is an example of a TOC as a |longtable|, as is possible relatively -simply now with |1.08|. The code follows. - -\begingroup -\etocglobaldefs % necessary for \etocthename etc... to survive & - -% we must use \etocthelinkednumber and not \etocnumber if hyperref is -% present, because \etocnumber does not incorporate a fully expanded -% hyperlink destination specification, hence that part gets lost when a -% & is encountered - -% observe the locations of the \\ -\etocsetstyle{part} - {} - {\\\hline} - {\strut\etocthelinkednumber &\bfseries\etocthelinkedname - &\etocthelinkedpage } - {} - -\etocsetstyle{section} - {} - {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} - {\etocthelinkednumber&\etocthelinkedname &\etocthelinkedpage } - {} - -\etocsetstyle{subsection} - {} - {\\} - {&\makebox[1cm][c]{\etocthelinkednumber}% - \parbox[t]{\dimexpr6cm-\tabcolsep\relax} - {\sloppy\itshape\etocthelinkedname\strut}% - &\itshape\etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}% - \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} - \hline - \multicolumn{3}{|c|}{\Large\bfseries\strut\MakeUppercase{\contentsname}}% - } - {\\\hline\end{longtable}} - -\etocsetnexttocdepth {subsection} - -\tableofcontents -\endgroup - -\begin{verbatim} -\begingroup -\etocglobaldefs % necessary for \etocthename etc... to survive & - -% we must use \etocthelinkednumber and not \etocnumber if hyperref is -% present, because \etocnumber does not incorporate a fully expanded -% hyperlink destination specification, hence that part gets lost when a -% & is encountered - -% observe the locations of the \\ -\etocsetstyle{part} - {} - {\\\hline} - {\strut\etocthelinkednumber &\bfseries\etocthelinkedname - &\etocthelinkedpage } - {} - -\etocsetstyle{section} - {} - {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} - {\etocthelinkednumber&\etocthelinkedname &\etocthelinkedpage } - {} - -\etocsetstyle{subsection} - {} - {\\} - {&\makebox[1cm][c]{\etocthelinkednumber}% - \parbox[t]{\dimexpr6cm-\tabcolsep\relax} - {\sloppy\itshape\etocthelinkedname\strut}% - &\itshape\etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}% - \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} - \hline - \multicolumn{3}{|c|}{\Large\bfseries\strut\strut TABLE OF CONTENTS}% - } - {\\\hline\end{longtable}} - -\etocsetnexttocdepth {subsection} - -\tableofcontents -\endgroup -\end{verbatim} - -Examining the code above the reader will wonder why the |\\| are -always given first in \meta{prefix+contents} and not, as is more -intuitive, rather last. In many cases one may indeed construct -TOC-as-tables with the |\\| located at the end of the style -specifications (but almost never for a \csa{localtableofcontents}). -The problem in the previous example was with the positioning of the -|\hline|'s. - -Due to technical aspects of how \TeX{} constructs alignments any -definition or assignment done after an |\\| starts a new row, and -thus makes |\hline| an illegal token (this shows as a |misplaced -\noalign| error.) Not only does \etoc have to do such definitions -to construct \csb{etocname} etc..., it is furthermore the case that -some packages put things in the |.toc| file and as a result there -is never any guarantee that between two \csa{contentsline} there -will not be such a token like |\relax| which in the contexts of -alignments forces \TeX{} to start a cell and thus makes it -impossible then to insert an |\hline|. - -The safest way is to start with an |\\| each line style -specification. We had a little problem with the fact that we wanted -parts not only to have a rule above them (easy, they do |\\\hline|) -but also below them: after each part there is a section, thus the -section which are first of their kind used the \csb{etociffirst} -conditional branching. The attentive reader will notice one last -subtlety: the title was supposed to be followed not by one, but by -two |\hline|'s. - -To solve this we could have used a one-time macro redefining itself, but -we noticed that the title was followed by the unnumbered Abstract, thus -the \csb{etocifnumbered} switch came to the rescue. - -Last technical note: because we put the |\\| inside the branches, there -was no need to employ the expandable variants \csb{etocxiffirst} and -\csb{etocxifnumbered}. - -For the hardliner's old way of obtaining the exact same result, see -\autoref{ssec:tocastableold}. - -Here is also a much simpler example. It is a local table of -contents. - -\begin{center} -\etocsetstyle{section} - {} - {\etociffirst{\\\hline\hline}{\\\hline}} - {\etocthelinkedname& - \etocthelinkednumber& - \etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline - \multicolumn{1}{|c|}{\bfseries Section}& - \bfseries number& - \bfseries page} - {\\\hline\end{tabular}} - -\etocglobaldefs % MANDATORY !! -\etocsetnexttocdepth{1} - -\tableofcontents\ref{toc:overview} -\end{center} - -\begin{verbatim} -\begin{center} -\etocsetstyle{section} - {} - {\etociffirst{\\\hline\hline}{\\\hline}} - {\etocthelinkedname& - \etocthelinkednumber& - \etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline - \multicolumn{1}{|c|}{\bfseries Section}& - \bfseries number& - \bfseries page} - {\\\hline\end{tabular}} - -\etocglobaldefs % MANDATORY !! -\etocsetnexttocdepth{1} - -\tableofcontents\ref{toc:overview} -\end{center} -\end{verbatim} - -\subsection{The commands \csbhyp{etocglobaldefs} and \csbhyp{etoclocaldefs}} -\label{etocglobaldefs} -\label{etoclocaldefs} - -In \LaTeX{} the meaning of a command defined via |\newcommand\foo{...}| inside -an environment (or group) vanishes from \TeX's memory on exit from this -environment (or group). At times however it is needed to make definitions with -global scope, for this \TeX{} has the primitive prefix |\global|. - -By default \etoc's definitions of \csb{etocname} etc... are local. This causes -problems in certain contexts such as seen here with TOC as tables, but also -with |enumitem| \emph{inline} variants of its standard environments, because -the command |\item| then closes a group. - -After \csb{etocglobaldefs}, \etoc will make its definitions of \csb{etocname} -etc... have global scope. For normal use this is not necessary. It does not hurt -either to activate it systematically. - -To return to the default, use \csb{etoclocaldefs}. Note that both -\csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the -environment or group where they are used. - - -\clearpage -\etocdepthtag.toc {linestyles} - -\part{Commands for the toc line styles} -\label{part:linestyles} - -\thispartstats - -\etocsetstyle{section} -{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered - {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} -% Dec 7, 2012. I hit upon a problem whose origin I found was -% with xcolor, as xcolor modifies \fbox -% (try \section{\fbox{A}} with and without xcolor). The fix -% was to \protect the \fbox used in the |enumitem| label. -% Strangely enough, with |hyperref| active, the problem did -% not show up. Anyhow I now use \fcolorbox rather than \fbox -% and there is no problem anymore. Also I don't have now to -% use \normalcolor which already needed protection. -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsection} -{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} -{\normalfont \item} -{\etocname{} (p.~\etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsubsection} -{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix} -{\allowbreak\,--\,} -{\etocname} -{.\hfil\par\endgroup\pagebreak[3]} - -% 27 janvier 2013 22:30 -% je définis les macros (non protégées) -% \etocthename, \etocthenumber, \etocthepage - -\etocruledstyle[1]{\etocfontminusone\color{green}% - \fboxrule1pt\fboxsep1ex - \framebox[\linewidth] - {\normalcolor\hss Contents of \autoref{part:linestyles}\hss}} - -\localtableofcontents \label{toc:a} - -\section{The \csbhyp{etocsetstyle} command} -\label{etocsetstyle} - -\subsection{The \csbhyp{etocname} and \csbhyp{etocpage} commands} -\label{etocname} -\label{etocpage} - -Let us explain how \etoc was used to produce the table of -contents displayed at the beginning of this second part. -This -is a local table of contents, and we used the command \localtoc. - - -We shall distinguish between the \emph{line styles} and the -\emph{toc display style}. The line styles were (essentially) -obtained in the following manner:% -\footnote{the present document has - {\ttfamily\string\renewcommand\string{% - \string\familydefault\string}\string{\string\sfdefault\string}} - in its preamble, hence \csa{normalfont} switches to the - |sans| typeface; so in the section line-style, I wrote - \csa{rmfamily} instead.} - -\begingroup\small -\begin{verbatim} -\etocsetstyle{section} -{\begin{enumerate}} -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsection} -{\begin{enumerate}} -{\normalfont\item} -{\etocname{} (p.~\etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsubsection} -{\par\nobreak\begingroup\normalfont - \footnotesize\itshape\etocskipfirstprefix} -{\allowbreak\,--\,} -{\etocname} -{.\hfil\par\endgroup\pagebreak[3]} -\end{verbatim} -\endgroup - -These provisory style definitions rely on the automatic -numbering generated by the |enumerate| environments but it is -much better to use the further command \csb{etocnumber} inside -the item label, which gives the real thing. The improved -definitions will thus be explained later. - -With this style, one would have -to be imaginative to design something then for paragraph and -subparagraph entries! perhaps as superscripts? Well, usually -one does not need paragraphs and subparagraphs numbered and -listed in the TOC, so our putative user here chose a design -where no provision is made for them and added the definitive: -\begin{verbatim} -\etocsetstyle{paragraph}{}{}{}{} -\etocsetstyle{subparagraph}{}{}{}{} -\end{verbatim} -This is also the situation with the default package line styles! - -Each \csb{etocsetstyle} command has five mandatory arguments:\\ -\hbox to \linewidth -{\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}% - \marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil} -The initially recognized \meta{levelname}'s are the sectioning -levels of the standard document classes: from \emph{part} (or -\emph{book} which is used by the |memoir| class) down to -\emph{subparagraph}. - -The \meta{start} code is executed when a toc entry of that level is -encountered and the previous one was at a higher level. The -\meta{finish} code is executed when one again encounters a higher -level toc entry. In the mean-time all entries for that level are -typeset by executing first the \meta{prefix} code and then the -\meta{contents} code. - -The (robust) commands \csb{etocname}, \csb{etocnumber} and \csb{etocpage} are -provided for use inside the \meta{prefix} and \meta{contents} parts of the -\csa{etocsetstyle} specification. They represent of course, the name, number, -and page number of the corresponding toc entry. If package |hyperref| is -active in the document and has added hyperlinks to the TOC data, then these -links are kept in the commands \csa{etocname}, \csa{etocnumber} and -\csa{etocpage} (this last one will have a link only if |hyperref| was passed -option \emph{linktoc=all}.) - -\subsection{The \csbhyp{etocskipfirstprefix} and \csbhyp{etociffirst} commands} -\label{etocskipfirstprefix} -\label{etociffirst} -\label{etocxiffirst} - -The chosen |subsubsection| style made use of the command -\csb{etocskipfirstprefix}, which instructs \etoc to \emph{not} use -for the first item the specified \meta{prefix} code.\footnote{With -versions earlier than |1.08| it had to be the very last token in -the \meta{start} code. It may now appear anywhere therein.} - -The command \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (new -with |1.08|) is a more flexible way to customize the \meta{prefix} -(and \meta{contents}) specifications. It executes the \meta{YES -CODE} branch if this is the first unit at that level (inside a -lower level) and the \meta{NO CODE} if not. This is a robust -command which survives to expansion (for example in an |enumitem| label). - -The variant \csb{etocxiffirst} does the same, but is expandable. - - -\subsection{The \csbhyp{etocnumber} command} -\label{etocnumber} - -So far, our specifications would use the numbering generated -by the |enumerate| environments, but of course we generally want -the actual numbers as found in the |.toc| file. This is -available via the \csb{etocnumber} command. To get the labels -in the |enumerate| list to use it we can proceed with the -syntax {\ttfamily label=\char32} from the package |enumitem|: -\begin{verbatim} -\etocsetstyle{section} -{\begin{enumerate}[label=\etocnumber]} -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} -\end{verbatim} -Rather than just \csa{etocnumber} we then used something like -|\fbox{\etocnumber}|. Note that \csa{etocnumber} is a robust -command which explains why it can be used inside the label specification -without needing an added |\protect|. - - -\subsubsection{The \csbhyp{etocifnumbered} switch} -\label{etocifnumbered} -\label{etocxifnumbered} - -The \csa{fbox} would give an unaesthetic result in the case of -an unnumbered section (which ended up in the table of -contents via an \csa{addcontentsline} command).\footnote{as - seen we use \csa{fcolorbox} rather than \csa{fbox}. Due - to some redefinition made by package |xcolor|, had we used - \csa{fbox} (and not used |hyperref|) we would have needed - \csa{protect}\csa{fbox}.} - -The \csb{etocifnumbered}\marg{A}\marg{B} command executes -\meta{A} if the number exists, and \meta{B} if not. So we use -it in the code which was finally chosen for the |section| level: -\begin{verbatim} -\etocsetstyle{section} -{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered - {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsection} -{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} -{\normalfont \item} -{\etocname{} (p.~\etocpage)} -{\end{enumerate}} -\end{verbatim} - -If we had changed only the |section| level, and not the -|subsection| level, an error on compilation would have occurred -because the package style for subsections expects to start `in -vertical mode'. An additional \csa{par} token in the -\meta{contents} part of the |section| level would have fixed -this: |{...(page \etocpage)\par}|. - -The command \csb{etocifnumbered} is robust; \csb{etocxifnumbered} -(new with |1.08|) has the same effect but is expandable. - - -\subsection{The \csbhyp{etocthename}, \csbhyp{etocthenumber}, and -\csbhyp{etocthepage} commands} -\label{etocthename} -\label{etocthenumber} -\label{etocthepage} - -It is sometimes desirable to have access to the name, number and page -number without the hyperref link data: something similar to the starred -variant of the \csa{ref} command, when package |hyperref| is used. For -example one may wish to use the unit or page number in some kind of -numeric context, or change its formatting. This is provided by -\csb{etocthename}, \csb{etocthenumber}, and \csb{etocthepage}. - - -These commands are not protected, so in moving argument -contexts (for example in a label specification) they should be -preceded by |\protect|. - -\subsection{The \csbhyp{etoclink} command} -\label{etoclink} - -The command \csb{etoclink}\marg{linkname} can be used in the line style -specifications in a manner analogous to the argument-less -commands \csa{etocname}, \csa{etocnumber} and \csa{etocpage}. It -creates a link (if such a link was added by |hyperref| to the -|.toc| file entry) whose destination is the corresponding document -unit and whose name is the given argument. -Hence |\etoclink{\etocthename}| is like the original -|\etocname|. -Notice that if |hyperref| was not instructed to put a link in the page number -(via -its option \emph{linktoc=all}) then \etoc's \csa{etocpage} contains no link -either, but |\etoclink{\etocthepage}| does. - - -The command \csa{etoclink} is robust. - -\subsection{The \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber}, -\csbhyp{etocthelinkedpage} and \csbhyp{etocthelink} commands} -\label{etocthelinkedname} -\label{etocthelinkednumber} -\label{etocthelinkedpage} -\label{etocthelink} - - -This is for advanced uses by advanced users. -The \csa{etocthename} macro has -been mentioned before; using it in instructions such as -|\global\let\lastone\etocthename| in an \etoc line style will -define the macro |\lastone| to expand to the last name seen at the -corresponding level. But no facilities was previously available to -do the same with the link data. - -The package now provides \csa{etocthelinkedname} to do the similar -thing, with the link data included. It was used in this -documentation when doing the -\hyperref[tocastree]{examples with trees}. - -Also provided with the similar goal: \csa{etocthelinkednumber}, -\csa{etocthelinkedpage} (which contains a link only if |hyperref| -added one to the page number) and \csa{etocthelink}\marg{linkname} -which allows to make a link with an arbitrary name. - -All these commands are fragile. - -Example of \begingroup - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]} - {\global\let\TmpEtocNumber\etocthelinkednumber - \global\let\TmpEtocName\etocthelinkedname - \global\let\TmpEtocPage\etocthelinkedpage } - {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ - (\emph{p. \TmpEtocPage})} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {a table of contents done as an inline - \texttt{enumitem} environment: }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup - -\begin{verbatim} -Example of \begingroup - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]} - {\global\let\TmpEtocNumber\etocthelinkednumber - \global\let\TmpEtocName\etocthelinkedname - \global\let\TmpEtocPage\etocthelinkedpage } -% (the above needed as \item closes a group in enumitem inline environments) - {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ - (\emph{p. \TmpEtocPage})} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {a table of contents done as an inline - \texttt{enumitem} environment: }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup -\end{verbatim} - -\etoc |1.08| offers a simpler way to the same result: -\begin{verbatim} -Example of -\begingroup\etocglobaldefs % <-- NEW mit etoc 1.08. - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} - {} - {\item [{\bfseries\etocthelinkednumber.}] - \etocthelinkedname\ (\emph{p. \etocthelinkedpage })} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {a table of contents done as an inline - \texttt{enumitem} environment: }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\end{verbatim} -Example of -\begingroup\etocglobaldefs % <-- NEW mit etoc 1.08. - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} - {} - {\item [{\bfseries\etocthelinkednumber.}] - \etocthelinkedname\ (\emph{p. \etocthelinkedpage })} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {a table of contents done as an inline - \texttt{enumitem} environment: }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup - -\section{The \csbhyp{etocsetlevel} command} -\label{etocsetlevel} - -As already explained in \autoref{part:surprising}, one -can inform \etoc of a level to associate to a given sectioning -command with \csa{etocsetlevel}. For example: -\begin{verbatim} -\etocsetlevel{cell}{0} -\etocsetlevel{molecule}{1} -\etocsetlevel{atom}{2} -\etocsetlevel{nucleus}{3} -\end{verbatim} -In compatibility mode, it will be assumed that the macros |\l@cell|, -|\l@molecule|, ..., have been defined somewhere either by the user or a class: -doing only |\etocsetlevel| is not enough for the corresponding level to work -out-of-the-box in compatibility mode. - -However, if no table of contents is typeset in compatibility mode, then all that -matters is that the various line styles have been set. If, for example -|section| is at level |1|, then there is no need to do some -\csa{etocsetstyle}|{molecule}{..}{..}{..}{..}| after -\csa{etocsetlevel}|{molecule}{1}| if -\csa{etocsetstyle}|{section}{..}{..}{..}{..}| has already been done (and it has -been done by the package itself in its definition of its own line styles). - -The accepted levels run from |-2| to |6| inclusive. Anything else is -mapped to |6|, which is a dummy level, never displayed. The package -does: -\begin{verbatim} -\etocsetlevel{book}{-2} -\etocsetlevel{part}{-1} -\etocsetlevel{chapter}{0} -\etocsetlevel{section}{1} -\etocsetlevel{subsection}{2} -\etocsetlevel{subsubsection}{3} -\etocsetlevel{paragraph}{4} -\etocsetlevel{subparagraph}{5} -\end{verbatim} -\etoc own custom styles are activated by \csa{etocdefaultlines}. They -are illustrated by the main table of contents of this -document. - -These level assignments can be modified at anytime: see -\autoref{part:surprising} for various applications of this -technique. As one -further example, let's mention here that the \hyperref[toc:main]{main table of -contents} of this document was typeset following these instructions: -\begin{verbatim} -\etocsettocdepth {subsubsection} % set the initial tocdepth -\etocdefaultlines % use the package default line styles. At this early stage in - % the document they had not yet been modified by \etocsetstyle - % commands, so \etoctoclines could have been used, too. -\etocmarkboth\contentsname -\etocmulticolstyle[1] % one-column display - {\pdfbookmark[1]{Table of contents}{MAINTOC}% create a bookmark in the pdf - \noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} -\begingroup % use a group to limit the scope of the - \etocsetlevel{subsection}{3} % subsection level change. - \etocsetlevel{subsubsection}{4} % anything > tocdepth=3. - \tableofcontents \label{toc:main} -\endgroup -\end{verbatim} -In this way, the subsections used the style originally designed for -subsubsections, the subsubsections were not printed. Without this modification, -the appearance would have been very different: the package line styles were -targeted to be employed in documents with many many sub-sub-sections, in a -two-column layout, giving thus a more compact output that what is achieved by -the default \LaTeX{} table of contents. But here, we have few sub-sub-sections -and it is more interesting to drop them and print in a visually different manner -sections and subsections. - - -\section{Scope of commands added to - the \texorpdfstring{\texttt{.toc}}{.toc} file} - -\begingroup % pour \small et \MacroFont en particulier. -\small - -\subsection{Testing the scope} - -Let us switch to the color red, and also add this command to the |.toc| file: - -\color{red!50} -\addtocontents{toc}{\string\color{red!50}} - -\def\MacroFont{\ttfamily \footnotesize\hyphenchar\font45 } -\begin{verbatim} - \color{red!50} % changing text color - \addtocontents{toc}{\string\color{red!50}} % and also in the .toc file -\end{verbatim} - - -\subsection{This is a (pale) red subsection for illustrative purposes} - -Actually, this title here was printed black, due to the way the |scrartcl| class -works (it would have been red in the |article| class), but we are more -interested in how it looks in the tables of contents: it does appear red in the -\hyperref[toc:main]{main table of contents} at the beginning of -this document, and also in the \hyperref[toc:a]{table of -contents for this part}. Both entries obey as expected the -|\color{red!50}| command inserted in the |.toc| file. - -But let us now close this subsection and start a section. - - -\section{Am I also red?} - -The question is about how it appears in the tables of contents: the answer is -that, yes it is red in the \hyperref[toc:main]{main TOC}, and no -it is not red in the \hyperref[toc:a]{local TOC for this part}. -The reason is that the \meta{finish} code for the subsection level closed a -group, as it used |\end{enumerate}|. - -This illustrates the discussion from \autoref{ssec:limitations}. - -The default package line styles do not contain group opening and closing -instructions: the influence of a command added to the |.toc| file will propagate -until cancelled by another explicit such command inserted in the |.toc| -file. - -\begin{verbatim} - \normalcolor - \addtocontents{toc}{\string\normalcolor} -\end{verbatim} -\endgroup - -\normalcolor -\addtocontents{toc}{\string\normalcolor} - -Back to black. Note that this scope problem arises in real life in a -multi-lingual document, as the |babel| package writes to the |.toc| file the -language changes occurring in the document. - - -\clearpage -\etocdepthtag.toc {globalcmds} - -\part{Commands for the toc display style} -\label{part:globalcmds} - -\thispartstats - -\etocsettocstyle{}{} -\etocstandardlines -\localtableofcontents \label{toc:globalcmds} - - -\section{Specifying the toc display style} - - -The \emph{toc display} style says whether the TOC appears with -multiple columns or just one, whether the title is typeset as -in the |article| or |book| class, or should be centered above -the entries, with rules on its sides, or if the entire TOC -should be put in a frame. For example, to opt for a ruled -heading and single column layout, one issues commands of the -following type: -\begin{verbatim} -\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents) -shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title}) -\end{verbatim} - -\subsection{The command \csbhyp{etocsettocstyle}} -\label{etocsettocstyle} - -This is a command with two mandatory arguments:\\ -\centerline{\csb{etocsettocstyle}\marg{before\_toc}% -\marg{after\_toc}} -The \marg{before\_toc} part is responsible for typesetting the -heading, for example it can be something like -\starit{section}|{\contentsname}|. - -Generally speaking this heading -should leave \TeX{} in ``vertical mode'' when the actual -typesetting of the contents will start: the line styles (either -from the standard classes or the package default line styles) -all expect to get started in `vertical mode'. - -The first argument to \csb{etocsettocstyle} can also contain -instructions to mark the page headings. Or -it could check (book class) to see if two-column mode is on, -and switch to one-column style, and the \meta{after\_toc} part -would then reenact the two-column mode. - -The commands to be described next \csb{etocmulticolstyle}, -\csb{etocruledstyle}, and \csb{etocframedstyle} all call -\csa{etocsettocstyle} as a lower-level routine, to start a -\texttt{multi\-cols} environment in \marg{before\_toc} and close it in -\marg{after\_toc}. - -\subsection{The commands \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol}, and \csbhyp{etoclocalmulticol}} -\label{etocmulticolstyle} -\label{etocmulticol} -\label{etoclocalmulticol} - -This is a command with one optional and one mandatory argument:\\ -\centerline{\csb{etocmulticolstyle}% - \oarg{number\_of\_columns}\marg{heading}} The -\meta{number\_of\_columns} can go from 1 to 10 (it defaults to 2; if its -value is 1, naturally no |multicols| environment is then created). The -\meta{heading} will typically be some `vertical' material like: - \meta{heading} = |\section*|\marg{title} -but one may also have horizontal material like |\fbox{Hello World}| (\etoc -adds automatically a |\par| at the end of this ``heading'' argument to -\csb{etocmulticolstyle}). Here is for example -how the main table of contents of this document was -configured: -\begin{verbatim} -\etocmulticolstyle{\noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} -\end{verbatim} -After \csa{etocmulticolstyle} all future \csa{tableofcontents} will use the -specified style, if it does not get changed in-between. A shortcut for -just one table of contents and -no impact on the styles of later TOCs is:\\ -\centerline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} -And there is also -\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}. - -\subsubsection{The command \csbhyp{etoctocstyle}} -\label{etoctocstyle} - -\centeredline{\csb{etoctocstyle}\oarg{kind}% -\marg{number\_of\_columns}\marg{title}} -\centeredline{= -\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% -|{\kind*{|\itshape title\upshape|}}|} -where |kind| is one of |chapter|, |section|, . . . and defaults -to |chapter| or |section| depending on the document class. - -\paragraph{\texorpdfstring{\csbhyp{etoc\-toc\-style\-with\-marks}}{etoctocstylewithmarks}}% -\leavevmode\unskip{\color{blue}\oarg{kind}\marg{number\_of\_columns}\marg{title}\marg{mark}} -\label{etoctocstylewithmarks} -\label{etoctocstylewithmarksnouc} - -\centeredline -{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% -|{\kind*{|\itshape title \ttfamily\upshape\string\markboth% -|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|} -where |kind| is one of |chapter|, |section|, ... The -actual display of the marks depends on the settings of the -page style. There is variant \csb{etoctocstylewithmarksnouc} -which does not uppercase. - - -\paragraph{Do we really want paragraph entries in the TOC?} - -\paragraph{really?} - -\subsection{The commands \csbhyp{etocruledstyle}, \csbhyp{etocruled} and \csbhyp{etoclocal\-ruled}} -\label{etocruledstyle} -\label{etocruled} -\label{etoclocalruled} - -The general format of \csa{etocruledstyle} is:\\ -\centerline{\csb{etocruledstyle}% -\oarg{number of columns}\marg{title of the toc}} -\noindent -The title is horizontal material (the |LR| mode of -\emph{\LaTeX{}, a document preparation system}): if it -does not fit on one line it should be put in a \csa{parbox} of -a given width. -The green frame for the heading of the table of contents at -the \hyperref[toc:a]{start of the second part of this - document} was obtained with: -\begin{verbatim} -\etocruledstyle[1]{\etocfontminusone\color{green}% - \fboxrule1pt\fboxsep1ex - \framebox[\linewidth] - {\normalcolor\hss Contents of this part\hss}} -\end{verbatim} - - -As a shortcut to set the style with \csb{etocruledstyle} and -then issue a -\csa{tableofcontents}, all inside a group -so that future table of contents will not be -affected, there is:\\ -\centerline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}} -And the local form will be \csb{etoclocalruled}. - -\subsection{The commands \csbhyp{etocframedstyle}, \csbhyp{etocframed}, and \csbhyp{etoclocal\-framed}} -\label{etocframedstyle} -\label{etocframed} -\label{etoclocalframed} - -Same mechanism:\\ -\centerline{\csb{etocframedstyle}% - \oarg{number\_of\_columns}\marg{title}} -and the accompanying shortcut:\\ -\centerline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} The -shortcut is used if one does not want to modify the style of the next -TOCs (the other way is to put the whole thing inside braces or a -|\begingroup...\endgroup|; there is also \csa{etoclocalframed} for a -local table of contents). - -The entire table of contents is framed. The title itself is not framed: -if one wants a frame one should set it up inside the \meta{title} -argument to \csa{etocframedstyle} or \csa{etocframed}. The colors for -the background and for the components (top, left, right, bottom) of the -border are specified via suitable |\renewcommand|'s (see -\autoref{ssec:customdisplay}). - -A |minipage| is used, hence the produced table of contents isn't -compatible with a page break. For allowing page breaks, use of -the commands of -\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}} -or -\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}} -in the arguments of \csb{etocsettocstyle} -is recommended. - -Examples in this document are on pages \pageref{toc:d}, -\pageref{toc:floating}, \pageref{toc:b}, and \pageref{toc:clone}. - - -\subsection{Headings, titles, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}} -\label{etocinnertopsep} -\label{etocoldpar} - -For \csb{etocmulticolstyle} the mandatory \meta{heading} argument can be -either -vertical mode material like |\section*{\emph{Table of Contents}}| or -horizontal mode material like in the simple |\etocmulticolstyle{Hello World}|. - -No explicit |\par| or empty line can be inserted in the mandatory -argument of \csb{etocmulticolstyle}, but \etoc provides \csb{etocoldpar} -as a substitute: it does |\let\etocoldpar\par| before the |multicols| -environment and inserts this |\etocoldpar|\footnote{this command - \csa{etocoldpar} (= working \csa{par} in the argument to - \csa{etocmulticolstyle}) is not related to the switch \csb{etocinline} - whose purpose is to tell \etoc not to do a \csa{par} before the table - of contents.} at the end of the heading, then does a vertical skip of -value \csa{etocinnertopsep}. The command \csb{etocoldpar} can also be -used explicitely if needed in the mandatory argument to -\csa{etocmulticolstyle} (it is not allowed to insert an empty line -in this argument). - -On the other hand the commands \csb{etocruledstyle} and -\csb{etocframedstyle} expect an argument ``in LR mode'' (to use the -terminology from \emph{LaTeX, a document preparation system}). This -means that multiline titles are only possible if enclosing -them inside something like a \csa{parbox}. - - - -An important dimension used by all three of \csb{etocmulticolstyle}, -\csb{etocruledstyle} and \csb{etocframedstyle} is -\csb{etocinnertopsep}. It gives the amount of separation -between the heading and the start of the contents. Its default -value is |2ex| and it is changed with -|\renewcommand*{\etocinnertopsep}|\marg{new\_value}, not with -|\setlength|. - - - -\subsection{The compatibility mode \csbhyp{etocstandarddisplaystyle}} -\label{etocstandarddisplaystyle} - -\etoc will then emulate what the document class would have -done regarding the global display style of the table of -contents, in its absence. All customizing from inside the -class should be obeyed, too. - -\subsection{The command \csbhyp{etoc\-inline}} -\label{etocinline} -\label{etocnopar} -\label{etocdisplay} - -With \csb{etocinline}, or its synonym |\etocnopar|, the -|\tableofcontents| command and its variants do \emph{not} first issue a -|\par| to close the previous paragraph. Hence, the table of contents can -be printed in an inline style; or, if used only for preparing some token -list or macro, it will leave nothing in the token stream on execution. - -Issue \csb{etocdisplay} to return to the default situation that -|\tableofcontents| and variants issue a |\par| to switch to vertical -mode before typesetting the TOC title and contents. - -\section{Starred variants of the \csbhyp{tableofcontents} etc... commands} -\label{tableofcontents*} -\label{localtableofcontents*} -\label{etocbeforetitlehook} -\label{etocaftertitlehook} -\label{etocaftercontentshook} -\label{etocmemoirtoctotocfmt} - -The \toc, \localtoc, \csa{etocmulticol}, and all their cousins and -variants have starred variants (the star must be before the other -arguments). For all but the |memoir| class, they are like the original. -For the |memoir| class, the original prints an entry in the |.toc| file, -as is the usage for the original \toc command in that class, whereas the -starred variants do not, as is the habit in that class. - -As soon as one starts using local table of contents one -discovers that the default |memoir| thing which is to create a -|chapter| entry for each TOC is not convenient. The command -\csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name} will change -the format (\meta{kind} is |chapter|, |section|, |subsection|... and -\meta{name} can be for example \csa{contentsname}.) The initial set-up -is with |chapter| and |\contentsname|. - -The format of the actual heading of the TOC should also be set -appropriately (for example with \csa{etoctocstyle}), to use the -identical division unit as in the first argument to -\csa{etocmemoirtoctotocfmt}. - -A weird situation arises when one has two successive -\csa{localtableofcontents} (obviously this is not a truly real -life situation), just after a \csa{part} for example. The first -one creates (if the default has not been modified as indicated -above) a Chapter heading which is -written to the |.toc|. Then the second one thinks to be local -to this chapter . . . and as a result it displays nothing. The -fix is to define the second one to be a clone of the first -one. - -Independently of the situation with the |memoir| class there is -generally speaking a hook macro called -\csb{etocaftertitlehook} which is inhibited by using the -starred variants of the displaying commands. Except for the -|memoir| class, this hook is initially defined to do nothing. - -There is \csb{etocaftercontentshook}, similarly defined to do -nothing. And \csb{etocbeforetitlehook} is also initially defined to do -nothing. They can be used for some special effects. - -\section{Table of contents for this part} - - -\subsection{Testing the compatibility mode} - -As a third example we now print the local table of contents -for this part. First we will test the compatibility mode.\footnote{the -present document uses the |scrartcl| class, and we check here that -the \etoc compatibility mode does respect the customizing done via the -class commands.} The original was invisibly defined with a label at the -beginning of this \autoref{part:globalcmds}. -\begin{verbatim} -\KOMAoptions{toc=left} -\etocstandarddisplaystyle % necessary for the display to obey toc=left -\etocstandardlines -\tableofcontents \ref{toc:globalcmds} -\end{verbatim} -\KOMAoptions{toc=left} -\etocstandarddisplaystyle -\etocstandardlines -\tableofcontents \ref{toc:globalcmds} - -\subsection{A framed display} - -We now opt for a ``framed'' style, using the package default -line styles and some colors added (it has been put in a float which appears -\vpageref{toc:b}).\footnote{inside the |figure| environment and before the - framed toc, which uses |multicols|, we added \csa{normalcolor} as work-around - to an interaction bug (related to the \csa{color\{red\}} command we added to - the |.toc| file) between |multicols|, |color| and the |figure| - environment. This bug has nothing to do with \etoc.} - -\begin{verbatim} -\etocdefaultlines -\begingroup -\renewcommand{\etoccolumnsep}{2em} -\renewcommand{\etocinnerleftsep}{1.5em} -\renewcommand{\etocinnerrightsep}{1.5em} -% specify a background color for the toc contents -\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} -% set up the top and bottom rules -\renewcommand{\etoctoprule}{\hrule height 1pt} -\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} -\renewcommand{\etocbottomrule}{\hrule height 1pt} -\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} -% set up the left and right rules -\renewcommand{\etocleftrule}{\vrule width 5pt} -\renewcommand{\etocrightrule}{\vrule width 5pt} -\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} -\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} -% use \fcolorbox to set up a colored frame for the title -\fboxrule1pt -\renewcommand{\etocbelowtocskip}{0pt\relax} -\etocframedstyle {\normalsize\rmfamily\itshape - \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering - This is a table of contents \`a la \etoc, but just for - the sections and subsections in this part. As it is put - in a frame, it has to be small enough to fit on - one page. It has the label |toc:b|.}}} -\begin{figure}[ht!] - \centering -\normalcolor % work-around to a bug involving color and multicols (and figure) -\tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure} -\endgroup -\end{verbatim} - - -\etocdefaultlines -\begingroup -\renewcommand{\etoccolumnsep}{2em} -\renewcommand{\etocinnerleftsep}{1.5em} -\renewcommand{\etocinnerrightsep}{1.5em} -% specify a background color for the toc contents -\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} -% set up the top and bottom rules -\renewcommand{\etoctoprule}{\hrule height 1pt} -\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} -\renewcommand{\etocbottomrule}{\hrule height 1pt} -\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} -% set up the left and right rules -\renewcommand{\etocleftrule}{\vrule width 5pt} -\renewcommand{\etocrightrule}{\vrule width 5pt} -\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} -\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} -% use \fcolorbox to set up a colored frame for the title -\fboxrule1pt -\renewcommand{\etocbelowtocskip}{-.5\baselineskip\relax} -\etocframedstyle {\normalsize\rmfamily\itshape - \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering - This is a table of contents \`a la \etoc, but just for - the sections and subsections in this part. As it is put - in a frame, it has to be small enough to fit on - one page. It has the label |toc:b|.}}} -\begin{figure}[ht!] - \centering -\normalcolor % work-around to a bug involving color and multicols (and figure) -\tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure} -\endgroup - -% Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le -% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder -% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle -% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie -% donc un problème d'interaction avec multicol là. à voir. Pas le temps -% maintenant. - -% 2013/10/14 -% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec -% etoc: -% http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure -% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor -% _avant_ le multicols à l'intérieur de figure - -\subsection{A (crazy) inline display} - -Let us finally make some crazy inline display of the table of -contents of this entire document. We will typeset the subsections as -footnotes... This kind of style is suitable for a hyperlinked -document, probably not for print! (although I like it, but my personal taste in -many matters does not seem to be widely shared). - -%%%% Note: 27 april 2014 - -%%%% except for a miraculous situation depending from the quantity of previous -%%%% material this TOC will have links extending accross pagebreaks, which -%%%% dvipdfmx does not know how to handle completely. Apart from that the output -%%%% is ok, thus no need to try seriously to avoid them. - -\begingroup -\newsavebox{\forsubsections} -\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} -\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} -\etocsetstyle{subsection} - {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} - {; } - {\etocname} - {\end{lrbox}\footnote{\unhbox\forsubsections.}} -\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} - {, }{\etocname}{\/\upshape)} -\etocsettocstyle{Here is the inline table of contents. }{.\par} -\tableofcontents \label{toc:crazyinline} -\endgroup - -The code used: -\begin{verbatim} -\begingroup -\newsavebox{\forsubsections} -\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape} - {\bfseries\etocname:~~}{} -\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, } - {\mdseries\etocname}{} -\etocsetstyle{subsection} - {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} - {; }{\etocname}{\end{lrbox}\footnote{\unhbox\forsubsections.}} -\etocsetstyle{subsubsection} - { (\itshape\etocskipfirstprefix}{, }{\etocname}{\/\upshape)} -\etocsettocstyle{Here is the inline table of contents. }{.\par} -\tableofcontents -\endgroup -\end{verbatim} - - -\clearpage -\etocdepthtag.toc {custom} - -\part{Using and customizing \etoc} -\label{part:custom} - -\thispartstats - -\etocdefaultlines -\renewcommand{\etoctoprule}{\hrule height2pt depth0pt} -\renewcommand{\etoctoprulecolorcmd}{\color{red}} - -\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}% - \fbox{\parbox{.8\linewidth}{\centering\normalcolor This is a table of - contents for the sections and - subsections in this part. It carries the label |toc:c|}}} - -\localtableofcontents \label{toc:c} - - -\section{Summary of the main style commands} - -\subsection{Setting up local styles} - -\hbox{\color{green}\fboxrule1pt\fboxsep1em -\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname}}% -\framebox[\linewidth][c] -{\vbox{\hsize\wd0\normalcolor\noindent -\csa{etocsetstyle}\marg{levelname}% - \marg{start}\marg{prefix}\marg{contents}\marg{finish}\\ -\csa{etocname}, \csa{etocnumber}, \csa{etocpage}, -\csa{etocifnumbered}\marg{A}\marg{B}\\ -\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname} -}}} - -\subsection{Setting up toc display styles} - -\medskip -\hbox{\color{green}\fboxrule1pt\fboxsep1em -\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{kind}% -\marg{number\_of\_columns}\marg{title}\marg{mark}}% -\framebox[\linewidth][c] -{\vbox{\hsize\wd0 -\normalcolor\noindent -\csa{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}\\ -\csa{etoctocstyle}\oarg{kind}\marg{number\_of\_columns}\marg{title}\\ -\csa{etoctocstylewithmarks}\oarg{kind}\marg{number\_of\_columns}% -\marg{title}\marg{mark}\\ -\csa{etoctocstylewithmarksnouc}\oarg{kind}\marg{number\_of\_columns}% -\marg{title}\marg{mark}\\ -\csa{etocruledstyle}\oarg{number\_of\_columns}\marg{title}\\ -\csa{etocframedstyle}\oarg{number\_of\_columns}\marg{title}\\ -\csa{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}}} - -\subsection{Displaying tables of contents} - - -\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em - \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, - \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% - \framebox[\linewidth][c] - {\vbox{\hsize\wd0\normalcolor\noindent - \toc\\ - \localtoc\\ - \csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}\\ - \csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}\\ - \csa{etocruled}\oarg{number\_of\_columns}\marg{title}\\ - \csa{etoclocalruled}\oarg{number\_of\_columns}\marg{title}\\ - \csa{etocframed}\oarg{number\_of\_columns}\marg{title}\\ - \csa{etoclocalframed}\oarg{number\_of\_columns}\marg{title}\\ - \hbox{}{\itshape\ttfamily\ \ \ \ and their starred variants} - }}} - -\subsection{Labels and references} - -The commands (starred or not) to actually display the table of contents -can be followed with optional labels or references:\par - -\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em - \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, - \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% - \framebox[\linewidth][c] - {\vbox{\hsize\wd0\normalcolor\noindent - \toc \csa{label}|\{toc:here\}|\\ - \toc \csa{ref}|\{toc:far\}| \\ - \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ - \localtoc \csa{label}|\{toc:here\}|\\ - \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }% - \csa{etocmulticol}{\itshape\ttfamily\ etc . . . } - }}} - - -\medskip The commands for local tables of -contents do \emph{not} react to a \csa{ref} following them. - -When re-displaying another toc, only its contents are transferred: -both the line styles and the toc display style are the ones -currently defined, not the ones from the cloned toc. - - -\section{The package default line styles: \csbhyp{etocdefaultlines}} -\label{etocdefaultlines} - -These line styles were written at an early stage in the -development of the package; although the next section explains how -to customize the font choicess or vertical spaces, etc\dots, used -by these line styles, most other changes would require copying -them from the sources and modify them directly. Admittedly they -have been written at a rather scary low-\TeX{} level, and will not -serve as a very friendly starting point. - -Activating their use is done via \csa{etocdefaultlines}, or -\csa{etoctoclines} if the line styles have not been modified with -\csa{etocsetstyle}. Sections and sub-sections are printed in -essentially the same manner, except that the leading for -sub-sections is a bit smaller (with document classes lacking a -\csa{chapter} command, the sections are printed in bold typeface; -this is the case in the present document). Sub-sub-sections are -printed inline, in one paragraph, with no numbers or page numbers. -This style was designed and tested with documents having lots of -sub-sub-sections, and should be used on a two-column layout: it -provides (only in that situation with many sub-sub-sections) a -more compact presentation than what is achieved by the \LaTeX{} -default.\footnote{and there will never be a Part or Chapter entry - alone at the bottom of a column or page (except if it has no - sub-unit).} On the other hand, used with a one-column layout, -and with few sub-sub-sections, the style is a bit more spread out -vertically than the \LaTeX{} default, sub-sections are not -visually much different from sections (especially for document -classes with a \csa{chapter} command), so the result is less -hierarchical in appearance than in the \LaTeX{} default. - -In this document, for the \hyperref[toc:main]{main table of contents}, we did -|\etocsetlevel{subsection}{3}| hence the sub-sections were printed with the -sub-sub-section inline style. - -Let us, to the contrary, typeset now this main table of contents as if the -document had been done with a class having the \csa{chapter} command: we will -print sections as chapters, and subsections as sections. We use -\csa{etocsetlevel} for that, and also we need to change the font style of -``sections'' (which in truth are our subsections) to use not the bold but the -medium series; we modify the \csa{etocfontone} command for that. Also we use dot -leaders which are less spread out than in the package default. - - -\begin{verbatim} -\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape - \fbox{\parbox{.6\linewidth}{ - \leftskip 0pt plus .5fil - \rightskip 0pt plus -.5fil - \parfillskip 0pt plus 1fil This is the global table of - contents on two columns, using \etoc default line styles, but with - sections as chapters, and subsections as sections. - }}} -\etocdefaultlines -\etocsetnexttocdepth{1} -\begingroup -\etocsetlevel{section}{0} -\etocsetlevel{subsection}{1} -\renewcommand*{\etocfontone}{\normalfont \normalsize} -\renewcommand*{\etoctoclineleaders} - {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} -\sloppy -\tableofcontents -\endgroup -\end{verbatim} - -\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape - \fbox{\parbox{.6\linewidth}{ - \leftskip 0pt plus .5fil - \rightskip 0pt plus -.5fil - \parfillskip 0pt plus 1fil This is the global table of - contents on two columns, using \etoc default line styles, but with - sections as chapters, and subsections as sections. - }}} - -\etocdefaultlines -\etocsetnexttocdepth{1} - -\begingroup -\etocsetlevel{section}{0} -\etocsetlevel{subsection}{1} -\renewcommand*{\etocfontone}{\normalfont \normalsize} -\renewcommand*{\etoctoclineleaders} - {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} -\sloppy -\tableofcontents -\endgroup - -\section{Customizing \etoc} - -\subsection{Customizing the \etoc pre-defined line styles} - -We will simply list the relevant commands as defined in the -package. Customizing them goes through suitable -\csa{renewcommand}s: -\begin{verbatim} -\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries} -\newcommand*\etocfontminusone{\normalfont \large \bfseries} -\newcommand*\etocfontzero{\normalfont \large \bfseries} -\newcommand*\etocfontone{\normalfont \normalsize \bfseries} -\newcommand*\etocfonttwo{\normalfont \normalsize} -\newcommand*\etocfontthree{\normalfont \footnotesize} - -\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex} -\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} -\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} -\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} -\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} -\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} - -\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil} -\newcommand*\etocminustworightmargin{1.5em plus -0.5fil} -\newcommand*\etocminusoneleftmargin{1em} -\newcommand*\etocminusonerightmargin{1em} - -\newcommand*\etocbaselinespreadminustwo{1} -\newcommand*\etocbaselinespreadminusone{1} -\newcommand*\etocbaselinespreadzero{1} -\newcommand*\etocbaselinespreadone{1} -\newcommand*\etocbaselinespreadtwo{1} -\newcommand*\etocbaselinespreadthree{.9} -\newcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} -\newcommand*\etocabbrevpagename{p.~} % initial of "page" -\newcommand*\etocpartname{\partname} % utilisateurs de frenchb: attention - % car donne "partie" sans majuscule. -\newcommand*\etocbookname{Book} % to be modified according to language -\end{verbatim} - -No customizing of the standard line styles is possible from -within \etoc. As already explained, when -\csa{etocstandardlines} has been issued, the package just makes -itself very discrete and acts only at the global level, and -the TOC entries are (hopefully) formatted as would have -happened in the absence of \etoc.\footnote{with the - KOMA-script classes, we noticed that - \csa{etocstandarddisplaystyle} was apparently needed for the - KOMA options |toc=left| to be active at the level of the line entries.} - - -The \csa{etocstandardlines} compatibility mode will work also with -sectioning commands made known to \etoc via \csa{etocsetlevel}, -under the condition of course that these sectioning commands -are accompanied with all the relevant definitions for -typesetting toc entries in the \LaTeX{} default manner -(existence of the macros \csa{l@something} . . .). - -Using the command \csa{etocsetstyle}, be it in the preamble or -in the body of the document, has the secondary effect of -switching off the compatibility mode. - -\subsection{Customizing the toc display styles} -\label{ssec:customdisplay} - -Again we list the relevant macros, what they do should be -legible from their names. Note that \csa{renewcommand}'s and -not \csa{setlength}'s have to be used for what appear to be -lengths, and that color commands are not just color -specifications, they must include \csa{color}, and are canceled -by re-defining them to do \csa{relax}. -\begin{verbatim} -\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex} -\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex} - -\newcommand*\etoccolumnsep{2em} -\newcommand*\etocmulticolsep{0ex} -\newcommand*\etocmulticolpretolerance{-1} -\newcommand*\etocmulticoltolerance{200} -\newcommand*\etocdefaultnbcol{2} -\newcommand*\etocinnertopsep{2ex} -\newcommand*\etoctoprule{\hrule} -\newcommand*\etoctoprulecolorcmd{\relax} - -% for the framed style only: -\newcommand*\etocinnerleftsep{2em} -\newcommand*\etocinnerrightsep{2em} -\newcommand*\etocinnerbottomsep{3.5ex} - -\newcommand*\etocleftrule{\vrule} -\newcommand*\etocrightrule{\vrule} -\newcommand*\etocbottomrule{\hrule} -\newcommand*\etocleftrulecolorcmd{\relax} -\newcommand*\etocrightrulecolorcmd{\relax} -\newcommand*\etocbottomrulecolorcmd{\relax} - -\newcommand*\etocbkgcolorcmd{\relax} - -% hooks -\newcommand\etocframedmphook{\relax} -\end{verbatim} - -The \csa{etocframedmphook} is positioned immediately -after the beginning of a minipage environment where the -contents of the framed TOC are typeset. - -The \csa{...colorcmd} commands are initially set to expand to -\csa{relax} (hence do not require package |color| or |xcolor| -to be loaded). If one has modified a command such as -\csa{etocbkgcolorcmd} to expand to a color command and wants -to reset it to do nothing, one \emph{must} use -|\renewcommand{\etocbkgcolorcmd}{\relax}| and not -\csa{let}\csa{etocbkgcolorcmd}\csa{relax}. - -Regarding the dimensions of the top rule they can be specified -in |ex|'s or |em|'s as in this example: -\centeredline{|\renewcommand{\etoctoprule}{\hrule height 1ex}|} -The package code is done in such a manner -that it is the font size in instance at the end of typesetting -the title argument to \csa{etocruledtoc} or -\csa{etocframedtoc} which will be used for the meaning of the -`1ex'. Of course also the other rule commands can have their -dimensions in font relative units, but their values are -decided on the basis of the font in effect just before the -table of contents. - -The top and bottom rules do not have to be rules and can be -horizontal \emph{leaders} (of a specified height) in the general -\TeX{} sense. However the left and right rules are not -used as (horizontal) leaders but as objects of a given specified -width. Note that \emph{only} the Plain \TeX{} syntax for rules is -accepted here. - -\section{One more example of colored TOC layout} -\label{ssec:tocclone} - -The command \csa{etocframedstyle} puts the title on the top -rule in a centered position. This is not very convenient for -this example so we included the title as part of the -\meta{start} code at section level, to get it \emph{inside} -the frame. - -\begin{verbatim} -\begingroup -\definecolor{subsecnum}{RGB}{13,151,225} -\definecolor{secbackground}{RGB}{0,177,235} -\definecolor{tocbackground}{RGB}{212,237,252} - -\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} -\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} - -\renewcommand{\etocleftrule}{\vrule width 1cm} -\renewcommand{\etocrightrule}{\vrule width .5cm} -\renewcommand{\etocbottomrule}{\hrule height 12pt} -\renewcommand{\etoctoprule}{\hrule height 12pt} - -\renewcommand{\etocinnertopsep}{0pt} -\renewcommand{\etocinnerbottomsep}{0pt} -\renewcommand{\etocinnerleftsep}{0pt} -\renewcommand{\etocinnerrightsep}{0pt} - -\newcommand\shiftedwhiterule[2]{% - \hbox to \linewidth{\color{white}% - \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2} - -\etocsetstyle{subsubsection}{\etocskipfirstprefix} - {\shiftedwhiterule{\leftskip}{6pt}} - {\sffamily\footnotesize - \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent - \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% - \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill - \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par - \nointerlineskip\vskip3pt} - {} - -\etocsetstyle{subsection}{\etocskipfirstprefix} - {\shiftedwhiterule{1.5cm}{6pt}} - {\sffamily\small - \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent - \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% - \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill - \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par - \nointerlineskip\vskip6pt} - {} - -\newcommand{\coloredstuff}[2]{% - \leftskip0pt\rightskip0pt\parskip0pt - \fboxsep0pt % \colorbox uses \fboxsep also when no frame! - \noindent\colorbox{secbackground} - {\parbox{\linewidth}{% - \vskip5pt - {\noindent\color{#1}#2\par}\nointerlineskip - \vskip3pt}}% - \par\nointerlineskip} - -\etocsetstyle{section} -{\coloredstuff{white} - {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of - that other TOC (click me!)}\hfil}} -{\vskip3pt\sffamily\small} -{\coloredstuff{white} - {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip - \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% - \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% - \vskip6pt } -{} - -\etocframedstyle[1]{} -\tableofcontents \label{toc:clone} \ref{toc:globalcmds} -\endgroup -\end{verbatim} - -\begingroup -\definecolor{subsecnum}{RGB}{13,151,225} -\definecolor{secbackground}{RGB}{0,177,235} -\definecolor{tocbackground}{RGB}{212,237,252} - -\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} -\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} - -\renewcommand{\etocleftrule}{\vrule width 1cm} -\renewcommand{\etocrightrule}{\vrule width .5cm} -\renewcommand{\etocbottomrule}{\hrule height 12pt} -\renewcommand{\etoctoprule}{\hrule height 12pt} - -\renewcommand{\etocinnertopsep}{0pt} -\renewcommand{\etocinnerbottomsep}{0pt} -\renewcommand{\etocinnerleftsep}{0pt} -\renewcommand{\etocinnerrightsep}{0pt} - -\newcommand\shiftedwhiterule[2]{% - \hbox to \linewidth{\color{white}% - \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip -\vskip#2} - -\etocsetstyle{subsubsection}{\etocskipfirstprefix} -{\shiftedwhiterule{\leftskip}{6pt}} -{\sffamily\footnotesize -\leftskip2.5cm\hangindent1cm\rightskip1cm\noindent -\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par -\nointerlineskip\vskip3pt} -{} - -\etocsetstyle{subsection}{\etocskipfirstprefix} -{\shiftedwhiterule{1.5cm}{6pt}} -{\sffamily\small -\leftskip1.5cm\hangindent1cm\rightskip1cm\noindent -\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par -\nointerlineskip\vskip6pt} -{} - -\newcommand{\coloredstuff}[2]{% - \leftskip0pt\rightskip0pt\parskip0pt - \fboxsep0pt % \colorbox uses \fboxsep also when no frame! - \noindent\colorbox{secbackground} - {\parbox{\linewidth}{% - \vskip5pt - {\noindent\color{#1}#2\par}\nointerlineskip - \vskip3pt}}% - \par\nointerlineskip} - -% v1.07l on the occasion of traduction into German documentation - % APRIL 26, 2014 Improvement in the section style for better placement of - % page number when the section name is more than one line long. Use of - % \makebox rather than \hbox, to be more LaTeX like. -\etocsetstyle{section} -{\coloredstuff{white} - {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of - that other TOC (click me!)}\hfil}} -{\vskip3pt\sffamily\small} -{\coloredstuff{white} - {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip - \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% - \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% - \vskip6pt } -{} - -\etocframedstyle[1]{} - -\begin{figure}[ht!]\centering - \tableofcontents \label{toc:clone} \ref{toc:globalcmds} -\end{figure} -\endgroup - -The TOC has been put in a \hyperref[toc:clone]{float} which appears -\vpageref{toc:clone}. The coding is a bit involved\footnote{and reveals the - author's preference for the \TeX{} syntax...} as it does not use any -additional package. Also, it was written at some early stage and I have not -revised it since. - -A better solution would be to use some package to set -up a background color possibly extending accross pages, as the -framed style (which we used to get this background -color) can only deal with material short enough to fit on one -page. - -Regarding colors, generally speaking all color commands inside -\etoc are initially defined to do nothing, and the choice to -use or not colors is left to the user. - -\clearpage -\etocdepthtag.toc {tips} - -\part{Tips} -\label{part:tipsandtricks} - -\thispartstats - -%%%% \invisiblelocaltableofcontents \label{toc:tipsandtricks} - -\etocsettocstyle{}{} -\etocstandardlines -\localtableofcontents - -\section{... and tricks} - -\subsection{Hacking framed parboxes} - - -\begin{verbatim} -\etocdefaultlines -\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} -\etocruled{\color{green}\fboxrule2pt\fboxsep1ex - \fbox{\raisebox{-\fontdimen22\textfont2} - {\color{blue}\parbox{.5\linewidth} - {\normalfont This text is perfectly centered - vertically with respect to the - surrounding horizontal rules.}}}} -\ref{toc:globalcmds} -\end{verbatim} - -\etocdefaultlines - -\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} - -\etocruled{\color{green}\fboxrule2pt\fboxsep1ex - \fbox{\raisebox{-\fontdimen22\textfont2} - {\color{blue}\parbox{.5\linewidth} - {\normalfont This text is perfectly centered - vertically with respect to the - surrounding horizontal rules.}}}} - \ref{toc:globalcmds} - - -\subsection{Interverting the levels} -\label{subsec:interverting} - -Let us display and count all subsections occurring in this -document (see \autoref{part:surprising} for other uses of -this technique): -\begin{verbatim} -\etocsetnexttocdepth{2} -\begingroup -\etocsetlevel{part}{3} -\etocsetlevel{section}{3} -\etocsetstyle{subsection} - {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} - {\normalfont\bfseries\item} - {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} - {\end{enumerate}} -\renewcommand{\etoccolumnsep}{2.75em} -\renewcommand{\columnseprule}{1pt} -\etocmulticol[3]{\subsection{All subsections of this document}} -\endgroup -\end{verbatim} - -\etocsetnexttocdepth{2} - -\begingroup -\etocdefaultlines -\etocstandarddisplaystyle -\etocsetlevel{book}{3} -\etocsetlevel{part}{3} -\etocsetlevel{chapter}{3} -\etocsetlevel{section}{3} -\etocsetstyle{subsection}{\small -\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} -{\normalfont\bfseries\item} -{\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} -{\end{enumerate}} - -\renewcommand{\etoccolumnsep}{2.75em} -\renewcommand{\columnseprule}{1pt} - -%%\etocmarkbothnouc{List of all subsections} -%% le mark (\markright) est fait par \subsection - -\etocmulticol[3]{\subsection{All subsections of this document}\label{toc:allsubsections}} - - -\endgroup - -\subsection{Displaying statistics}\label{ssec:statistics} - -Each part of this document starts with a paragraph telling how many -sections and subsections it has. Well, each one of this paragraph is a -table of contents! We designed a macro \csa{thispartstats} to do that. -It uses ``storage'' boxes to keep the information about the first and -last section or subsection. Using boxes is the simplest manner to -encapsulate the |hyperref| link for later use (whether there is one or -none). However, one cannot modify then the font or the color (using the -\TeX{} primitive \csa{setbox} rather than the \LaTeX{} \csa{sbox} would -allow to change the color of the un-boxed saved box). If such a need -arises, one must switch from using boxes to using macros, and store the -|hyperref| data for later use as was done in the code presented in -\autoref{ssec:molecule}. We present also this second method. - -But first, the code of \csa{thispartstats}:\par -\begin{verbatim} -\newsavebox\firstnamei \newsavebox\firstnumberi -\newsavebox\lastnamei \newsavebox\lastnumberi -\newsavebox\firstnameii \newsavebox\firstnumberii -\newsavebox\lastnameii \newsavebox\lastnumberii -\newcounter{mycounti} \newcounter{mycountii} -\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{} -\newcommand*{\oldtocdepth}{} -\newcommand*{\thispartstats}{% - \setcounter{mycounti}{0}% - \setcounter{mycountii}{0}% - \def\thispartstatsauxi{% - \sbox{\firstnamei}{\etocname}% - \sbox{\firstnumberi}{\etocnumber}% - \def\thispartstatsauxi{}}% - \def\thispartstatsauxii{% - \sbox{\firstnameii}{\etocname}% - \sbox{\firstnumberii}{\etocnumber}% - \def\thispartstatsauxii{}}% - \begingroup - \etocsetstyle{subsection} {} {} - {\thispartstatsauxii - \stepcounter{mycountii}% - \sbox{\lastnameii}{\etocname}% - \sbox{\lastnumberii}{\etocnumber}} {}% - \etocsetstyle{section} {} {} - {\thispartstatsauxi - \stepcounter{mycounti}% - \sbox{\lastnamei}{\etocname}% - \sbox{\lastnumberi}{\etocnumber}} - {Here are some statistics for this part: it contains \arabic{mycounti} - section\ifnum\value{mycounti}>1 s\fi{} and \arabic{mycountii} - subsection\ifnum\value{mycountii}>1 s\fi. The name of the first section is - \unhbox\firstnamei{} and the corresponding number is \unhbox\firstnumberi. - The name of the last section is \unhbox\lastnamei{} and its number is - \unhbox\lastnumberi. The name of the first subsection is \unhbox\firstnameii{} - and the corresponding number is \unhbox\firstnumberii. The name of the last - subsection is \unhbox\lastnameii{} and its number is \unhbox\lastnumberii.}% - \etocinline % cancels the automatic \par automatically before the TOC - \etocsettocstyle {}{} - \etocsetnexttocdepth{2}% - \localtableofcontents % to be used at the top level of a Part. - \endgroup -} -\end{verbatim} - -And now, the variant with macros rather than boxes (this variant as it -stands here is for using within a section). -\begin{verbatim} -\makeatletter -\newcommand*\firstsubname {} \newcommand*\lastsubname {} -\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {} -\newcommand*\thisspecialstatsaux{} -\newcommand*{\thisspecialstats}{% - \setcounter{mycounti}{0}% - \def\thisspecialstatsaux{% - \let\firstsubname\etocthelinkedname - \let\firstsubnumber\etocthelinkednumber - \def\thisspecialstatsaux{}} - \begingroup - \etocsetstyle{subsection} {} {} - {\thisspecialstatsaux - \stepcounter{mycounti}% - \let\lastsubname\etocthelinkedname - \let\lastsubnumber\etocthelinkednumber } - {Here are some statistics for this section. It contains \arabic{mycounti} - subsections. The name of its first is \emph{\firstsubname{}} and the - corresponding number is {\firstsubnumber}. The name of the last - subsection is \emph{\lastsubname{}} and its number is {\lastsubnumber}.}% - \etocsettocstyle {}{} - \etocinline - \etocsetnexttocdepth {1}% - \localtableofcontents % to be used within a section - \endgroup -} -\makeatother -\end{verbatim} - -\subsection{Using depth tags} -\label{ssec:tocwithdepthtags} - -We want a TOC which will have a heading for each |\part| (except -the last part with the code source, which we decide not to -include), and will additionally open up \autoref{part:globalcmds} -up to paragraphs. To achieve this we added to this source various -\csb{etocdepthtag.toc} commands, and it remains now to set the -levels for each tag using \csb{etocsettagdepth} (this was used -earlier in this document, in \autoref{sec:secondexample}, within a -group hence it did not affect the other tables of contents). - -However, the package line styles do not display paragraphs, and the -standard line styles of the document class give too much vertical -spacing (in this context) when displaying a Part heading in the TOC. So -we cook up our own, quickly designed line styles, in the style of -\autoref{sec:firstexample} (but with a way to put page numbers on the -right which is more like the method used by \LaTeX2e's -|\@dottedtocline|; and multi-line headings now leave empty the area -underneath the numbers contrarily to the code from -\autoref{sec:firstexample}). And after a few minutes for choosing -lengths (now that this has been done once, it can be recycled easily) we -get: - -\etocsetnexttocdepth {all} -\begingroup -\parindent 0pt -\leftskip 0cm -\rightskip 0.75cm -\parfillskip -\rightskip -\newcommand*{\EndParWithPagenoInMargin} - {\nobreak\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par} -\renewcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} -\newcommand*{\EndParWithPagenoInMarginAndLeaders} - {\nobreak\leaders\etoctoclineleaders\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par } -\etocsetstyle {part} - {} - {\leavevmode\leftskip 1cm\relax} - {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% - \etocname\EndParWithPagenoInMargin\smallskip} - {} -\etocsetstyle {section} - {} - {\leavevmode\leftskip 1.75cm\relax} - {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip 2.75cm\relax } - {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 4cm\relax } - {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {paragraph} - {} - {\leavevmode\leftskip 5.5cm\relax } - {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {surprising} {part} -\etocsettagdepth {linestyles} {part} -\etocsettagdepth {globalcmds} {paragraph} -\etocsettagdepth {custom} {part} -\etocsettagdepth {tips} {part} -\etocsettagdepth {code} {none} -\renewcommand\etoctoprule {\hrule height 3pt\relax } -\renewcommand\etoctoprulecolorcmd {\color{blue}} -\renewcommand\etocaftercontentshook - {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } -\etocruledstyle [1]{\Large\bfseries - \fbox{\makebox[8cm]{A TOC using depth tags}}} -\sloppy -\tableofcontents - -\begin{verbatim} -\etocsetnexttocdepth {all} -\begingroup -\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip -\newcommand*{\EndParWithPagenoInMargin} - {\nobreak\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par} -\renewcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} -\newcommand*{\EndParWithPagenoInMarginAndLeaders} - {\nobreak\leaders\etoctoclineleaders\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par } -\etocsetstyle {part} - {} - {\leavevmode\leftskip 1cm\relax} - {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% - \etocname\EndParWithPagenoInMargin\smallskip} - {} -\etocsetstyle {section} - {} - {\leavevmode\leftskip 1.75cm\relax} - {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip 2.75cm\relax } - {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 4cm\relax } - {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {paragraph} - {} - {\leavevmode\leftskip 5.5cm\relax } - {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {surprising} {part} -\etocsettagdepth {linestyles} {part} -\etocsettagdepth {globalcmds} {paragraph} -\etocsettagdepth {custom} {part} -\etocsettagdepth {tips} {part} -\etocsettagdepth {code} {none} -\renewcommand\etoctoprule {\hrule height 3pt\relax } -\renewcommand\etoctoprulecolorcmd {\color{blue}} -\renewcommand\etocaftercontentshook - {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } -\etocruledstyle [1]{\Large\bfseries - \fbox{\makebox[8cm]{A TOC using depth tags}}} -\sloppy -\tableofcontents -\endgroup -\end{verbatim} -\endgroup - -\subsection{Typesetting the TOC as a table (the old way)} -\label{ssec:tocastableold} - -Due to, among other things, the fact that alignment cells create and close -groups, and that by default definitions of \csb{etocname}, \csb{etocnumber}, -\csb{etocpage} made by \etoc are local, it was not easy to typeset a TOC as -table with \etoc, prior to release |1.08|. - -Not only \csb{etocname} etc... caused a problem, but also the basic -redefinition of \csa{contentsline} was made by \etoc only after the -first argument to \csb{etocsettocstyle} had been executed, hence if this -argument were to open a tabular, the \etoc redefinition of -\csa{contentsline} would be done in the first cell of the first row and -get lost thereafter. - -Thus one had to resort to the technique explained in \autoref{tocastree} -of using the execution of \csa{tableofcontents} as a way to store data -which was then displayed later. - -For the record, here is how the TOC from \autoref{sec:tocastable} was -coded in the old days. We don't have here the problems with the -positioning of |\hline|'s we face with the newer method; on the other -hand we must manipulate token registers which are not familiar to most -\LaTeX{} users (macros could be used, but would be more cumbersome, -except perhaps if using the \eTeX{} \csa{unexpanded}). - -The method here is the most powerful because it filters out of the -|.toc| file only the data we want (the other things are not ignored, -they are executed but hopefully do not create havoc; typically they are -language changing instructions, or updates to certain counters, etc...), -and we are less susceptible to fall potential victims of various -external macros inserted in the |.toc| file by other packages. - -\begin{verbatim} -\newtoks\toctabletok -\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 - #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} - -\newcommand*\PreparePart{% - \toks0 \expandafter{\etocthelinkednumber}% - \toks2 \expandafter{\etocthelinkedname}% - \toks4 \expandafter{\etocthelinkedpage}% - \edef\toctablepiece {\noexpand\hline - \noexpand\strut\the\toks0 &\noexpand\bfseries\the\toks2 - &\the\toks4 \noexpand\\\noexpand\hline}% -} -\newcommand*\PrepareSection{% - \toks0 \expandafter{\etocthelinkednumber}% - \toks2 \expandafter{\etocthelinkedname}% - \toks4 \expandafter{\etocthelinkedpage}% - \edef\toctablepiece {\the\toks0 &\the\toks2 &\the\toks4 \noexpand\\}% -} -% new version for 1.07k, 2014/03/06 -\newcommand*{\PrepareSubsection}{% - \toks0 \expandafter{\etocthelinkednumber}% - \toks2 \expandafter{\expandafter\itshape\etocthelinkedname\strut}% - \toks4 \expandafter{\expandafter\itshape\etocthelinkedpage}% - \edef\toctablepiece{&\noexpand\makebox[1cm][c]{\the\toks0}% - \noexpand\parbox[t]{\dimexpr6cm-\tabcolsep\relax} - {\noexpand\sloppy\the\toks2}% - &\the\toks4 \noexpand\\}% -} - -\begingroup -\etocsetstyle{part}{}{}{\PreparePart \appendtotok\toctabletok\toctablepiece}{} - -\etocsetstyle{section}{}{}{\PrepareSection \appendtotok\toctabletok\toctablepiece}{} - -\etocsetstyle{subsection}{}{}{\PrepareSubsection\appendtotok\toctabletok\toctablepiece}{} - -\etocsettocstyle - {\toctabletok{\hypersetup{hidelinks}% - \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}\hline - \multicolumn{3}{|c|}{\Large\bfseries\strut TABLE OF CONTENTS}% - \\\hline\hline}} - {\global\toctabletok\expandafter{\the\toctabletok\hline\end{longtable}}} -\etocsettocdepth {subsection} -\tableofcontents -\the\toctabletok -\endgroup -\end{verbatim} - -\subsection{Compatibility with other packages} -\label{etocaftertochook} - -The contents of the |.toc| file (if it already exists) are read into memory by -\etoc once, at the time of |\begin{document}|.\footnote{New with |1.07m|. - Earlier versions read the |.toc| file at the time of - \csa{usepackage\{etoc\}}. Thanks to Denis Bitouzé who signaled a Babel - related problem, which turned out to be caused by this.} - -\begin{framed} - One should load \etoc \emph{after} \texttt{babel}. This is in order for - |babel|'s shorthands to be active at the time when \etoc loads the |.toc| - file. -\end{framed} - -The |.toc| file remains available - to other packages for read operations until the location of the first table - of contents at which time a write stream is opened by \etoc and from that - point the file is erased until its contents are again written to the disk by - \LaTeX{} at the end of the compilation. - -\etoc loads the package |multicol|. - -\etoc requires the |.toc| file to use the |\contentsline| macro (possibly -patched by other packages). It is thus incompatible with the |beamer| class. -However, if |beamer| is used in an article mode, i.e., with the article class -in conjunction with the |beamerarticle| package, then \etoc should work. - -\etoc is |hyperref| aware and hopefully |hyperref| compatible: the macros -\csa{etocname}, \csa{etocnumber}, and \csa{etocpage} contain the |hyperref| -links, if present (note that the \emph{linktoc=all} option of |hyperref| tells -it to put a link also in the page number corresponding to a given toc entry). -For example, the tables of contents of the present document are all fully -linked. It doesn't matter whether \etoc or |hyperref| is loaded first. - -Release |1.07k| adds compatibility with package -|tocloft|:\footnote{\url{http://ctan.org/pkg/tocloft}} steps are -taken to prevent the redefinition of |\tableofcontents| done by -|tocloft| at |\begin{document}|. -% -As long as \etoc is left in compatibility mode the customization done by -|tocloft| will be obeyed, for both the line styles and the TOC title. -One may still benefit from the \emph{depth tags} management by \etoc, -from its |\localtableofcontents|, from its |\label+\ref| mechanism. One -may use |\etocsetstyle| to define via \etoc the layout for one TOC and -then use rather |tocloft| for another one, if |\tableofcontents| follows -\csb{etocstandardlines} and \csb{etocstandarddisplaystyle}. In this -compatibility mode |\etocsetlevel{division unit}{6}| will render -invisible the chosen division level, but exchanging levels is otherwise -not possible. - -\begin{framed} - One should load \etoc \emph{after} \texttt{tocloft}. A warning is - issued if otherwise. -\end{framed} - -Release |1.07l| has also improved the compatibility with the |memoir| class: its -|appendix| level has been made known to \etoc. It is at the same level as -|chapter|, thus the chapter line style should possibly do a test for some user -defined boolean whose activation may be added to the |.toc| file at the suitable -location via |\addtocontents{toc}{..}|, if one needs to distinguish the two -kinds of divisions. - -\etoc can not really cohabit with packages modifying the \csa{tableofcontents} - command: some sort of truce can be achieved if \etoc is loaded last, hence is - the winner. - - \begin{framed} - Do not modify the |\tableofcontents| command like this: - \centeredline{|\let\oldtableofcontents\tableofcontents|} - \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents\mystuff}|} - as this will make the |\label/\ref| mechanism impossible. Rather you may do - \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} and there is - also \csb{etocaftercontentshook} which is executed a bit - earlier\footnotemark{} - just before - the - closing part of the toc display style (and thus still within a group.) - \end{framed} -\footnotetext{contrarily to \csa{etocaftertochook}, - \csa{etocaftercontentshook} is not executed if the |tocdepth| did not - allow the printing of the TOC.} - - \etoc used to be incompatible with package - |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; it now cohabits, sort - of, as it deactivates |tocvsec2|'s modification of |\tableofcontents| (done in - the style above) and also cancels its other |toc|-related macros, but - reimplements partially their functionality with \csb{etocsettocdepth.toc}. By - the way, at least two latex runs are necessary for new uses of this command in - a document to have an effect in tables of contents. - -When a \localtoc is inserted by the user in the document, a -line containing an \etoc inner command and an identification -number is added to the |.toc| file. The correct local table of -contents will be displayed only on the next |latex| run. - -It is possible to customize (using package |tocloft| for -example) throughout the document the macros \csa{l@section}, -\csa{l@subsection} ... and the effect will be seen in the next -table of contents typeset by \etoc in compatibility mode. - -It is possible to use simultaneously \etoc and -{\color{niceone}|tableof|}\footnote{\url{http://ctan.org/pkg/tableof}}. Release -|1.08| of \etoc requires at least version |1.4a| of |tableof|. If -\csb{etocglobaldefs} is put in the preamble, this must be after the loading of -package |tableof|. {\color{niceone}|tableof|} command \csa{nexttocwithtags} -should work as expected. - -{\color{niceone}|tableof|} commands \csa{tableof}, \csa{tablenotof}, ... will -typeset the (a priori global) table of contents according to the document -class defaults, obeying the \etoc depth tags; as explained in the |tableof| -documentation they do not typeset a TOC title. They should \emph{not} be used -in case \csb{etocglobaldefs} was issued before, except if its scope has been -terminated since then, or \csb{etoclocaldefs} has cancelled its influence. - -\subsection{\TeX nical matters} - -The \csa{etocname}, \csa{etocnumber}, \csa{etocpage} commands are protected against -premature expansion. They contain suitable |hyperref| links if package -|hyperref| is loaded and active for the TOC. The commands \csa{etoclink} and -\csa{etocifnumbered} are also protected against premature expansion. - -On the other hand \csa{etocthename}, \csa{etocthenumber}, -\csa{etocthepage} do not represent |hyperref| links, and are -\emph{not} protected against expansion. - -The commands such as \csa{etocsetstyle}, \csa{etocsetlevel}, -\csa{etocsettocstyle}, \csa{etocmulticolstyle}, -\csa{etocruledstyle}, \csa{etocframedstyle} obey \LaTeX{}'s -groups. All TOCs are typeset inside groups. - -\subsection{Errors and catastrophes} - - After using \csa{etocsetstyle} for one level, the remaining - uncustomized levels use the \etoc default styles (those - which are activated by \csa{etocdefaultlines}). One has to - make sure that all levels needed for the next table of - contents are mutually compatible: in particular the \etoc - default line styles expect each to be started in ``vertical mode''. - - When using multiple \toc commands in a document, one should beware from adding - typesetting instructions directly in the |.toc| file, as they will be executed - by \etoc for all TOCs: even for a \localtoc it doesn't matter if that - instruction seems to concern material outside of its scope, it will get - executed nevertheless. If absolutely necessary (but this should never be) - these instructions should be done in such a way that they can be activated or - deactivated easily from the document source, as need be. - - As is usual with toc and labels, after each change, one has - to run latex a certain number of times to let the produced - document get its final appearance (at least twice).\par - -\clearpage -\etocdepthtag.toc {code} - -\part{The code} - -\section{Timestamp} - -This is the documentation as of \texttt{\etocdocdate}, printed from the -source file with the time stamp \texttt{\etocdtxtimestamp}. The package -version is \texttt{\etocpkgversion}, of \texttt{\etocpkgdate}. - -% STOP ENGLISH VERSION -^^Afi - -^^Acatcode92 12 - -^^Aifnum^^AForDeutsch=1 - - ^^Acatcode92 0 - - -% START GERMAN (DEUTSCH) VERSION -\bookmark[named=FirstPage,level=1]{Titelseite}% 10 octobre 2013. - -\begin{center} - {\normalfont\Large Das \etoc-Paket}\\ - \textsc{Jean-François Burnol}\par - \footnotesize \ttfamily jfbu (at) free (dot) fr\\ - Paketversion: \etocDEpkgversion\ (\etocDEpkgdate) \let\thefootnote\empty - \footnote{Original Dokumentationzeitstempel: ``\etocDEdocdate''.\par - Übersetzt ins Deutsche von Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel - Büttner, Claudia Dahl, Christian Otto und Christine Römer (FSU Jena). - Hinweise zur Übersetzung an Christine\_Roemer at t-online dot de.}\par -\end{center} -\setcounter{footnote}{0} - -\etocdepthtag.toc {preamble} -%---- -% MAIN TOC -% -\etocsettocdepth {subsubsection} -\etoctoclines -\etocmarkboth\contentsname -\etocmulticolstyle[1] - {\pdfbookmark[1]{Inhaltsverzeichnis}{MAINTOC}% - \noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Inhaltsverzeichnis}} -\begingroup - \etocsetlevel{subsection}{3} - \etocsetlevel{subsubsection}{6} -\tableofcontents \label{toc:main} -\endgroup - -\phantomsection\addcontentsline{toc}{section}{\abstractname} -\begin{abstract} - Das \etoc-Paket gibt dem Nutzer lückenlose Möglichkeiten, die Einträge des - Inhaltsverzeichnis individuell über \emph{Name}, \emph{Nummer}, und - \emph{Seitenzahl} für jede gliedernde Einheit zu setzen. Dieses wird durch die - Definition von \emph{Zeilenstilen (line-styles)} für jede Unterteilungsstufe - des Dokuments realisiert. Das Paket bietet darüber hinaus seinen eigenen - Zeilenstile. Einfachere werden als Beispiele in dieser Dokumentation - angeboten. Die einfachste Nutzung wird durch die Verwendung der - Layout-Hilfsmittel, von Paketen die sich mit Listen-Umgebungen beschäftigen, - gewährt. - - In Hinsicht auf das \emph{globale Inhaltsverzeichnis} bietet \etoc\ - vordefinierte Stile, die auf der Mehrspaltenansicht mit optionalen, - unterstrichenen Titeln oder eingerahmten Inhalten basieren. - - Der \csa{tableofcontents}-Befehl kann beliebig mehrfach benutzt werden. Er hat - die Variante \csa{localtableofcontents}, welche die Inhaltsangabe 'local' zur - aktuellen Dokumenten-Sektion ausgibt. Eine Erweiterung der - \csa{label}/\csa{ref}-Syntax erlaubt die Reproduktion (mit anderem Layout) - einer lokalen Inhaltsangabe, die irgendwo anders im Dokument definiert wurde. - - Mit "`tiefen Tags"' erhält man noch feinere Kontrolle über jede Inhaltsangabe - und darüber, welche unterteilende Einheit angezeigt werden soll, oder nicht. - - Mit \emph{Kompatibilismus} wird die Formatierung der Dokumentklasse geerbt - (die womöglich von anderen Paketen verändert wurde); und die Formatierung, die - von der Dokumentklasse (die womöglich von anderen Paketen verändert wurde) - geerbt wird. - - Die Zuweisung von Ebenen zu den unterteilenden Einheiten kann zu jeder Zeit - geändert werden und \etoc kann dadurch in einer ziemlich generellen Weise - genutzt werden, um selbsterstellte 'Listen von' zu erzeugen. Keine - Zusatzdateien werden zusätzlich zu der Standard-|.toc|-Datei benutzt. -\end{abstract} - -\section{Vorwort} - -Andere populäre Pakete, die sich mit Inhaltsangaben befassen, sind -|tocloft|, |titletoc| und |minitoc|. Warum also ein anderes? -Ich habe \etoc erst für mich selbst entwickelt und -später von den anderen Paketen erfahren. - -Wie es auch in der |tocloft|-Dokumentation erklärt wird, ist das -Standard-\LaTeX -Layout für Inhaltsangaben in den Klassen-Definitionen -begraben. Im Besonderen sind die meisten Längen hart codiert und der -einzige Weg für den Benutzer, sie zu ändern, ist, die Klasse in den -Dokumenten-Ordner zu kopieren und dann die Längen zu ändern. -Die vernünftigere Alternative ist die Benutzung eines auf das Veränderungsziel -gerichteten Pakets, wie |tocloft| oder eine andere flexible Dokumentklasse. - -Freilich, obwohl jetzt hoffentlich nichts mehr hart codiert ist, -muss man noch immer das Paket oder die Klassen-Definitionen durchgehen. -Das bedeutet, dass man sich viele (vermutlich große) Menge an Makros -merken muss, die nur dieser Aufgabe dienen. Und man wird immer -auf die Anpassung eines zu Anfang gegebenen Layouts eingeschränkt sein. - -Der Sinn von \etoc ist ein anderer. Der Nutzer wird sich mit -\emph{Name}, \emph{Nummer} und der \emph{Seitenzahl} beschäftigen. -Diese korresponieren mit jeder Dokumenten-Unterteilung (und können in -einer Zeile der |.toc|-Datei gefunden werden). Sie können, wenn gewünscht, -durch die Befehle \csb{etocname}, \csb{etocnumber} und \csb{etocpage} -abgerufen werden. - -\etoc scheint (mindestens teilweise) mit den Dokument-Klassen |article|, -|book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir| -kompatibel zu sein. Seit der Version |1.07k| ist es möglich \etoc -gleichzeitig mit |tocloft| zu benutzen. - -\section{Lizenz} - -\begingroup\ttfamily\small\hyphenchar\font -1 - \parindent0pt - \obeyspaces\obeylines -\etocLicense\endgroup - - -\clearpage -\etocsettocdepth {subsection} - -\etocdepthtag.toc{overview} - -\part{Überblick}\label{part:overview} - -\thispartstats - -\invisiblelocaltableofcontents \label{toc:overview} - -\section{Muss ich Computerfreak sein, um \etoc benutzen zu können?} - -Nicht wirklich. Der einfachste Weg ist die Benutzung von -|enumerate|-Umgebungen mit den Anpassungsmöglichkeiten von -Paketen wie |enumitem|, \footnote{\url{http://ctan.org/pkg/enumitem}} -um von \etoc aus der |.toc|-Datei die abgerufenen Daten anzuzeigen. -Die Daten bestehen aus \emph{Name} (\csb{etocname}), \emph{Gliederungsnummer} -(\csb{etocnumber}) und \emph{Seitenzahl} (\csb{etocpage}). - -Dieses wird \hyperref[toc:a]{zu Beginn} von \autoref{part:linestyles} -gezeigt. Anspruchsvollere Beispiele würden anspruchsvollere -|enumitem|-Optionen benutzen. Man könnte nun sagen, dass der Nutzer -sich einige Anpassungen merken muss. Und das ist auch so, aber die -Syntax und Optionsbezeichnungen, die es zu behalten gilt, sind -in keinster Weise ähnlich. - -Die Methode wird \hyperref[sec:firstexample]{später} -(\autoref{sec:firstexample}) erklärt. Dafür ist ein wenig Wissen über -|\leftskip|, |\rightskip| usw. notwendig. Und eine Ausarbeitung , deren -Code kann man hier (\autoref{ssec:tocwithdepthtags}) finden, die Nachahmung des -Standardaussehens einer Inhaltsangabe. - -Wie Sie beim Lesen dieser Anleitung noch sehen werden, ist \etoc -ziemlich vielfältig (ganz besonders, weil es erlaubt, die Hierarchie jeder -unterteilenden Einheit des Dokuments zu re-definieren) und man kann damit -überraschende Effekte erreichen: \autoref{part:surprising} handelt davon. Mehr -davon gibt es noch in \autoref{part:tipsandtricks}. - -\begin{framed} -\setcounter{mycounti}{0}% - \etocinline -\etocsetlevel{part}{1} -\etocsetlevel{chapter}{1} -\etocsetlevel{visibletoc}{0} -\etocsetstyle{visibletoc} - {} - {\stepcounter{mycounti}} - {} - {} -\etocsettocstyle{}{} -\etocsetnexttocdepth{0} -\tableofcontents -Ein ganz besonders wichtiger Aspekt von \etoc ist, dass es darauf ausgelegt ist, -viele Inhaltsangaben in dem selben Dokument zu erzeugen, \emph{Mit nur einer - |.toc|-Datei.} Die gegenwärtige Dokumentation enthält \arabic{mycounti} -sichtbare Inhaltsangaben (und ein paar unsichtbare). Sie benutzt dabei nur eine -|.toc|-Datei!\footnotemark{} Darum sollte man zweimal nachdenken, bevor man -manuell extra Befehle zu der |.toc|-Datei hinzufügt (siehe -\autoref{sec:addingtotoc}). -\end{framed} - -\footnotetext{Das Selbstzählen wurde durch eine Inhaltsangabe erreicht, die -in einen gerahmten Paragraphen eingesetzt wurde! \dots Die Technik für diese Art -von Effekt wird später erklärt.} - - -\subsection{Beschränkungen in der Benutzung von Listen-Umgebungen für -Inhalsangaben} -\label{ssec:limitations} - -Es gibt ein paar Einschränkungen für das Nutzen von Listen-Umgebungen -beim Setzen der TOCs. Eine davon liegt dem -Geltungsbereichsbeschränkungen der Umgebungen inne. Die |.toc|-Datei -könnte neben den Informationen zum Stil einige andere Befehle -beinhalten, die Probleme hervorrufen können -(\LaTeX -Umgebungen schaffen Gruppen.). - -Darum machen die eingebauten "`Zeilenstile"' (line styles), wie sie von \etoc -vorgeschlagen werden (die durch die \hyperref[toc:main]{Hauptinhaltsangabe} in -diesem Dokument gezeigt werden) keinen Gebrauch von Umgebungen. Tatsächlich -nutzt in dieser Gebrauchsanweisung nur die \hyperref[toc:a]{Inhaltsangabe} zu -Beginn von \autoref{part:linestyles} und in \autoref{toc:allsubsections} -e\texttt{numerate}-Umgebungen, um Zeilenstile anzugeben. - -\section{Zeilenstile und Stile der Inhaltsangabe (toc display style)} - -Eine Unterscheidung muss zwischen den \emph{Zeilenstilen}, -\emph{z.\,B.} der Art und Weise wie Namen, Kapitelnummern und -Seitenzahlen auf jedem Level angezeigt werden und dem -\emph{Inhaltsangabenstil} (mangels einer besseren Bezeichnung) -gemacht werden. Dieser sagt, wie die Titel gesetzt werden sollen, -ob oder nicht ein Eintrag in die |.toc|-Datei gemacht werden soll, -ob oder nicht der Inhalt mit mehreren Spalten gesetzt werden soll, -usw..., der letztere wird von \csa{etocsettocstyle} (oder einem -höherrangigen Befehl) geregelt. Das erste wird von -\csa{etocsetstyle} initialisiert. - -\subsection{\csbhyp{etocsetstyle} für den Zeilenstil} - -Das ist der Befehl, der \etoc sagt, was es mit \csa{etocname}, \csa{etocnumber}, -und \csa{etocpage} machen soll. Er hat fünf Pflichtargumente: Das erste ist der -Name der unterteilenden Einheit: Im Vorhinein bekannte Namen sind |book|, -|part|, |chapter|, |section|, |subsection|, |subsubsection|, |paragraph|, -|subparagraph| und viele weitere können anhand dem \csb{etocsetlevel}-Befehl -einem (numerischen) Level zugewiesen werden.\footnote{Mit der - \texttt{memoir}-Dokumentklasse kennt \etoc \texttt{Appendix} als - Kapitelüberschrift.} - - -%% Änderungen zur Übersetzung ins Deutsche: -%% jf b has added here forgotten emphasized text for 2)&3) and -%% removed various \newline. -Die vier anderen Argumente von \csb{etocsetstyle} -spezifizieren: -1) \emph{Was zu tun ist, wenn dieses Level zuerst nach einem höheren - auftritt,} -2) \& 3) (Zwei Argumente, ein 'Präfix' und ein 'Inhalt') -\emph{Was zu tun ist, wenn ein neuer Eintrag dieses Typs gefunden wird,} -und 4) \emph{Das letzte Argument ist der Code, der ausgeführt - wird, wenn eine unterteilende Einheit von höherer Wichtigkeit wieder von oben - getroffen wird.} - - -\subsection{\csbhyp{etocsettocstyle} für den Stil der Inhaltsangabe} - -Der \csb{etocsettocstyle}-Befehl erlaubt es festzulegen, -was vor und nach den Zeileneinträgen eines Inhaltsverzeichnis -passieren soll, und im Speziellen wie die Titel ausgegeben -werden sollen. Er hat zwei Argumente. Das erste wird vor -der Inhaltsangabe ausgeführt (typischerweise wird es Inhalte -ausgeben und definiert passende Markierungen für die -Seitenüberschriften). Der Zweite wird nach der Inhaltsangabe -ausgeführt. - -\etoc bietet vier (anpassbare) höhere Inhaltsabgabenstile: -\csb{etocmulticolstyle}, \csb{etoctocstyle}, -\csb{etocruledstyle} und \csb{etocframedstyle}. -Alle nutzen das |multicol|-Paket mit standardmäßig zwei -Spalten (Einspaltenmodus kann durch das optionale Argument - |[1]| erreicht werden). - -Diese Befehle müssen entweder von \toc oder \localtoc gefolgt sein. - -\subsection{Kompatibilismus}\label{ssub:compat} -\label{etoctoclines} -\label{etocstandardlines} - -Vor den "`Zeilenstilen"' und den "`Inhaltsangabenstilen"' besteht -die Möglichkeit in den Kompabilitätsmodus zu wechseln, der die -Standardeinstellungen der Dokumentenklasse nimmt. -\footnote{Für den "`Inhaltsangabenstil"' überprüft \etoc, ob -es die Klassen kennt, wenn nicht, fällt es zur |article|-Klasse -zurück. Es wird auch überprüfen, ob \texttt{tocloft} die -Inhaltsangaben-Datei verändert hat.} -Dieses wir wie folgt aktiviert:\\ -\makebox[5.2cm][l]{\csb{etocstandardlines}} - |% `Zeileneinträge' wie ohne \usepackage{etoc}|\\ -\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}} - |% `Inhaltsstil' wie ohne \usepackage{etoc}| - -Wenn der Befehl \csa{etocsetstyle} \emph{noch nicht in der Präambel benutzt -worden ist}, wird das Paket in |\begin{document}| sitzen (in diesem -Kompatibilismus). Folglich sollte \csa{usepackage\{etoc\}} hoffentlich -nichts am Aussehen eines im Vorhinein vorhandenen Dokuments der Klassen -|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir| -ändern. - -Jede Benutzung von \csa{etocsetstyle} in der \emph(Präambel des Textkörpers) des -Dokuments schaltet den Kompabilitäsmodus für Zeilenstile aus, behält ihn aber -für den Inhaltsabgabenstil. - -Man kann ihn für Zeilenstile anhand von \csb{etocstandardlines} -wieder aktivieren. \csb{etoctoclines} reaktiviert Zeilenstile wie -Sie mit der Hilfe von \csa{etocsetstyle} definiert wurden, wenn deren -Gültigkeitsbereich nicht auf eine Gruppe oder eine Umgebung beschränkt -war. - -Der Befehl \csb{etocdefaultlines} setzt den Zeilenstil darauf zurück, -wie er intern von \etoc in \autoref{etocdefaultlines} beschrieben wurde. - -Sogar wenn \csb{etocsetstyle} benutzt wurde, bleibt der globale Stil -zu Beginn, wie er in der Dokumentenklasse definiert wurde (oder von dem -|tocloft| Paket). Man muss den Befehl \csb{etocsettocstyle} oder seine -Varianten setzen, um diesem Kompatibilitätsmodus auf dem -"`Inhaltsangebenstil"'-Level zu beenden. Er wird reaktiviert, -wenn \csb{etocstandarddisplaystyle} benutzt wird. - -\section{Ein erstes Beispiel} -\label{sec:firstexample} - -Hier sehen sie ein erstes Beispiel zur Beschreibung der Zeilenform. -Wir fügen die Quelldatei direkt nach dem Start von \autoref{part:overview} ein: - -\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|} -% -Dieses erstellt ein Label |toc:overview|, das wir von jeder Stelle im Dokument -benutzen können: -% -\centeredline{|\tableofcontents \ref{toc:overview}|} -% -Und da wir |\invisible...|,\footnote{Das ist eine Abkürzung, um die |tocdepth| - temporär auf |-3| zu setzen. Dieses sagt \etoc, die Inhaltsangabe und die - Überschrift nicht auszugeben.} benutzt haben, existiert die lokale -Inhaltsangabe nur durch seine Klone anderswo im Dokument. - -Anhand von \csb{etocdefaultlines} oder dem Stil der Standard-Dokumentklasse, -anhand von \csb{etocstandardlines}, könnten wir auch die Zeilenform benutzen, -die von \etoc definiert wird. Hier waren wir jedoch ein wenig ehrgeiziger und -wollten unser eigenen Stil anlegen. Die Technik ist einfach: Jede Überschrift -ist an sich ein eigener Paragraph, der sich über mehrere Zeilen erstrecken kann; -es ist für seinen |\leftskip| selbst verantwortlich. - -\begingroup -\parindent 0pt -\parfillskip 0pt -\leftskip 0cm -\rightskip 1cm -\etocsetstyle {section} - {} - {\leavevmode\leftskip 0cm\relax} - {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip .5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 1.5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocruledstyle[1]{\bfseries \Large Mein erstes \etoc: TOC von - \autoref{part:overview} (\nameref{part:overview})} -\tableofcontents \ref {toc:overview} -\endgroup - -Dieses ist ein einfaches Design, das keine Maßnahmen zum Zeilenumbruch -bereitstellt. Diese sollten zwischen Abschnitten und Unterabschnitten, etc. -unterbunden werden, da wir es nur für die Inhaltsangabe von diesem Abschnitt -nutzen. Durch die Abschnitte als höchste Ebene entstand keine Notwendigkeit, -einen Stil für den ganze Teil zu erstellen. (Wir definierten einen -Unterabschnitt-Zeilenstil, aber wie sich herausstellt, gibt es keine -Unterabschnitte in diesem Teil). Die zwei Befehle, die benutzt wurden, -spezifizieren den Zeilen-Stil (\csb{etocsetstyle}) und den globalen -Inhaltsausgabestil (\csb{etocruledstyle}). - -Das |\rightskip| wird von allen angewandt und schafft Platz, wo die Seitenzahlen -gedruckt werden. Einzelheiten dieser Technik werden in dem -\autoref{sec:secondexample} und \autoref{ssec:tocwithdepthtags} benutzt. Hier -wird eine Inhaltsangabe mit Abschnitten und Paragraphen verwendet. Beide -erlauben mehrzeilige Überschriften und nutzen einer Technik, die Seitenzahlen -mit dem richtigen Seitenabstand auszugeben. Dieses wurde von der Funktionsweise -von Makros aus \LaTeX2e's |\@dottedtocline| inspiriert. - -\begin{verbatim} -\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm -\etocsetstyle {section} - {} - {\leavevmode\leftskip 0cm\relax} - {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip .5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 1.5cm\relax } - {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% - \etocname\nobreak\hfill\nobreak - \rlap{\makebox[1cm]{\etocpage}}\par} - {} -\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC von - \autoref{part:overview} (\nameref{part:overview})} -\tableofcontents \ref {toc:overview} -\endgroup -\end{verbatim} - -\section{Ein zweites Beispiel} -\label{sec:secondexample} - -Dieses zweite Beispiel zeigt nur den Inhalt von \autoref{part:linestyles} und -\autoref{part:globalcmds}. Diese Auswahl wird durch die Technik von \emph{depth - tags} realisiert, die in \autoref{etocsettagdepth} und -\autoref{ssec:tocwithdepthtags} beschrieben wird. Dessen Layout ist in etwa wie -das von der \hyperref[toc:main]{Hauptinhaltsangabe}, obwohl die Zeilenstile ganz -anders programmiert sind. - -\begingroup -\newcommand*{\DotsAndPage} -{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% - \hfill\nobreak - \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} - -\etocsetstyle {part} -{\parindent 0pt - \nobreak - \etocskipfirstprefix} -{\pagebreak[3]\bigskip} -{\large\rmfamily\bfseries\scshape\centering - \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} -{} - -\etocsetstyle {section} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \nobreak\medskip - \etocskipfirstprefix} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \pagebreak[1]\smallskip} -{\normalsize\rmfamily\bfseries\scshape - \etocnumber. \etocname\DotsAndPage } -{\parfillskip 0pt plus 1fil\relax } - -\etocsetstyle {subsection} -{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax - \nobreak\smallskip} -{} -{\footnotesize\sffamily\mdseries\itshape - \etocname{} (\etocnumber, p. \etocpage). } -{\par\medskip} - -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {none} -\etocsettagdepth {arbitrarily}{none} -\etocsettagdepth {surprising} {none} -\etocsettagdepth {linestyles} {subsection} -\etocsettagdepth {globalcmds} {subsection} -\etocsettagdepth {custom} {none} -\etocsettagdepth {tips} {none} -\etocsettagdepth {code} {none} - -\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} -\etocsetnexttocdepth {subsection} -\tableofcontents -\endgroup - -Der Code: -\begin{verbatim} -\begingroup -\newcommand*{\DotsAndPage} -{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% - \hfill\nobreak - \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} - -\etocsetstyle {part} -{\parindent 0pt - \nobreak - \etocskipfirstprefix} -{\pagebreak[3]\bigskip} -{\large\rmfamily\bfseries\scshape\centering - \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} -{} - -\etocsetstyle {section} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \nobreak\medskip - \etocskipfirstprefix} -{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip - \pagebreak[1]\smallskip} -{\normalsize\rmfamily\bfseries\scshape - \etocnumber. \etocname\DotsAndPage } -{\parfillskip 0pt plus 1fil\relax } - -\etocsetstyle {subsection} -{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax - \nobreak\smallskip} -{} -{\footnotesize\sffamily\mdseries\itshape - \etocname{} (\etocnumber, p. \etocpage). } -{\par\medskip} - -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {none} -\etocsettagdepth {arbitrarily}{none} -\etocsettagdepth {surprising} {none} -\etocsettagdepth {linestyles} {subsection} -\etocsettagdepth {globalcmds} {subsection} -\etocsettagdepth {custom} {none} -\etocsettagdepth {tips} {none} -\etocsettagdepth {code} {none} - -\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} -\etocsetnexttocdepth {subsection} -\tableofcontents -\endgroup -\end{verbatim} - -\section{Verlinkte Liste der Hauptbefehle} -% 16 octobre - -\begingroup\raggedcolumns -\advance\linewidth18pt -\begin{multicols}{3}\parindent0pt\relax - \csb{etocaftercontentshook}\par - \csb{etocaftertitlehook}\par - \csb{etocaftertochook}\par - \csb{etocbeforetitlehook}\par - \csb{etocdefaultlines}\par - \csb{etocdepthtag.toc}\par - \csb{etocdisplay}\par - \csb{etocframedstyle}\par - \csb{etocframed}\par - \csb{etociffirst}\par - \csb{etocifnumbered}\par - \csb{etocignoredepthtags}\par - \csb{etocignoretoctocdepth}\par - \csb{etocinline}\par - \csb{etoclink}\par - \csb{etoclocalframed}\par - \csb{etoclocalmulticol}\par - \csb{etoclocalruled}\par - \csb{etocmulticolstyle}\par - \csb{etocmulticol}\par - \csb{etocname}\par - \csb{etocnumber}\par - \csb{etocobeydepthtags}\par - \csb{etocobeytoctocdepth}\par - \csb{etocpage}\par - \csb{etocruledstyle}\par - \csb{etocruled}\par - \csb{etocsetlevel}\par - \csb{etocsetnexttocdepth}\par - \csb{etocsetstyle}\par - \csb{etocsettagdepth}\par - \csb{etocsettocdepth.toc}\par - \csb{etocsettocdepth}\par - \csb{etocsettocstyle}\par - \csb{etocskipfirstprefix}\par - \csb{etocstandarddisplaystyle}\par - \csb{etocstandardlines}\par - \csb{etocthelinkedname}\par - \csb{etocthelinkednumber}\par - \csb{etocthelinkedpage}\par - \csb{etocthelink}\par - \csb{etocthename}\par - \csb{etocthenumber}\par - \csb{etocthepage}\par - \csb{etoctoccontentsline}\par - \csb{etoctoclines}\par -%\vspace{5\baselineskip}\hrule height 0pt -\end{multicols} -\endgroup - - -\clearpage -% 15 octobre, je teste les tags -\etocdepthtag.toc {arbitrarily} - -\part{Beliebig viele TOCs und lokale Versionen davon} -% 13 octobre, ceci était une section avant - -\thispartstats - -\etocsettocstyle{}{} -\etocstandardlines -\localtableofcontents - -\section{Beschriften und anderswo wieder benutzen} - -\etoc erlaubt beliebig viele \csa{tableofcontents}-Befehle in -ihrem Dokument. Die Zeilen- und Inhaltsangabenstile können -natürlich dazwischen geändert werden. Außerdem setzt -\csa{localtableofcontents} lokale Inhaltsangaben: \emph{z.\,B.} alle -Abschnitte und Unterabschnitte innerhalb eines bestimmten -Kapitels oder alle Unterabschnitte und tiefer innerhalb eines gegebenen -Unterabschnitt usw. - -\etoc erlaubt das Labeln von Inhaltsangaben, beispielsweise mit -\csa{label\{toc:A\}}, und wird es woanders -\csa{tableofcontents}\csa{ref\{toc:A\}}, wenn gewollt, wieder anzeigen. Das -eigentliche Layout (inklusive Titel) wird lokal bestimmt. Die Zeilen- und -Inhaltsangabenstile (inklusive Titel) sind die aktuellen und der Wert von -|tocdepth| leistet Folge. Hier ein Beispiel: Die Inhaltsangabe von -\autoref{part:custom} ist innerhalb eines \hyperref[toc:d]{float}, der auf -dieser Seite erscheint: \vpageref{toc:d}. -\begin{figure}[ht!] - \centering - \begingroup - \etocstandardlines - \renewcommand{\etocbkgcolorcmd}{\color{green!5}} - \renewcommand{\etocbelowtocskip}{0pt\relax} - \fboxsep1ex - \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone - \hyperref[toc:c]{Ich bin von weit her}}}} - \tableofcontents \label{toc:d} \ref{toc:c} - \endgroup -\end{figure} - -Wir benutzen dies: -\begin{verbatim} -\begin{figure}[ht!] - \centering - \begingroup - \etocstandardlines - \renewcommand{\etocbkgcolorcmd}{\color{green!5}} - \renewcommand{\etocbelowtocskip}{0pt\relax} - \fboxsep1ex - \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone - \hyperref[toc:c]{I am from far away}}}} - \tableofcontents \label{toc:d} \ref{toc:c} - \endgroup -\end{figure} -\end{verbatim} -Wichtig: Man sollte \toc|\ref{toc:d}| nicht woanders benutzen. Um wieder zu -Klonen, muss man eine Refernz zum Original-Label benutzen: \toc|\ref{toc:c}|. - -\section{Eine mächtige Funktionsweise von \etoc: Die Wieder\-zuweisung von -Levels mit von \csbhyp{etocsetlevel}} - -Die intrinsischen Level, die durch \etoc manipuliert wurden, sind numerisch: von -|-2| (welches |book| aus der |memoir|-Klasse entspricht) bis hinab zu |5| -(|subparagraph|). Jedoch kann die Zuweisung eines numerischen Level zu einem -gegebenen Namen zu jeder Zeit mit de Befehl -\csb{etocsetlevel}\marg{level\_name}\marg{number} abgeändert werden. Daraus und -aus der Benutzung des \LaTeX -|tocdepth|-Zählers resultieren mächtige -Anwendungszwecke: \meta{level\_name} muss sich nicht mit dem eigentlichen -Unterteilungsbefehls des Dokuments überschneiden. Außerdem kann \etoc genutzt -werden, um beliebige "`Listen von Dingen"' ohne weitere Hilfsdateien, außer der -|.toc|-Datei, zu erstellen. Dieses wird in \autoref{part:surprising} weiter -erklärt. - -\begin{framed} - Es wird oft gesagt, dass Unterteilungslevel von |\part| in den - Standardklassen, die keinen |\chapter|-Befehl haben, gleich |0| sind, und in - denen mit |\chapter|-Befehl gleich |-1| ist. Das ist auch \emph{richtig}, wenn - man die \emph{automatische Nummerierung}, gesteuert durch den Wert des - |secnumdepth|-Zählers, betrachtet. Aber es ist \emph{falsch}, wenn man den - Effekt des |tocdepth|-Zählers sieht. Setzt man |tocdepth| in der |article| - -Klasse direkt vor |\tableofcontents| auf |-1|, verhindert das \emph{nicht}, - dass Abschnitte in der Inhaltsangabe aufzutauchen. Man muss es dafür auf |-2| - stellen, ganz egal ob in der |article|- oder der |book|-Klasse. - - Die kanonischen Level, grundsätzlich bekannt aus \etoc, sind - von Relevanz für den \textbf{|tocdepth|}-Zähler in den Standardklassen - und werden in der folgenden Tabelle rekapituliert: - - \centeredline{ - \fbox{\begin{tabular}{rc} - (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\ - section&1\\ subsection&2 \\ - subsubsection&3 \\ paragraph&4 \\ subparagraph& 5 - \end{tabular}}} - -\smallskip Mit \etoc kann der Nutzer innerhalb einem gegebenen Unterabschnitt -einfach lokale Inhaltsangaben ausgeben. Darin werden, wenn gewollt, -Unterabschnitte in dem Stil von Abschnitten, Paragraphen in dem Stil von -Unterabschnitten und Unterparagraphen im Stil von Unter-Unterabschnitten -gedruckt. Demnach kann man entscheiden alles auf das Level |6| zu setzen (wird -von \etoc nie angezeigt), außer z.\,B. Paragraphen, die auf Level |1| befördert -werden. So erstellt man eine schöne Inhaltsangabe aller Paragraphen eines -Dokuments. (|tocdepth| mindestens |1|)\footnotemark -\end{framed} - -\footnotetext{Normalerweise sollte man diese Inhaltsangabe der Paragraphen -nicht im Kompabtibilitätsmodus ausgeben. Der würde darauf bestehen, einen -gigantischen Abstand nach rechts einzufügen.} - -\section{Die \csbhyp{etoc\-set\-toc\-depth}- und - \csbhyp{etoc\-set\-next\-toc\-depth}-Befehle} -\label{etocsettocdepth} -\label{etocsetnexttocdepth} - -Der |tocdepth|-Zähler hat keinen Einfluss darauf, was in die |.toc|-Datei -geschrieben wird; dessen Einfluss ist ausschließlich auf das Setzen der -Inhaltsangabe gerichtet. In der Standardklasse ist nur ein |\tableofcontents| -möglich, wobei mit \etoc beliebig viele erlaubt sind. Dadurch könnte man -|tocdepth| immer und immer wieder auf einen passenden Wert ändern (der -entscheidet, wie tief die Abschnitte angezeigt werden sollen) bis die -Inhaltsangabe gesetzt werden muss. - -\etoc bietet \csb {etocsettocdepth}\marg{level} an, wessen verpflichtendes -Argument entweder (von |-3| bis |5|) oder einen Unterteilungstyp wie -|subsection| oder |subsubsection| oder alle anderen, die davor in \etoc mit -\csb{etocsetlevel} (die Schlüsselworte |all| und |none| erkannt werden, -allerdings nicht in Zusammenhang mit der Dokumentenunterteilung) deklariert -wurden. Das tut das passende |\setcounter{tocdepth}{numeric_level}|. - -Wie in dem nächsten Unterabschnitt erklärt wird, wird |tocdepth| von |hyperref| -benutzt. Man muss die folgenden Schritte befolgen, um den Einfluss von -|hyperref|`s Änderungen auf die Lesezeichen zu verhindern. \etoc hat \csb -{etocsetnexttocdepth}\marg{level}. Dessen Einfluss endet direkt nach der -nächsten Inhaltsangabe. Daraus folgt, dass -\texttt{\textbackslash\foreignlanguage{english}{invisibletableofcontents}} -essenziell für |\etocsetnexttocdepth{none}\tableofcontents| ist. - -Der einfachste Weg ist also, eine einfache Instanz des -\csb{etocsettocdepth}-Befehl nach |\begin{document}| und vor dem ersten - |\tableofcontents| mit dem tiefsten Level als Argument zu setzen. -- Dieses - dann lokal zu benutzen, wo es gebraucht wird, anhand von - \csb{etocsetnexttocdepth} vor |\tableofcontents| oder |\localtableofcontents|. - -\subsection{Die hyperref-Option \emph{bookmarksdepth}} -\label{ssec:bookmarksdepth} - -Wenn man den Zähler |tocdepth| verändert, um \toc oder \localtoc -mehrfach zu benutzen, sollte man gewahr sein, dass das Paket -|hyperref| standardmäßig den Wert des \emph{aktuellen} Wertes -der |tocdepth|-Zählers berücksichtigt, um zu entscheiden, ob die |pdf|-Datei -Lesezeichen, korrespondierend mit den Unterteilungsbefehlen, die in der -Quelldatei vorgefunden wurde, anzeigt. Dadurch muss man typischer Weise -den |tocdepth|-Zähler auf seinen vorigen Wert zurücksetzen, nachdem man -ihn temporär für eine gegebene Inhaltsangabe modifiziert hat. - -Alternativ gibt es die \emph{bookmarksdepth=n}-Option des |hyperref|-Pakets. -Dabei ist \emph{n} die gewünschte maximale Lesezeichen-Tiefe. Diese kann -numerisch sein oder der Name eines Levels, das |hyperref| bekannt ist. - -Wir sind in dieser Dokumentation schon an |bookmarksdepth=3| vorbeigekommen. Es -war eine Option von |hyperref|. Auch wenn |tocdepth| nach dem Ausgeben einer -Inhaltsangabe aus Nachlässigkeit auf |1| stehen gelassen wurde, so wurden der -Lesezeichenbaum der |pdf|-Datei nicht verändert. Da \csb{etocsetnexttocdepth} -jetzt zu dem Paket hinzugefügt wurde, ist keine Verwendung mehr für -|bookmarksdepth=3|. - -\section{Der Befehl \csbhyp{etoc\-set\-toc\-dep\-th.toc}} -\label{etocsettocdepth.toc} - -Dieser Befehl \csb{etocsettocdepth.toc} implementiert einige Funktionalitäten -von Paket |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. Ich danke D.B. - meine Aufmerksamkeit auf die Inkompatibilität dieses Pakets mit \etoc - gerichtet zu haben.}. Dieses Paket war inkompatibel mit \etoc. Es kann nun -noch für seine mit |secnumdepth| in Verbindung stehenden Befehle genutzt werden, -alle mit |toc| in Verbindung stehenden Aktivitäten werden jedoch durch \etoc -abgebrochen. - -Das Handeln von \csb{etocsettocdepth.toc} ist grundlegend verschieden zu -\csb{etocsettocdepth}. Anstatt den |tocdepth|-Zähler direkt zu verändern, -fügt es der |.toc|-Datei eine Linie an, die, wenn ausgeführt, in einer -Inhaltsangabe diese Veränderung ausführen wird. - -Der Befehl \csb{etocsettocdepth.toc} akzeptiert, wie -\csb{etocsettocdepth}, Namen und numerische Argumente. -In dem Fall eines Namen als Argument ist der tatsächliche numerische -Wert noch nicht festgelegt, wenn |.toc|-Datei erstellt wird. Es wird -der Wert sein, der aktuell für das benannte Level der Inhaltsangabe -(ohne |\etocignoretoctocdepth| gemacht zu haben) bei -jeder Erstellung einer Inhaltsangabe spezifiziert wird. - -Der |tocdepth|-Zähler wird niemals auf einen Wert gesetzt, der feiner -als der ist, mit dem er zu Beginn der Inhaltsangabe initialisiert wurde. -Also ist das Hinzufügen von \csb{etocsettocdepth.toc} im Dokument ein Weg -die Tiefe einer lokalen Inhaltsangabe einzugrenzen. Zum Beispiel, -um die Einfügung von Unter-unter-Abschnitten oder eines gegebenen -Kapitels zu unterbinden. - - -Dieses -{\fbox{wird in allen Inhaltsangaben ausgeführt.}} - -\subsection{Die Befehle \csbhyp{etocobeytoctocdepth} und \csbhyp{etocignoretoctocdepth}} -\label{etocobeytoctocdepth} -\label{etocignoretoctocdepth} - - -Also wird \csb{etocignoretoctocdepth} gesetzt, um den -\csa{etocsettocdepth.toc}-Mecha\-nismus abzubrechen, wenn -benötigt; und \csb{etocobeytoctocdepth} wird es -reaktivieren. Das Paket führt \csb{etocobeytoctocdepth} zu Beginn aus. - - -\section{Die Befehle \csbhyp{etoc\-depth\-tag.toc} und \csbhyp{etocsettagdepth}} -\label{etocdepthtag.toc} -\label{etocsettagdepth} - -Wie oben erwähnt, wenn das Argument für \csb{etocsettocdepth.toc} kein -numerisches sondern ein Namen-Level ist, wird durch die tatsächliche Nummer bei -der Erstellung der Inhaltsangabe entschieden. Dadurch und anhand der -\emph{Schiebe-Mechanismen von \etoc} kann man einen sehr flexiblen Aufbau -erreichen: Man erklärt mit \csb{etocsetlevel} zuerst ein paar Platzhaltelevel, -z.\,B. |partIII|, und weist ihm das unsichtbare Level |6| zu. Dann, vor dem -dritten |\part| Befehl, fügt man \csb{etocsettocdepth.toc}|{partIII}| ein. An -dem Ort, an dem der Effekt enden soll, setzt man -\csb{etocsettocdepth.toc}|{all}| ein. Es ist nun möglich, jedes Mal, wenn man -eine Inhaltsangabe setzen will, das feinste Level der Einträge aus dem dritten -Teil zu spezifizieren. Man muss z.\,B. nur \csa{etocsetlevel}|{partIII}{1}| -schreiben. Es wird die Abschnitte limitieren (sofern |tocdepth| mindestens auf -diesem Level war, wenn die Inhaltsangabe ausgegeben wurde). - -Die Methode hat ein paar Beschränkungen: -\begin{enumerate*}[label={(\roman*)}] - \item Das zweite Argument von \csb{etocsetlevel} muss numerisch sein; - \item es kann nicht auf |-3| gesetzt werden (was nötig wäre, wenn man ganze - Bücher aus der Inhaltsangabe streichen wöllte in den Klasse |memoir|); - \item es ist ein bisschen getrickst, seit |partIII| kein richtiger unterteilender - Abschnitt ist sondern nur ein \emph{tag}. -\end{enumerate*} - -Version |1.07h| enthält den Befehl \csb{etocdepthtag.toc}, der -es einfacher macht, diese variable lokale Kontrolle des |tocdepth| zu erreichen, -wenn die Inhaltsangabe erstellt wird. - - -Es wird als \csb{etocdepthtag.toc}\marg{tag\_name} genutzt, wo der -\meta{tag\_name} irgendetwas ist, das wird den Tag in die |.toc|-Datei setzen. -Wenn die Inhaltsangabe erstellt wird, initiiert das eine Reihe von Befehlen -\csb{etocsettagdepth}\marg{tag\_name}\marg{level}, wo das \meta{level} entweder -numerisch (von |-3| bis |5|) oder ein Name einer unterteilenden Einheit, die -\etoc bekannt ist, oder |none| oder |all|. Der Effekt von den Tags innerhalb der -|.toc|-Datei ist es, den |tocdepth|-Zählers auf den gewünschten Wert zu setzen -(das kann wie schon erwähnt, nicht feiner sein als der initiale Wert des -|tocdepth|-Zählers). - -Die hinzugefügte Flexibilität wirkt sich insofern aus, dass \csb{etocsetlevel} -nicht mehr mit dieser getricksten Methode, bei der man Level-Tiefen und |none| -und |all| benutzt hat. - -Wie immer, wenn die Tag-Tiefen gesetzt wurden, bleiben sie wirkend, bis sie -wieder definiert werden oder ihr Wirkungsgebiet beendet wird, indem die -umschließende Gruppe geschlossen wird. Für ein Beispiel, siehe hier: -\autoref{ssec:tocwithdepthtags}. - - -\subsection{Die Befehle \csbhyp{etocobeydepthtags} und \csbhyp{etocignoredepthtags}} -\label{etocobeydepthtags} -\label{etocignoredepthtags} - - -Nach \csb{etocignoredepthtags} werden die |.toc|-Tiefentags ignoriert -(nach \csb{etocdepthtag.toc} funktionieren sie jedoch noch). Das Paket -führt zu Beginn \csb{etocobeydepthtags} aus. Dieses befielt \etoc auf die -gefundenen Tags in der |.toc|-Datei zu reagieren. - -\section{Befehle zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei hinzufügen} -\label{sec:addingtotoc} - -Wir beschrieben oben die Befehle \csb{etocsettocdepth.toc} und -\csb{etocdepthtag.toc}, welche beide Befehle in die |.toc|-Datei einfügen. Ein -noch allgemeinerer Weg, um "`action tags"' in die |.toc|-Datei einzufügen, wäre -vorstellbar, allerdings würde auch nur indirekt -|\addtocontents{toc}{\something}| benutzt werden. - -Man sollte vorsichtig sein, wenn man auf diesem Weg Dinge zur |.toc|-Datei -hinzufügt. Zum Beispiel das Einfügen von -\csa{addtocontents}|{toc}{\string\clearpage}| direkt vor einem \csa{part} behebt -den Fehler, dass Teileinträge in Inhaltsangaben vom Rest getrennt am Ende der -Seite auftauchen, kann aber auch Probleme mit mehreren Inhaltsangaben haben: -\csa{clearpage} wird jedes Mal ausgeführt, wenn \etoc über ein \toc oder -\localtoc stolpert. Die schlauere Methode wäre es: -{\csa{addtocontents}|{toc}{\string\myclearpage}|,} den |\let\myclearpage\relax|, -man hätte den Befehl |\let\myclearpage\relax| zu Beginn des Dokuments und wenn -benötigt, benutzt man etwas wie: -\begin{verbatim} -\let\myclearpage\clearpage -\tableofcontents -\let\myclearpage\relax -\end{verbatim} -Die |memoir|-Klasse besitzt den Befehl \csa{settocdepth}, der einen -\csa{changetoc\-depth}-Befehl in die |.toc|-Datei setzt. Dieses -beeinflusst die Schriftsetzung von \etoc bei \emph{allen} Inhaltsangaben mit -möglichen unvorhersehbaren Ergebnissen: Stellen Sie sich vor, irgendwo im Dokument -stünde \csa{settocdepth}|{chapter}|, um die Abschnitte von Unterabschnitten -nicht in der Hauptinhaltsangabe aufzulisten. In diesem Fall würde eine -lokale Inhaltsangabe in einem dieser Kapitel einen Titel ohne jeden Eintrag ausgeben. - -Da die |memoir|-Klasse von Haus aus schon mehrfache \toc erlaubt, tritt dieser -Fehler schon viel früher, und unabhängig von \etoc, auf. Siehe Seite 170 der -|memoir|-Anleitung. - -Für diesen Spezialfall gibt es folgende Befehle: \csb{etocsettocdepth.toc}, -\csb{etocignoretoctocdepth}, \csb{etocobeytoctocdepth} oder deren -Varianten \csb{etocdepthtag.toc} und \csb{etocsettagdepth}. - -Nebenbei, jeder |\setcounter{tocdepth}{n}|-Befehl fügt direkt in die -|.toc|-Datei hinzu. Es scheint so, dass seine Wirkung ist (seit der Version -|1.07g|), beendet den Abschluss jedes Inhaltsverzeichnis zu beenden, automatisch -wird ein |\setcounter{tocdepth}{previous_value}| genommen, mit dem Wert, aktiv -ein Inhaltsverzeichnis zu nehmen. - -\subsection{Die hyperref-Option \emph{hidelinks}}\label{ssec:hidelinks} - -Die farbigen Links (und auch die Kastenlinks) sind einwenig ärgerlich, wenn in -Inhaltsverzeichnissen verwendet, insbesonders, wenn das Dokument \etoc verwendet -und viele von ihnen beinhaltet! Man kann sich wünschen, farbige Links -\emph{ausschließlich} für Inhaltsverzeichnisse! In der Tat, warum sollten in -TOCs diese Dinge gerahmt oder farbig sein müssen, wenn der Benutzer -\emph{bereits erwartet, dass dort Links sind}? - -Ich nehme den folgenden Trick: Entweder in der Präambel zu nehmen -|\AtBeginDocument| oder danach |\begin{document}|, ich habe den Befehl \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|} - - \begin{framed} - Alle TOCs, die von \etoc gesetzt sind, haben ihre Inhalte in eine - Gruppierung getan, (wie in einer Umgebung eingeschlossen). So wird der - Befehl \csa{hypersetup}|{hidelinks}| ausgeführt von \emph{jedem} TOC, aber - sein Effekt wird limitiert zu dem TOC. - \end{framed} - -Experimentell habe ich herausgefunden, dass die Option |hidelinks| oftmals mit -|\hypersetup| eingestellt werden kann (Dies ist nicht bei allen -|hyperref|-Optionen der Fall). - - - -\section{Zwei Beispiele} - -\subsection{Eine wunderschöne Beispielthese} - -Hier ist noch ein relativ einfaches Beispiel für die Verwendung der -Paket-Funktionsweisen. Lassen Sie uns einige Linienstile einrichten. Wir wählen -einen Stil für Abschnitte und Unterabschnitte, welche für die Abschnitte und -Unterabschnitte in einem durchschnittlichen Memoirenumfang geeignet wären. Die -Linienstilspezifikationen haben eine gewisse Redundanz für die Klarheit, und sie -interessieren sich nicht dafür, was bei möglichen Seitenumbrüchen zu tun ist. -Auch sind sie nicht besorgt über die potentielle mehrspaltige Nutzung. - -\begin{verbatim} -\begingroup % wir starten, um eine Gruppe zu behalten -\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm} -\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm} - -\etocsetstyle{section} % wird vorgegeben, ein Kapitel zu sein -{\addvspace{1ex}\parfillskip0pt - \leftskip\tocleftmargin % (bereits im Titel getan) - \rightskip\the\tocrightmargin plus 1fil - \parindent0pt\color{cyan}} % (bereits getan) -{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} -{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\etocsetstyle{subsection} % wird vorgegeben, ein Abschnitt zu sein -{} -{\mdseries\large\addvspace{.5ex}\leavevmode} -{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\def\tmptitle{My Beautiful Thesis} -\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin - \leavevmode\leaders\hrule height 1pt\hfill\ - \huge\textit{\tmptitle}\par}{\bigskip} - -\tableofcontents \ref{toc:overview} -\endgroup -\end{verbatim} - -\begingroup -\newlength{\tocleftmargin} -\setlength{\tocleftmargin}{5cm} -\newlength{\tocrightmargin} -\setlength{\tocrightmargin}{1cm} - -\etocsetstyle{section} -{\addvspace{1ex}\parfillskip0pt - \leftskip\tocleftmargin - \rightskip\the\tocrightmargin plus 1fil - \parindent0pt\color{cyan}} -{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} -{\llap{Kapitel\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\etocsetstyle{subsection} -{} -{\mdseries\large\addvspace{.5ex}\leavevmode} -{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% - \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} -{} - -\def\tmptitle{Meine wunderschöne These} - -\etocsettocstyle{\color{cyan}\parindent0pt\leftskip\tocleftmargin - \leavevmode\leaders\hrule height 1pt\hfill\ - \huge\textit{\tmptitle}\par}{\bigskip} - -\tableofcontents \ref{toc:overview} -% And again, for the fun of it: -% \def\tmptitle{My Very Beautiful Thesis} -% \tableofcontents \ref{toc:c} -\endgroup - - -\subsection{Ein TOC mit einer Hintergrundfarbe}\label{ssec:again} - -Lassen Sie uns nun einige anspruchsvollere Linienstile versuchen. Das Display -wird den Paket-Befehl \csa{etocframedstyle} verwenden, damit das erzeugte -Inhaltsverzeichnis auf eine einzige Seite passt. Wir wickeln es in eine -\hyperref[toc:floating]{Figur-Umgebung}, damit es auf der aktuellen Seite -angezeigt wird. \vpageref{toc:floating}. - - -\begin{figure}[htbp!]\centering -\colorlet{subsecnum}{black} -\colorlet{secbackground}{green!30} -\colorlet{tocbackground}{red!20!green!20} - -\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} -\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} - -\renewcommand{\etocleftrule}{\vrule width 3cm} -\renewcommand{\etocrightrule}{\vrule width 1cm} -\renewcommand{\etocbottomrule}{\hrule height 12pt} -\renewcommand{\etoctoprule}{\hrule height 12pt} - -\renewcommand{\etocinnertopsep}{0pt} -\renewcommand{\etocinnerbottomsep}{0pt} -\renewcommand{\etocinnerleftsep}{0pt} -\renewcommand{\etocinnerrightsep}{0pt} - -\newcommand\shiftedwhiterule[2]{% - \hbox to \linewidth{\color{white}% - \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip -\vskip#2} - -\etocsetstyle{subsubsection}{\etocskipfirstprefix} -{\shiftedwhiterule{\leftskip}{6pt}} -{\sffamily\footnotesize -\leftskip2.3cm\hangindent1cm\rightskip.5cm\noindent -\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par -\nointerlineskip\vskip3pt} -{} - -\etocsetstyle{subsection}{\etocskipfirstprefix} -{\shiftedwhiterule{1.5cm}{6pt}} -{\sffamily\small -\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent -\hbox to .75cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par -\nointerlineskip\vskip3pt} -{} - -\newcommand{\coloredstuff}[2]{% - \leftskip0pt\rightskip0pt\parskip0pt - \fboxsep0pt % \colorbox uses \fboxsep also when no frame! - \noindent\colorbox{secbackground} - {\parbox{\linewidth}{% - \vskip5pt - {\noindent\color{#1}#2\par}\nointerlineskip - \vskip3pt}}% - \par\nointerlineskip} - -% v1.07l on the occasion of traduction into German documentation: - % APRIL 26, 2014 Improvement in the section style for better placement of - % page number when the section name is more than one line long. Use of - % \makebox rather than \hbox, to be more LaTeX like. -\etocsetstyle{section} -{\coloredstuff{blue} - {\hfil \bfseries\large Inhalt von Teil Eins\hfil}} -{\vskip3pt\sffamily\small} -{\coloredstuff{blue} - {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip - \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}% - \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}% - \vskip6pt } -{} - - -% attention car \ref{toc:floating} fera référence au compteur de -% toutes les toc, pas visibletoc. - -\etocframedstyle[1]{} -\tableofcontents \label{toc:floating} \ref{toc:overview} -\vspace{-\baselineskip} -\centeredline{|\tableofcontents \ref{toc:overview}| -(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})} -\end{figure} - -Das aktuelle Design ist nicht in \etoc vorgefertigt; sondern nutzt seine -`eingerahmten' Stile mit einer Hintergrundfarbe. Die Rahmengrenzen wurden so -gesetzt, dass die gleiche Farbe, wie die Hintergrundfarbe, für die gesamte Sache -dienen soll. Dieses Design (mit anderen Farben) wird auch für -\hyperref[toc:clone]{dieses andere Inhaltsverzeichnis} benutzt, und der Leser -bezieht sich auf seine \hyperref[ssec:tocclone]{Unterabschnitte}, welche für die -Kodierung vorgesehen sind. - - -\clearpage -\etocdepthtag.toc {surprising} -\part{Überraschende Anwendungen von \etoc} -\label{part:surprising} - -\thispartstats %% (pas de sous-section) - -% in dtx of release 1.07h there was here a \thisspecialstats, but it -% originated from the period when this \part was only a \section. So its -% effect was not the intended one, basically it had the same effect as this: -\etocstandardlines -\etocsettocstyle {}{} -\localtableofcontents - -\section{Das TOC für TOCs} - -\begingroup % \endgroup just after the \tableofcontents command -\etocinline -\etocsetlevel{part}{1} -\etocsetlevel{visibletoc}{0} -\etocsetstyle{visibletoc} - {\etocskipfirstprefix} - {, } - {{\color{niceone}\etocname}} - {} -\etocsettocstyle{}{} -\etocsetnexttocdepth{visibletoc} - -Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die -in diesem Dokument dargestellt sind \footnote{Die Inhaltsverzeichnisse können - "`Schwimmer"' setzen, um die Reihenfolge zu ändern: die Zahlen werden in der - Reihenfolge der Inhaltsverzeichnisse in dem Dokument aufgeführt; aber die - Nummerierung selbst ist von der Reihenfolge der Inhaltsverzeichnisse in der - \emph{Quelle} dieses Dokumentes \ldots} -\tableofcontents\endgroup. Und hier erhalten wir, was -wir gerade geschrieben haben:\par\smallskip -{\leftskip1cm\rightskip2cm - \ttfamily\small\baselineskip11pt \noindent Hier ist die - nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die in - diesem Dokument dargestellt sind:~\string\tableofcontents.\par} - -Die vorausgehenden Arbeiten waren wie folgt. Zuerst definierten wir einen Zähler -|visibletoc|, dessen Berufung es ist, bei jedem angezeigten Inhaltsverzeichnis -erhöht zu werden. \etoc hat einen eigenen Zähler, aber es zählen alle -Inhaltsverzeichnisse, auch wenn diese nicht angezeigt werden, da die |tocdepth| -Werte |-2| oder |-3| waren. - -Wir könnten manuell |\refstepcounter{visibletoc}| und |\label| an allen -geeigneten Stellen im Dokument hinzufügen, und wir würden dann |\ref|- Befehle -verwenden, aber dies stellt eine hohe manuelle Bearbeitung der Quelle dar. - -Es gibt eine viel bessere Möglichkeit: Es gibt einen Aufhänger -\csb{etocaftertitlehook} und wir sagten, es erhöht sich der |visibletoc|-Zähler -und wir schreiben eine Anlage zu der |.toc|-Datei, in analoger Weise zu dem -Gliederungsbefehl, zum Beispiel |Kapitel|, |Abschnitt| oder |Unterabschnitt|. -Wie \etoc seinen eigenen Zähler erhöht, noch bevor der Titel des -Inhaltsverzeichnisses gesetzt wird, bietet diese (die meiste Zeit) einen -besseren Link-Zielpunkt als jeder Zähler von \csa{etocaftertitlehook} (der Link -wird nach dem Titel platziert). Anstatt mit |\refstepcounter{visibletoc}|, -innerhalb von \csa{etocaftertitlehook}, formulieren wir -|\stepcounter{visibletoc}|, dann folgt der Befehl -\csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. Dieser \etoc-Befehl -\csb{etoctoccontentsline}\marg{level\_name}\marg{name} hat die gleiche Wirkung -wie: \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}} aber -sein Nutzen ist es \footnote{Mit \csa{addtocontents} anstatt - \csa{addcontentsline}.}, die Reparatur der automatischen Erstellung von -Lesezeichen zu verhindern mit \csa{addcontentsline} bei dem |hyperref|-Paket, -wie die pdf-Lesezeichen machen sie nicht viel Sinn hier (und würde eine -Beschwerde bezüglich von |hyperref| eruieren, denn das Lesezeichen-Niveau ist -`unbekannt').\footnote{ Das Paket bietet eine Stern-Variante - \staritb{etoctoccontentsline}, die zulässt, dass die Erstellung von - Lesezeichen und das Haben eines dritten obligatorischen Arguments, welches das - Lesezeichen-Niveau darstellt, funktioniert; abhängig vom Kontext kann die - Hauptrolle und die Nicht-Stern-Variante profitabel durch \csa{phantomsection} - sein.} - -Schließlich war in der Präambel des Dokuments |\etocsetlevel{visibletoc}{6}|. -Das Niveau |6| (oder etwas mit einer höheren Zahl) wird ignoriert, auch wenn -|tocdepth| zum Beispiel den Wert |10| hat; das ist unabhängig davon, ob \etoc -die Dokumentenklasse als Standardlinien oder als eigene Linienstile nutzt oder -die, die vom Benutzer mit \csa{etocsetstyle} Befehl definiert wurden. Es gibt -also keinen Grund zur Sorge, dass etwas schief gehen könnte. - -Dann haben wir hier nur |\etocsetlevel{visibletoc}{0}| gesetzt. Und nur diese -Art von Einträgen weisen wir vorübergehend eine |Teil|- und |Kapitel|-Ebene |1| -zu (oder etwas höher als null) und setzen |tocdepth| auf den Wert |0|. Wir haben -auch \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{, - \}\{\string\etocname\}\{\}}, welche eine innere Anzeige mit dem Komma als -Trennzeichen definiert. Wie \etoc Aspekte |\par| automatisch als Standard das -Inhaltsverzeichnis setzt, verwendeten wir den Befehl \csb{etocinline} (auch als -\cs{etocnopar} bekannt), welches die Reaktion ausmacht . - -Hier sind die Details der Implementierung: - -\begingroup -\begin{verbatim} - < in der Prämbel > -\newcounter{visibletoc} -\renewcommand{\etocaftertitlehook} - {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}} -\etocsetlevel{visibletoc}{6} -\begin{document} - < document body > -\subsection{Surprising uses of etoc} -\begingroup - \etocinline - \etocsetlevel{part}{1} - % \etocsetlevel{chapter}{1} % (keine Kapitel in scrartcl Klasse) - \etocsetlevel{visibletoc}{0} - \etocsetstyle{visibletoc} - {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{} - \etocsettocstyle{}{} % keine Titel, Regeln oder Rahmen festgelegt! - \etocsetnexttocdepth{visibletoc} % zeigt nur die `visibletoc' Einträge an aus .toc - -Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, -die in diesem Dokument angezeigt werden: \tableofcontents. -\endgroup -\end{verbatim} - -\endgroup - -Nach |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, wird für alle zukünftigen -Inhaltsverzeichnisse (nicht im -Kompatibilitätsmodus) der definierte Stil für das Niveau -|0| verwendet (was normalerweise der Pegel für ein Kapitel -ist). Um diese Änderung auf die einfachste Art und Weise zu halten, muss man -alles in eine Gruppe setzen. - -Der \autoref{subsec:interverting} gibt eine andere Verwendung -von Verschachtelungsstufen an. - -\section{Willkürliche "`Listen von \ldots "', \csbhyp{etoctoccontentsline}} -\label{etoctoccontentsline} - -Die Idee der Internabwehr ist leistungsfähig und ermöglicht -\etoc-Anzeigelisten, um beliebige Dinge in dem Dokument enthalten zu lassen. -Und all das mit noch nichts anderem als der -|.toc| Datei! -Beispiel: Stellen Sie sich ein Dokument mit Dutzenden von Übungen vor, -vielleicht als |\newtheorem{exercise}{}[section]|. -Lassen Sie uns erklären, wie man \etoc anweist, eine verlinkte Liste all dieser -Übungen anzuzeigen. Dafür haben wir in der Präambel geschrieben: -\begin{verbatim} - \newtheorem{exerci}{}[section] - % the exercice number will be recoverable via \etocname: v--here--v - \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}} - \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}} - \etocsetlevel{exercise}{6} -\end{verbatim} -Auf diese Weise wird \csa{etocname} die Übungsnummer vergeben (aber -\csa{etocnumber} wird leer sein). Hätten wir stattdessen -\begin{verbatim} - \newcommand*{\exercisetotoc} - {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}} -\end{verbatim} -% -verwendet, wäre die Übungsnummer via \csa{etocnumber} verfügbar und -\csa{etocname} wäre leer gewesen. Es spielt keine Rolle, welches der beiden -Verfahren verwendet wird. Der \etoc Befehl \csa{etoctoccontentsline}|{..}{..}| -wird als Ersatz für \csa{addcon\-tentsline}|{toc}{..}{..}| verwendet: Das ist -die, die durch das Reparieren von |hyperref| zu \csa{addcontentsline} verwendet -wird, um in ihrem Prozess die Erstellung von Lesezeichen zu vermeiden. Wenn man -|hyperref| ermächtigt, Lesezeichen auf einer bestimmten Ebene \meta{n} zu -erschaffen, kann einer (hier mit \meta{n}$=$|2|) die Stern-Variante -\starit{etoctoccontentsline} benutzen, welche ein zusätzliches Argument hat: -% -\begin{verbatim} -\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}} -\end{verbatim} - -Der Zähler |exerci| wird bereits durch das |exerci|-Theoremumfeld erhöht und -sorgt für den richtigen Ort für den Link zusätzlich zum Paket -|hyperref|. Der Befehl \csa{exercisetotoc} fügt für jede Übung eine Zeile in die -|.toc|-Datei, entsprechend einer fiktiven Dokumenteinheit -mit dem Namen `|Übung|' ein. Eine -Vier-Säulen-Liste, einschließlich der Abschnitte, kann dann erreichen mit -\begin{verbatim} - \etocsetnexttocdepth{2} % Abschnitte sind auf Stufe 1 und werden anzeigen -\begingroup - \etocsetlevel{exercise}{2} % aber: - \etocsetlevel{chapter}{3} % keine Kapitel - \etocsetlevel{subsection}{3} % keine Unterabschnitte - \etocsetlevel{part}{3} % keine Parts - \etocsetstyle{exercise}{}{} % \etocname = exercise number - {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par} - {\pagebreak[2]\vskip\baselineskip} - \etocsetstyle{section}{}{} - {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par - \nopagebreak[3]}{} - \etocruledstyle[4]{\Large\bfseries List of the exercises} - \setlength{\columnseprule}{.4pt} - \tableofcontents -\endgroup - \end{verbatim} - - -\section{Ein TOC mit einem extravagantem Layout} - -Hier ist ein Inhaltsverzeichnis, wo die Abschnitte aus einem bestimmten Kapitel -durch einen Zahlenbereich dargestellt werden sollen -(wie 18--22 bei einem bestimmten Kapitel, 42--49 für ein anderes \ldots\ -natürlich in das Inhaltsverzeichnis automatisch eingefügt wurden). - -Dies ist kein Abbildungseinschluss, das Inhaltsverzeichnis wird von seiner -ursprünglichen -|tex|-Quelle in dieses Dokument nach dem Austausch des -|Teils|, |Kapitels| oder |Abschnitts| mit |Dummy-Teil|, |Dummy-Kapitel| und -|Dummy-Abschnitt| (und da ist auch eine Dummy-Seitenzahl) produziert. Wir -kopierten die Linienstile, wie im Original verwendet, und -das Inhaltsverzeichnis zeigt folgende Situation an: -\begin{verbatim} - \etocsetlevel{dummypart} {-1} \etocsetlevel{part} {2} - \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2} - \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2} - \etocsetnexttocdepth{dummysection} -\end{verbatim} - -Jedes Kapitel zeigt die Zahl nur von dem ersten und dem letzten Abschnitt an. -Siehe in der Quelldatei |etoc.dtx| für die Details nach, wie das gemacht wird. - -Eine andere Technik für diese Art der Dinge erläutert - \autoref{ssec:statistics}. - -\begingroup - - \etocsetlevel{dummypart}{-1} - \etocsetlevel{dummychapter}{0} - \etocsetlevel{dummysection}{1} - \etocsetlevel{part}{2} - \etocsetlevel{chapter}{2} - \etocsetlevel{section}{2} - - \newif\ifextraidone - \newif\ifextraiidone - - \etocsetstyle{dummypart} - {} - {} - {\begin{center}\Large\bfseries TEIL \etocnumber - \ifextraiidone\\\etocname.\fi\end{center} - \ifextraidone\else - \noindent\hskip.7\linewidth - \hbox to .2\linewidth -% février (ou janvier?) 2013 -% je modifie ici en ajoutant un \hss, pour compenser la plus petite -% taille de txrm. Ok. - {\hss\small\textsc{\bfseries Kapitel.\hss Seite.}}\par\fi - \extraidonetrue - } - {} - - \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}} - \etocsetstyle{dummychapter} - {} - {\par\noindent\etocifnumbered - {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}} - {\hspace*{.15\linewidth}}} - {\hbox to .65\linewidth - {\hspace{1em}\etocname\leaders\mytocleaders\hss}% - \hskip-.1\linewidth - \hbox to .2\linewidth{\hspace{1.5em}...\hss - \etocifnumbered - {\etocpage} - {\ifextraiidone\else\etocpage\fi}}% - \hskip-.2\linewidth - } - {} - - \newbox\forsectionnumbers - \makeatletter -% 21 février 2013: je rajoute \color@begingroup et \color@endgroup - \etocsetstyle{dummysection} - {\setbox\forsectionnumbers=\hbox to .1\linewidth - \bgroup\color@begingroup\hss\etocskipfirstprefix} - {\@gobble} - {\etocnumber---} - {\etocnumber\color@endgroup\egroup - % for reasons I do not quite understand, in some pdf viewers the dots - % do not completely disappear if here \fboxsep0pt is used. - % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) - % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais - % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à - % « effacer ») - \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par - \ifextraiidone\else - \begin{center}\bfseries Kongruenz.\end{center} - \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Übung.}}\par - \fi\extraiidonetrue - } - \makeatother - - \renewcommand{\etocinnertopsep}{0pt} - - \etocruledstyle[1]{% - \parbox{\linewidth}{% - \centering - \textsc{\bfseries\LARGE\MakeUppercase{Inhaltsverzeichnis}}\\ - \rule{.2\linewidth}{2pt}}% - } - - \etocsetnexttocdepth{dummysection} - - \tableofcontents - -\makeatletter - \def\adddummysection {\stepcounter{dummysection}% - \addtocontents {toc}{\protect\contentsline - {dummysection}{\protect\numberline{\thedummysection}}% - {\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} - - \def\adddummychapter #1{\stepcounter{dummychapter}% - \advance\dummypage2 - \addtocontents {toc}{\protect\contentsline - {dummychapter}{\protect\numberline{\thedummychapter}#1}% - {\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} - - \def\adddummychapno #1{\advance\dummypage2 - \addtocontents {toc}{\protect\contentsline - {dummychapter}{#1}{\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} - - \def\adddummypart #1{\stepcounter{dummypart}% - \advance\dummypage4 - \addtocontents {toc}{\protect\contentsline - {dummypart}{\protect\numberline{\Roman{dummypart}}#1}% - {\the\dummypage }% - %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX - {\@currentHref }% - %\fi - }} -\makeatother - - \newcount\dummypage \dummypage-1 - - \adddummypart {} - - \adddummychapno {Einleitung} - - \newcount\tempcount - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<8 - \repeat - - \adddummychapter {Kongruenz von Subjekt und Verb} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<17 - \repeat - - \adddummychapter {Kongruenz von Substantiven und Adjektiven} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<22 - \repeat - - \adddummychapno {Kongruenz von Relativen und Antezendenten} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<25 - \repeat - - \adddummypart {Government} - - \adddummychapter {Der Akkusativ} - - \adddummychapno {Allgemeine Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<30 - \repeat - - \adddummychapno {Besondere Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<37 - \repeat - - \adddummychapter {Verbrektion über zwei Akkusative} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<41 - \repeat - - \adddummychapter {Der Kausativ} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<49 - \repeat - - \adddummychapter {Der Instrumental} - - \adddummychapno {Allgemeine Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<54 - \repeat - - \adddummychapno {Besondere Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<59 - \repeat - - \adddummychapter {Der Dativ} - - \adddummychapno {Allgemeine Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<65 - \repeat - - \adddummychapno {Besondere Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<71 - \repeat - - \adddummychapter {Der Ablativ} - - \adddummychapno {Allgemeine Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<75 - \repeat - - \adddummychapno {Besondere Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<86 - \repeat - - \adddummychapter {Der Lokativ} - - \adddummychapno {Allgemeine Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<92 - \repeat - - \adddummychapno {Besondere Anwendungen} - - \loop\advance\tempcount by 1 - \adddummysection - \ifnum\tempcount<100 - \repeat -\endgroup - -\section{Ein weiterer Kompatibilitätsmodus} - -Wie in \autoref{ssub:compat} erläutert, sagen die Befehle -\csa{etocstandardlines} und \csa{etocstandarddisplaystyle} \etoc im -Wesentlichen, wie man als Beobachter fungiert. Das Dokumentenklasse-Layout für -das Inhaltsverzeichnis wird dann gehorchen. Es gibt keine Möglichkeit, dieses -Standard-Layout aus dem Paket anzupassen (ändern von Schriftarten, Rändern, -vertikalen Abständen, etc.) . Definieren Sie dazu ein Paket von dieser Funktion; -weil entweder \etoc (vorübergehend vielleicht) im Kompatibilitätsmodus ohne -Anpassung auf seinen Teil möglich ist oder der Benutzer hat das Layout in -\csa{etocsetstyle}-Befehlen angegeben (und \csa{etocsettocstyle}) ist (angeblich -\ldots ) in der kompletten Steuerung. - -Nun, es ist eigentlich eine Alternative. Es ist möglich, die Verwendung der -\csa{etocsetstyle}-Befehle zu nutzen, um einen künstlichen Kompatibilitätsmodus -neu zu erstellen, um Effekte zu erreichen, wie die folgenden, alle Dinge -gleichen andererseits dem Dokumentenklassen-Standard: -\begin{enumerate}[noitemsep] -\item Enthält der |hyperref|-Link nur die Namen, aber nicht die Anzahl der - jeweils zu kapselnden Einträge der Inhaltstabellen; -\item verwenden Sie den Dokumentenklassen-Stil für Kapitel und Abschnitte, aber - ändern Sie es nur für Teilbereiche; -\end{enumerate} - -Hier ist beschrieben, wie Sie vorgehen müssen. Man nimmt in die Präambel: -\begin{verbatim} -\makeatletter -\newcommand{\MyStandardTOC}{% - \begingroup - \let\savedpartline\l@part - \let\savedchapterline\l@chapter %% remove if article/scrartcl class - \let\savedsectionline\l@section - \let\savedsubsectionline\l@subsection - % and so on if \subsubsection, etc... is used - % - % for the book or article classes: - \etocsetstyle{part}{}{} - {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}% - % for the scrbook or scrartcl classes: - \etocsetstyle{part}{}{} - {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - % identical in book/article/scrbook/scrartcl classes: - \etocsetstyle{chapter}{}{} %%% only for book and scrbook - {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \etocsetstyle{section}{}{} - {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \etocsetstyle{subsection}{}{} - {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - % etc... if further sectioning units are used - % (see the text for what to do with the memoir class) - \etocstandarddisplaystyle % this is for the title, page-marks, etc... - \tableofcontents - \endgroup} -\makeatother -\end{verbatim} -Natürlich ist es so, wenn das Dokument nur ein Inhaltsverzeichnis hat, dann gibt -es keine Notwendigkeit, die Befehle in ein Makro zu setzen oder sogar in eine -Gruppe. \footnote{Und wenn darüber hinaus, um das gleiche Layout wie im Standard -zu halten, kann man sich die Frage stellen, warum man \etoc benutzt \ldots\ Es -gibt \emph{einen} guten Grund: Zahlen und Namen sind separate -\texttt{hyperref}-Links, nach der Regel gibt es nur eine Verbindung, die sowohl -die Nummer und den Namen auf einem toc-Eintrag entsprechen.} Mit dem Befehl -\etoc ist ein Inhaltsverzeichnis völlig identisch zu einem von der -Dokumentenklasse: |article|, |book|, |scrartcl|, |scrbook|. \footnote{Für die -|memoir|-Klasse braucht man ein bisschen mehr: Jeder der Befehle -\csa{booknumberline}, -\csa{partnumberline} und \csa{chapternumberline} müssen in ein -\csa{let} gebettet werden und sie ergeben dann ein: -\centeredline{% -\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{% -\string\savedchapternumberline}} -\hbox to \linewidth{\hfil\hfil \ttfamily - \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} -(und analog für |part| und |book|).} -Die Anzahl und die Namen der einzelnen Einträge sind jeweils separat in einem -|hyperref|-Link, wie es immer der Fall bei \etoc ist, wenn man nicht im -Kompatibilitätsmodus ist. Ersetzt man \csa{etocnumber} mit \csa{etocthenumber}, -dann ergibt es ein Inhaltsverzeichnis, wo die Zahlen nicht mehr verlinkt sind, -aber die Namen noch. Oder man kann sich entscheiden, \csa{etocthename} zu -verwenden und eine Hyperlink-Nummer mit \csa{etocnumber} zu erhalten. - -Hier ist ein subtiles Beispiel, wo nur geringfügig die "`sections"' modifiziert -wurden (hinzufügen von Farbe für die Nummer und das Entfernen des -|hyperref|-Links) und die Unterabschnitte, wie in der Standardeinstellung, -\emph{mit Ausnahme} von einer bestimmte "`section"' im Layout komplett geändert -wurde: \MyQuasiStandardTOC{\ref{toc:overview}} \bigskip Dieses Beispiel hat nur -Abschnitte und Unterabschnitte und der in \csa{MyStandardTOC} verwendete Code -war: -\begin{verbatim} -\etocsetstyle{section}{} - {\ifnum\etocthenumber=3 - \etocsetstyle{subsection} - {\par\nopagebreak\begingroup - \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue - \parindent 0pt \normalfont\normalsize\rmfamily\itshape - % \columnsep1em - % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}% - % \begin{multicols}{2}% - \etocskipfirstprefix} - {\allowbreak\,--\,} - {\etocname\ \textup{(\etocnumber)}} - {.\par\endgroup}% - % {.\par\end{multicols}\end{minipage}\par\endgroup}% - \else - \etocsetstyle{subsection} - {}{} - {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}} - {}% - \fi} - {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} - {}% -\end{verbatim} - -Beachten Sie die Seite mit den Kopf-Zeichen, welche man dem Inhaltsverzeichnis -hinzufügen kann. Abschnitte und Unterabschnitte sind genauso wie im Standard -(mit Ausnahme der Unterabschnitte, welche von einem bestimmten -Benutzer-Abschnitt aus gewählt wird und bis auf die Farbe der -Abschnittsnummern), ohne das explizit die Länge, die Schriftart oder andere -Formatierungsanweisungen gegeben werden. Aber wir mussten die |scrartcl|-Quellen -untersuchen, um festzustellen, was zu nehmen ist für \csa{leftskip} und -\csa{rightskip} für unsere Nutzer-sections-Einträge. - -\section{Das TOC als ein Baum}\label{tocastree} - -Mit |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} und dem Paket -|forest|\footnote{\url{http://ctan.org/pkg/forest}} wird das Inhaltsverzeichnis -als Baum angezeigt. Die Technik ist, den von \etoc geänderten Befehl -\csa{tableofcontents} nicht für den Satz zu verwenden, sondern ein Makro, oder -besser hier eine \emph{symbolische Liste}-Variable vorzubereiten, mit allen -Anweisungen, die später ausgeführt werden. \textsc{Leslie Lamport}'s Buch -erwähnt überhaupt nicht die symbolische Liste und \LaTeX{} vermittelt den -Eindruck, nicht wirklich darauf zu warten, dass die Mehrheit der Nutzer immer -über sie (oder begrenzte Makros) etwas hört; die ganze Sache und der folgende -Abschnitt sind daher für fortgeschrittene Anwender. - -Setzt man die \csa{etocnumber}- und \csa{etocname}-Befehle in \csa{treetok}, -dann würde das nichts nützen: Auf welche Zahl oder Namen würde sich das dann -beziehen, in einer verzögerten Ausführung? - -Wir brauchen die Speicherung der Makro-Namen, aber nicht die Makro-Inhalte. Und -wir wollen auch die korrekten |hyperref|-Hyper-Links erhalten.\footnote{Dieses -Handbuch bis zu der Version vom 14. Mai 2013 verwendete das Paket |tikz-qtree|, -aber es gab Probleme mit den Hyper-Links. Kein solches Problem entsteht mit -|forest| oder mit der nativen Syntax |tikz| für Bäume (die im nächsten Abschnitt -dargestellt sind).} Die Hyper-Link-Informationen von \etoc setzen innen -\csa{etocname}, etc. \ldots, aber es ist nur ein Zeiger, nicht lagerungsfähig -für die spätere Verwendung; aber das Paket bietet \csa{etocthelinkednumber}, -\csa{etocthelinkedname} und \csa{etocthelinkedpage}, deren Inhalte enthalten den -Hyper-Link in einer Form, die gespeichert und später wiederverwendet werden -können. - -Aus diesem |forest|-Baum haben wir ganz besondere \etoc-Stile für Abschnitte und -Unterabschnitte konzipiert. Sie verwenden ein symbolisches Listenregister mit -dem Namen |\treetok| und ein Makro |\appendtotok|, deren Aufgabe es ist, zu -einer bestimmten symbolischen Listenvariablen den Inhalt eines Makros als -zweites Argument anzuhängen. All dies wird in Reaktion auf einen Befehl -|\tableofcontents| passieren, aber noch ist \emph{nichts} in deren -Prozess.\footnote{Es gibt immer ein \csa{par}, welches kein Problem ist, es kann -aber unterdrückt werden, wenn der Bedarf über den Befehl \csb{etocinline} oder -dessen Synonym \csb{etocnopar} besteht.} Das ist der spätere Job einer -|forest|-Umgebung, die den Inhalt von |\treetok| wiedergeben soll. -\newtoks\treetok -\newtoks\tmptok - -\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 - #1\expandafter\expandafter\expandafter - {\expandafter\the\expandafter #1#2}} - - -% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f -% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de -% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre -% TikZ natif. - -% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème -% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu -% de sa syntaxe et de celle de TikZ). - -\newcommand*\PrepareSectionNode{% - \tmptok {\centering\bfseries}% - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% -} - -% 7 mars: j'utilise maintenant \etocthelinkedname -\newcommand*{\PrepareSubsectionNode}{% - \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsettocstyle - {\treetok{[{\hyperref[part:overview]{Überblick}}}} - {\global\appendtotok\treetok{ ]}} - - -% 11 octobre -% forest ne veut pas @\the\treetok avec un \treetok vide, donc -% il faut lui donner une valeur par défaut. -\treetok{[{run latex again}]} - -% 12 octobre -% pour que varioref fonctionne bien, je dois mettre la \tableofcontents -% au plus près de l'environnement forest - -\begin{figure}[th!]\centering - \etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:forest}\ref{toc:overview} - \hypersetup{hidelinks}% - \bracketset{action character=@} - \begin{forest} - for tree={anchor=center,child anchor=west, - grow'=east,draw,thick, - edge={draw,thick,dashed,color=teal}}, - where={level()==1}{circle,thick,fill=blue!5, - before computing xy={l=3cm}}{}, - where={level()==2}{fill=red!5, - before computing xy={l=6cm}}{}, - % je trouve ce truc pour une position absolue. OK! - rectangle, thick, fill=cyan!5, inner sep=6pt, - @\the\treetok - \end{forest} - \centeredline{Ein Inhalsverzeichnis in Form eines |forest|-Baums.} -\end{figure} - -Der resultierende Baum wird in einem \hyperref[toc:forest]{Puffer} angelegt, welcher -\vpageref[oben]{toc:forest} erscheint. Hier ist der zur Herstellung notwendige Code: -\begin{verbatim} -\newtoks\treetok -\newtoks\tmptok - -\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 - #1\expandafter\expandafter\expandafter - {\expandafter\the\expandafter #1#2}} - -\newcommand*\PrepareSectionNode{% - \tmptok {\centering\bfseries}% - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% -} - -\newcommand*{\PrepareSubsectionNode}{% - \tmptok {\raggedright}% - \appendtotok\tmptok\etocthelinkedname - \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendtotok\treetok{ ]}} - {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} - {\appendtotok\treetok{ ]}} - -\etocsettocstyle - {\treetok{[{\hyperref[part:overview]{Überblick}}}} - {\global\appendtotok\treetok{ ]}} - -% forest does not like @\the\treetok if \treetok is empty. On first latex -% run, this will be the case because the TOC style defined above will not -% have been executed, as the label {toc:overview} does not refer to a valid -% TOC yet. So we must give a safe default value to \treetok -\treetok{[{run latex again}]} - -\begin{figure}[th!]\centering - \etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:forest}\ref{toc:overview} - \hypersetup{hidelinks}% - \bracketset{action character=@} - \begin{forest} - for tree={anchor=center,child anchor=west, - grow'=east,draw,thick, - edge={draw,thick,dashed,color=teal}}, - where={level()==1}{circle,thick,fill=blue!5, - before computing xy={l=3cm}}{}, - where={level()==2}{fill=red!5, - before computing xy={l=6cm}}{}, - rectangle, thick, fill=cyan!5, inner sep=6pt, - @\the\treetok - \end{forest} -\end{figure} -\end{verbatim} - -Warum |\hypersetup{hidelinks}|? Wie in \autoref{ssec:hidelinks} erläutert ist, -werden die Links in Inhaltsverzeichnissen nicht eingefärbt, noch gerahmt, so -dass dieses Dokument den Befehl -|\hypersetup{hidelinks}| -hinzufügt. Aber immer werden die |\treetok|-Inhalte in die -|\hyperlink|-Ursprungsbefehle in |\etocthelinkedname| ausgepackt, etc. \ldots{} -Sie werden in der normalen Umgebung für Links (die in diesem Dokument zu -kolorieren sind) ausgeführt. Der \etoc -Code versucht zu erraten, was der -aktuelle "`Stil"' für Links ist (ein Begriff, der nicht wirklich von |hyperref| -vorausgesetzt zu sein scheint) und speichert es in |\etocthelinkedname|, etc. -\ldots, Ich entschied mich für die einfachere Lösung, es dem Benutzer zu -überlassen, ob er es neu erstellt, was auch immer für Bedingungen erwünscht -sind. So, hier ist es notwendig, das |\hypersetup{hidelinks}| in dem -|figure|-Umgebung neu zu erstellen. - -Es gibt einige andere Beispiele in dieser Dokumentation, wobei -|\tableofcontents| verwendet wird, um Material zu haben für den späteren -Schriftsatz: -\begin{itemize} -\item Für das Drucken der Statistiken zu Beginn der einzelnen Abschnitte (siehe - \autoref{ssec:statistics}) wurden unbeschädigte Boxen benutzt (das Problem der - Darstellung der Links funktioniert nicht). -\item Zum Setzen des Inhaltsverzeichnisses als eine Tabelle mit der Methode von - \autoref{ssec:tocastableold}; - auch dort werden wir |\hypersetup{hidelinks}| setzen, nachdem wir die Namen, - Nummern und Seitennummern in einem symbolischen Listenregister gesetzt haben. -\item Und zwei weitere Baum-Beispiele sind im nächsten Abschnitt. -\end{itemize} - - -\section{Das TOC als ein Molekül}\label{ssec:molecule} - -Es ist auch möglich, einen Inhaltsverzeichnisbaum nach der TikZ-Syntax für Bäume -zu konstruieren: Aber das ist eine kompliziertere Aufgabe für die \etoc -Linienstile, welche die Klammern in einer Art und Weise von \TeX{} behandeln. -(Sie brauchen für das Auffüllen der symbolischen Liste im Zusammenhang mit jedem -Schritt immer eine Balance, sonst müssen immer kompliziertere Tricks angewandt -werden.). - -Die einfachste Strategie ist es, eine symbolische Liste zuzuweisen (oder Sie -verwenden ein Makro) für jede Ebene: Wir brauchen ein \csa{parttok}, ein -\csa{chaptertok}, ein \csa{sectiontok} und ein \csa{subsectiontok}, um in der -Aufgabe die \csa{treetok} zu befüllen. Wir interessieren uns hier für die -Tabelle der Inhalte von diesem (oder einem anderen) Dokumententeil, nur ein -\csa{sectiontok} und ein \csa{subsectiontok} wird dafür gebraucht. - -\begin{verbatim} -% \newtoks\treetok % already done earlier -\newtoks\sectiontok \newtoks\subsectiontok \newcommand*{\treenode}{} - -\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} - \edef\tmp{\the#1 child {\the#2}}% - #1\expandafter{\tmp}% -} -\newcommand*{\preparetreenode}{% - \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory) - \edef\treenode{node {\the\tmptok}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendchildtree\treetok\sectiontok} - {\preparetreenode \sectiontok\expandafter{\treenode}} - {\appendchildtree\treetok\sectiontok} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendchildtree\sectiontok\subsectiontok} - {\preparetreenode \subsectiontok\expandafter{\treenode}} - {\appendchildtree\sectiontok\subsectiontok} - -\etocsettocstyle - {\treetok{\node {\hyperref[part:overview]{Overview}}}} - {\global\appendtotok\treetok{ ;}} - -% moved to the inside of the figure environment for correct \pageref{toc:molecule} -% \etocsetnexttocdepth{subsection} -% \tableofcontents \label{toc:molecule} \ref{toc:overview} -\end{verbatim} - -\newtoks\sectiontok -\newtoks\subsectiontok -\newcommand*\treenode {} - -\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} - \edef\tmp{\the#1 child {\the#2}}% - #1\expandafter{\tmp}% -} - -\newcommand*{\preparetreenode}{% - \tmptok\expandafter{\etocthelinkednumber}% - \edef\treenode{node {\the\tmptok}}% -} - -\etocsetstyle{section} - {\etocskipfirstprefix} - {\appendchildtree\treetok\sectiontok} - {\preparetreenode - \sectiontok\expandafter{\treenode}} - {\appendchildtree\treetok\sectiontok} - -\etocsetstyle{subsection} - {\etocskipfirstprefix} - {\appendchildtree\sectiontok\subsectiontok} - {\preparetreenode - \subsectiontok\expandafter{\treenode}} - {\appendchildtree\sectiontok\subsectiontok} - -\etocsettocstyle - {\treetok{\node {\hyperref[part:overview]{Überblick}}}} - {\global\appendtotok\treetok{ ;}} - -\begin{figure}[th!]\centering -\etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:molecule}\ref{toc:overview} - \hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=4cm,sibling angle=72}, - level 2/.style={level distance=2cm,sibling angle=60}, - every node/.style={ball color=red,circle,text=SkyBlue}, - edge from parent path={[dashed,very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture} - \centeredline{Ein Inhaltsverzeichnis als ein "`Molekül"'.} -\end{figure} - -% Pour que \pageref fonctionne correctement, je dois mettre -% le \tableofcontents dans la figure. - -Der |\tableofcontents|-Befehl erscheint direkt über der Umgebung in dem -|tikzpicture|-Umfeld und ist eine Gleitfigur (über Inhaltslabel sicherlich auf -die gleiche Seite zu beziehen, wie die in dem das Bild tatsächlich gedruckt -werden soll). Wir erhalten somit das Inhaltsverzeichnis als -"`\hyperref[toc:molecule]{Molekül}"', welches oben erscheint -\vpageref[above]{toc:molecule}. Hier ist der aktuelle, tatsächlich produzierte -Code: -\begin{verbatim} -\begin{figure}[th!]\centering - \etocsetnexttocdepth{subsection} - \tableofcontents \label{toc:molecule} \ref{toc:overview} - \hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=4cm,sibling angle=72}, - level 2/.style={level distance=2cm,sibling angle=60}, - every node/.style={ball color=red,circle,text=SkyBlue}, - edge from parent path={[dashed,very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture} -\end{figure} -\end{verbatim} - -Dieses \hyperref[toc:molecule]{TikZ-TOC} ist komplett verlinkt, wie das -vorherige \hyperref[toc:forest]{Forest-TOC} auch. - -\etocsettocstyle - {\treetok{\node {\autoref{part:globalcmds}}}} - {\global\appendtotok\treetok{ ;}} - -\etocsetnexttocdepth {subsection} -\tableofcontents \ref{toc:globalcmds} - -\noindent -\parbox{4cm}{\hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=2.5cm,sibling angle=60}, - level 2/.style={level distance=1cm,sibling angle=45}, - every node/.style={ball color=red!50,circle,text=black}, - edge from parent path={[very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture}}% -\begin{minipage}{\dimexpr\linewidth-4cm\relax} - Seitlich ist das (völlig mit Hyper-Links versehene) Inhaltsverzeichnis von - \autoref{part:globalcmds}. - \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}% -\begin{verbatim} -\etocsettocstyle - {\treetok{\node {\autoref{part:globalcmds}}}} - {\global\appendtotok\treetok{ ;}} -\etocsetnexttocdepth {subsection} -\tableofcontents \ref{toc:globalcmds} -\noindent -\parbox{4cm}{\hypersetup{hidelinks}% - \begin{tikzpicture} - [grow cyclic, - level 1/.style={level distance=2.5cm,sibling angle=60}, - level 2/.style={level distance=1cm,sibling angle=45}, - every node/.style={ball color=red!50,circle,text=black}, - edge from parent path={[very thick,color=cyan] - (\tikzparentnode) --(\tikzchildnode)}] - \the\treetok - \end{tikzpicture}}% -... -\end{verbatim} -\end{minipage} - -\section{Das TOC als eine Tabelle} -\label{sec:tocastable} - -\textbf{UEBERSETZUNG NOETIG} -\begin{otherlanguage}{english} -With release |1.08| it is easier to typeset a TOC as a table. It is -possible to open a tabular in the title part of the TOC (first argument -to \csb{etocsettocstyle}) and then close it after the contents (second -argument to \csb{etocsettocstyle}), and specify in the line styles how -to use the tabulation |&| and tabular end of row |\\|. There are some -conditions and a few caveats: - -\begin{enumerate} -\item it is mandatory to issue \csb{etocglobaldefs} for \etoc's - definitions to have global scope, -\item use \csb{etocthelinkedname}, - \csb{etocthelinkednumber} and \csb{etocthelinkedpage} in preference to - \csb{etocname}, \csb{etocnumber}, \csb{etocpage}: if |hyperref| is - present, this is mandatory, and if it is not present, it does not hurt - and gives the same output, -\item it is impossible to start one of the \meta{start}, \meta{prefix}, - \meta{contents} or \meta{finish} specification with a sole |\hline|, - \emph{i.e.} one not preceded by a |\\| (it is however possible to put - |\\| at the end of \meta{prefix} and the |\hline| at the start of - \meta{contents}). -\item as is explained next, it is recommended to use the |\\| at - the start of the \meta{prefix} or \meta{contents} - specifications to close the \emph{previous} row, not at the end - to close the \emph{current} row; when the TOC is a partial one (a - \csa{localtableofcontents}) this advice becomes (in almost all - situations) mandatory. -\end{enumerate} - -Here is an example of a TOC as a |longtable|, as is possible relatively -simply now with |1.08|. The code follows. -\end{otherlanguage} - -\begingroup -\etocglobaldefs -\etocsetstyle{part} - {} - {\\\hline} - {\strut\etocthelinkednumber &\bfseries\etocthelinkedname - &\etocthelinkedpage } - {} -\etocsetstyle{section} - {} - {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} - {\etocthelinkednumber&\etocthelinkedname &\etocthelinkedpage } - {} -\etocsetstyle{subsection} - {} - {\\} - {&\makebox[1cm][c]{\etocthelinkednumber}% - \parbox[t]{\dimexpr6cm-\tabcolsep\relax} - {\sloppy\itshape\etocthelinkedname\strut}% - &\itshape\etocthelinkedpage } - {} -\etocsettocstyle - {\hypersetup{hidelinks}% - \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} - \hline - \multicolumn{3}{|c|}{\Large\bfseries\strut\MakeUppercase{\contentsname}}% - } - {\\\hline\end{longtable}} -\etocsetnexttocdepth {subsection} -\tableofcontents -\endgroup - -\begin{verbatim} -UEBERSETZUNG NOETIG -\begingroup -\etocglobaldefs % necessary for \etocthename etc... to survive & - -% we must use \etocthelinkednumber and not \etocnumber if hyperref is -% present, because \etocnumber does not incorporate a fully expanded -% hyperlink destination specification, hence that part gets lost when a -% & is encountered - -% observe the locations of the \\ -\etocsetstyle{part} - {} - {\\\hline} - {\strut\etocthelinkednumber &\bfseries\etocthelinkedname - &\etocthelinkedpage } - {} - -\etocsetstyle{section} - {} - {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} - {\etocthelinkednumber&\etocthelinkedname &\etocthelinkedpage } - {} - -\etocsetstyle{subsection} - {} - {\\} - {&\makebox[1cm][c]{\etocthelinkednumber}% - \parbox[t]{\dimexpr6cm-\tabcolsep\relax} - {\sloppy\itshape\etocthelinkedname\strut}% - &\itshape\etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}% - \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} - \hline - \multicolumn{3}{|c|}{\Large\bfseries TABLE OF CONTENTS}% - } - {\\\hline\end{longtable}} - -\etocsetnexttocdepth {subsection} - -\tableofcontents -\endgroup -\end{verbatim} - -\textbf{UEBERSETZUNG NOETIG} - -\begin{otherlanguage}{english} -Examining the code above the reader will wonder why the |\\| are -always given first in \meta{prefix+contents} and not, as is more -intuitive, rather last. In many cases one may indeed construct -TOC-as-tables with the |\\| located at the end of the style -specifications (but almost never for a \csa{localtableofcontents}). -The problem in the previous example was with the positioning of the -|\hline|'s. - -Due to technical aspects of how \TeX{} constructs alignments any -definition or assignment done after an |\\| starts a new row, and -thus makes |\hline| an illegal token (this shows as a |misplaced -\noalign| error.) Not only does \etoc have to do such definitions -to construct \csb{etocname} etc..., it is furthermore the case that -some packages put things in the |.toc| file and as a result there -is never any guarantee that between two \csa{contentsline} there -will not be such a token like |\relax| which in the contexts of -alignments forces \TeX{} to start a cell and thus makes it -impossible then to insert an |\hline|. - -The safest way is to start with an |\\| each line style -specification. We had a little problem with the fact that we wanted -parts not only to have a rule above them (easy, they do |\\\hline|) -but also below them: after each part there is a section, thus the -section which are first of their kind used the \csb{etociffirst} -conditional branching. The attentive reader will notice one last -subtlety: the title was supposed to be followed not by one, but by -two |\hline|'s. - -To solve this we could have used a one-time macro redefining itself, but -we noticed that the title was followed by the unnumbered Abstract, thus -the \csb{etocifnumbered} switch came to the rescue. - -Last technical note: because we put the |\\| inside the branches, there -was no need to employ the expandable variants \csb{etocxiffirst} and -\csb{etocxifnumbered}. - -For the hardliner's old way of obtaining the exact same result, see -\autoref{ssec:tocastableold}. - -Here is also a much simpler example. It is a local table of -contents. -\end{otherlanguage} - -\begin{center} -\etocsetstyle{section} - {} - {\etociffirst{\\\hline\hline}{\\\hline}} - {\etocthelinkedname& - \etocthelinkednumber& - \etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline - \multicolumn{1}{|c|}{\bfseries Abschnitt}& - \bfseries Nummer& - \bfseries Seite} - {\\\hline\end{tabular}} - -\etocglobaldefs % VERPFLICHTEND !! -\etocsetnexttocdepth{1} - -\tableofcontents\ref{toc:overview} -\end{center} - -\begin{verbatim} -\begin{center} -\etocsetstyle{section} - {} - {\etociffirst{\\\hline\hline}{\\\hline}} - {\etocthelinkedname& - \etocthelinkednumber& - \etocthelinkedpage } - {} - -\etocsettocstyle - {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline - \multicolumn{1}{|c|}{\bfseries Abschnitt}& - \bfseries Nummer& - \bfseries Seite} - {\\\hline\end{tabular}} - -\etocglobaldefs % VERPFLICHTEND !! -\etocsetnexttocdepth{1} - -\tableofcontents\ref{toc:overview} -\end{center} -\end{verbatim} - -\subsection{Die Befehle \csbhyp{etocglobaldefs} und \csbhyp{etoclocaldefs}} -\label{etocglobaldefs} -\label{etoclocaldefs} - -\textbf{UEBERSETZUNG NOETIG} - -\begin{otherlanguage}{english} -In \LaTeX{} the meaning of a command defined via |\newcommand\foo{...}| inside -an environment (or group) vanishes from \TeX's memory on exit from this -environment (or group). At times however it is needed to make definitions with -global scope, for this \TeX{} has the primitive prefix |\global|. - -By default \etoc's definitions of \csb{etocname} etc... are local. This causes -problems in certain contexts such as seen here with TOC as tables, but also -with |enumitem| \emph{inline} variants of its standard environments, because -the command |\item| then closes a group. - -After \csb{etocglobaldefs}, \etoc will make its definitions of \csb{etocname} -etc... have global scope. For normal use this is not necessary. It does not hurt -either to activate it systematically. - -To return to the default, use \csb{etoclocaldefs}. Note that both -\csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the -environment or group where they are used. -\end{otherlanguage} - - -\clearpage -\etocdepthtag.toc {linestyles} - -\part{Befehle für die TOC-Linienstile} -\label{part:linestyles} - -\thispartstats - -\etocsetstyle{section} -{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered - {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} -% Dec 7, 2012. I hit upon a problem whose origin I found was -% with xcolor, as xcolor modifies \fbox -% (try \section{\fbox{A}} with and without xcolor). The fix -% was to \protect the \fbox used in the |enumitem| label. -% Strangely enough, with |hyperref| active, the problem did -% not show up. Anyhow I now use \fcolorbox rather than \fbox -% and there is no problem anymore. Also I don't have now to -% use \normalcolor which already needed protection. -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (Seite \etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsection} -{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} -{\normalfont \item} -{\etocname{} (S.~\etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsubsection} -{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix} -{\allowbreak\,--\,} -{\etocname} -{.\hfil\par\endgroup\pagebreak[3]} - -% 27 janvier 22:30 -% je définis les macros (non protégées) -% \etocthename, \etocthenumber, \etocthepage - -\etocruledstyle[1]{\etocfontminusone\color{green}% - \fboxrule1pt\fboxsep1ex - \framebox[\linewidth] - {\normalcolor\hss Inhalt von \autoref{part:linestyles}\hss}} - -\localtableofcontents \label{toc:a} - -\section{Der \csbhyp{etocsetstyle}-Befehl} -\label{etocsetstyle} - -\subsection{Die \csbhyp{etocname}- und \csbhyp{etocpage}-Befehle} -\label{etocname} -\label{etocpage} - -Hier soll erläutert werden, wie \etoc\ dazu verwendet wurde, das -Inhaltsverzeichnis am Beginn des zweiten Teils zu erstellen. Es handelt sich -dabei um ein lokales Inhaltsverzeichnis, weshalb der Befehl \localtoc\ verwendet -wurde. - -Wir müssen hierbei unterscheiden zwischen den Linienstilen (\emph{line styles}) -und dem Ausgabestil (\emph{toc display style}). Die \emph{line styles} erhält -man grundsätzlich auf die folgende Art und Weise: - - -\footnote{Das vorliegende Dokument hat - {\ttfamily\string\renewcommand\string{% - \string\familydefault\string}\string{\string\sfdefault\string}} - in seiner Präambel, deshalb schaltet der Befehl \csa{normalfont} zur - |sans| Schriftart; aus diesem Grund habe ich im Abschnitt line-style - \csa{rmfamily} geschrieben.} - -\begingroup\small -\begin{verbatim} -\etocsetstyle{section} -{\begin{enumerate}} -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsection} -{\begin{enumerate}} -{\normalfont\item} -{\etocname{} (p.~\etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsubsection} -{\par\nobreak\begingroup\normalfont - \footnotesize\itshape\etocskipfirstprefix} -{\allowbreak\,--\,} -{\etocname} -{.\hfil\par\endgroup\pagebreak[3]} -\end{verbatim} -\endgroup - -Diese provisorischen Stil-Definitionen beruhen auf der automatischen -Nummerierung, die von der |enumerate|-Umgebung generiert wird, es ist aber -wesentlich besser den Befehl \csb{etocnumber} innerhalb des Item-labels zu -verwenden, denn das gibt das richtige Ergebnis. Die verbesserten Definitionen -werden dahingehend später erklärt. - -Mit diesem Stil müsste man so -einfallsreich sein, etwas zu designen, was nicht mit Abschnitten oder -Unterabschnitten zu tun hat, vielleicht so etwas wie Superscripte. Nun, -normalerweise braucht man Abschnitte und Unterabschnitte nicht nummeriert und -aufgelistet in der TOC, also hat unser vermeintlicher Benutzer ein Design -gewählt, welches dafür nichts bereitstellt und fügte noch hinzu: -\begin{verbatim} -\etocsetstyle{paragraph}{}{}{}{} -\etocsetstyle{subparagraph}{}{}{}{} -\end{verbatim} -Das ist der gleiche Sachverhalt wie mit den Standardlinienstilen! - -Jeder \csb{etocsetstyle}-Befehl hat fünf notwendige Argumente:\\ \hbox to -\linewidth {\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}% -\marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil} Die -\meta{levelname}'s sind die Abschnittseinteilungen der -Standard-Dokument-Klassen: Von \emph{part} (oder \emph{book}, welches von der -|memoir|-Klasse benutzt wird) herunter bis zu \emph{subparagraph}. - -Der \meta{start}-Code wird ausgeführt, wenn ein toc-Eintrag dieses Levels -gefunden wurde und der vorherige ein höheres Level hatte. Der \meta{finish}-Code -wird ausgeführt, sobald man wieder einen Eintrag mit einem höheren toc-Level -findet. In der Zwischenzeit werden alle Einträge für dieses Level gesetzt, indem -zuerst der \meta{prefix}-Code und dann der \meta{contents}-Code ausgeführt wird. - -Die (robusten) Befehle \csb{etocname}, \csb{etocnumber} und \csb{etocpage} sind -für die Benutzung innerhalb der \meta{prefix} und \meta{contents}-Teile aus der -\csa{etocsetstyle}-Spezifikation. Diese enthalten den Namen, die Nummerierung -und die Seitennummer des entsprechenden toc-Eintrags. Ist das Paket |hyperref| -im Dokument eingebunden, und es existieren Verlinkungen zu den TOC-Daten, dann -werden diese Links in den Befehlen \csa{etocname}, \csa{etocnumber} und -\csa{etocpage} gehalten (Der letzte hat nur einen Link, wenn |hyperref| die -Option \emph{linktoc=all} übergeben wurde). - - - -\subsection{Die \csbhyp{etocskipfirstprefix} und \csbhyp{etociffirst} Befehle} -\label{etocskipfirstprefix} -\label{etociffirst} -\label{etocxiffirst} - -% ALTES -% Der gewählte |subsubsection|-Stil benutzt außerdem den Befehl -% \csb{etocskipfirstprefix}, welcher -- falls verwendet -- der letzte im -% \emph{start}-Code sein \emph{muss}. Er sorgt dafür, dass der "`prefix"'-Code -% nicht für das erste Objekt ausgeführt wird. - -\textbf{UEBERSETZUNG NOETIG} - -\begin{otherlanguage}{english} -The chosen |subsubsection| style made use of the command -\csb{etocskipfirstprefix}, which instructs \etoc to \emph{not} use -for the first item the specified \meta{prefix} code.\footnote{With -versions earlier than |1.08| it had to be the very last token in -the \meta{start} code. It may now appear anywhere therein.} - -The command \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (new -with |1.08|) is a more flexible way to customize the \meta{prefix} -(and \meta{contents}) specifications. It executes the \meta{YES -CODE} branch if this is the first unit at that level (inside a -lower level) and the \meta{NO CODE} if not. This is a robust -command which survives to expansion (for example in an |enumitem| label). - -The variant \csb{etocxiffirst} does the same, but is expandable. -\end{otherlanguage} - - -\subsection{Der \csbhyp{etocnumber}-Befehl} -\label{etocnumber} - -Bis hierhin würde unsere Spezifikation die Nummerierung verwenden, die von der -|enumerate|-Umgebung generiert wird, jedoch möchten wir natürlich die in -der |.toc|-Datei deklarierten Nummern benutzen. Das kann man mit Hilfe des -\csb{etocnumber}-Befehls erreichen. Um die Bezeichnungen in die -|enumerate|-Auflistung zu bekommen, fährt man mit der Syntax -{\ttfamily label=\char32} des |enumitem|-Pakets fort: -\begin{verbatim} -\etocsetstyle{section} -{\begin{enumerate}[label=\etocnumber]} -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} -\end{verbatim} -Lieber als nur \csa{etocnumber} haben wir dann so etwas wie |\fbox{\etocnumber}| -benutzt. Dabei ist festzuhalten, dass \csa{etocnumber} ein robuster Befehl ist, -was erklärt, warum er in der Label-Spezifikation benutzt werden kann, ohne -|\protect| hinzuzufügen. - -\subsubsection{Der \csbhyp{etocifnumbered}-Schalter} -\label{etocifnumbered} -\label{etocxifnumbered} - -Die \csa{fbox} würde ein unästhetisches Ergebnis bringen im Fall eines nicht -nummerierten Abschnitts (welches beispielsweise im Inhaltsverzeichnis gelandet -ist mittels eines \csa{addcontentsline} Befehls).\footnote{Wie man sieht, wird -\csa{fcolorbox} verwendet wird statt \csa{fbox}. Aufgrund einer Neudefinition -- -durchgeführt vom |xcolor|-Paket-- haben wir \csa{fbox} verwendet (und nicht -|hyperref|), sonst hätten wir \csa{protect}\csa{fbox} benötigt.} - -Der \csb{etocifnumbered}\marg{A}\marg{B}-Befehl führt \meta{A} aus, wenn die -Nummer existiert, und \meta{B} falls nicht. Also benutzen wir es in dem Code, -welcher letztendlich für das |section|-Level gewählt wurde: -\begin{verbatim} -\etocsetstyle{section} -{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered - {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} -{\normalsize\bfseries\rmfamily\item} -{\etocname{} (page \etocpage)} -{\end{enumerate}} - -\etocsetstyle{subsection} -{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} -{\normalfont \item} -{\etocname{} (p.~\etocpage)} -{\end{enumerate}} -\end{verbatim} - -Wenn wir nur das |section|-Level geändert hätten und nicht das -|subsection|-Level, dann wäre ein Kompilierfehler aufgetreten, denn der -Paket-Stil für die "`subsections"' erwartet dann `im Vertikal-Modus' zu starten. -Ein zusätzliches \csa{par}-Token im \meta{contents}-Teil des |section|-Levels -hätte das behoben: |{...(page \etocpage)\par}|. - -\textbf{UEBERSETZUNG NOETIG} - -\begin{otherlanguage}{english} -The command \csb{etocifnumbered} is robust; \csb{etocxifnumbered} -(new with |1.08|) has the same effect but is expandable. -\end{otherlanguage} - -\subsection{Die Befehle \csbhyp{etocthename}, \csbhyp{etocthenumber} sowie -\csbhyp{etocthepage}} -\label{etocthename} -\label{etocthenumber} -\label{etocthepage} - -Es ist manchmal wünschenswert, Zugriff auf Name, Nummer und Seitenzahl zu haben, -ohne die hyperref-Daten: Ähnlich wie die *-Variante des \csa{ref}-Befehls, wenn -das |hyperref|-Paket verwendet wird. Beispielsweise könnte man den Wunsch haben, -eine Einheit oder Seitenzahl in einer Art numerischem Kontext verwenden zu -wollen oder seine Formatierung zu ändern. Diese Funktionalität wird von -\csb{etocthename}, \csb{etocthenumber} und \csb{etocthepage} bereitgestellt. - -Diese Befehle sind aber nicht geschützt, also sollten sie in veränderlichen -Kontexten (zum Beispiel Label-Beschreibungen mit vorangestelltem |\protect|) -verwendet werden. - - -\subsection{Der \csbhyp{etoclink}-Befehl} -\label{etoclink} - -Der Befehl \csb{etoclink}\marg{linkname} kann in Linienstil-Beschreibungen -benutzt werden, in ähnlicher Art und Weise wie die argumentlosen Befehle -\csa{etocname}, \csa{etocnumber} und \csa{etocpage}. Er erzeugt einen Link -(falls solch ein von |hyperref| zur |.toc|-Datei hinzugefügt wurde), dessen Ziel -der entsprechende Dokumentteil ist und dessen Name das angegebene Argument ist. -Daher ist |\etoclink{\eotcthename}| das ursprüngliche |\etocname|. Es ist darauf -zu achten, dass wenn |hyperref| nicht damit beauftragt wurde, die Seitenzahl mit -einem Link zu versehen (mittels seiner Option \emph{linktoc=all}), dann hat -\etoc's \csa{etocpage} auch keinen Link, |\etoclink{\etocthepage}| allerdings -schon. - -Der Befehl \csa{etoclink} ist robust. - -\subsection{Die Befehle \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber}, -\csbhyp{etocthelinkedpage} und \csbhyp{etocthelink}} -\label{etocthelinkedname} -\label{etocthelinkednumber} -\label{etocthelinkedpage} -\label{etocthelink} - -Das Folgende ist für fortgeschrittene Anwendungen von fortgeschrittenen -Benutzern. Das \csa{etocthename}-Makro wurde bereits schon einmal erwähnt; -verwendet man es in Anweisungen wie |\global\let\lastone\etocthename| in einem -\etoc line-Stil, definiert das Macro |\lastone| so, dass es sich ausbreitet bis -zum letzten Namen auf dem korrespondieren Level. Jedoch bestand bisher keine -Möglichkeit, dass Gleiche auch für die Link-Daten zu tun. - -Das in diesem Paket enthaltene \csa{etocthelinkedname} stellt dies nun zur -Verfügung, inklusive der Link-Daten. Es wurde in dieser Dokumentation benutzt -bei Erstellung der \hyperref[tocastree]{Beispiele mit Bäumen}. - -Ebenfalls bereit gestellt mit ähnlichen Funktionen: \csa{etocthelinkednumber}, -\csa{etocthelinkedpage} (welches nur einen Link enthält, wenn |hyperref| einen -zu dieser Seitenzahl hinzugefügt hat) und \csa{etocthelink}\marg{linkname}, -welches es erlaubt einen Link mit einem beliebigen Name zu erstellen. - -All diese Befehle sind \emph{nicht} robust. - -Beispiel\begingroup\ - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} - {\global\let\TmpEtocNumber\etocthelinkednumber - \global\let\TmpEtocName\etocthelinkedname - \global\let\TmpEtocPage\etocthelinkedpage } - {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ - (\emph{S. \TmpEtocPage})} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% - \texttt{enumitem}-Umgebung): }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup - -\begin{verbatim} -Beispiel\begingroup - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} - {\global\let\TmpEtocNumber\etocthelinkednumber - \global\let\TmpEtocName\etocthelinkedname - \global\let\TmpEtocPage\etocthelinkedpage } -% Obiges ist erforderlich, da \item, hier in itemize*, eine Gruppe schließt. - {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ - (\emph{S. \TmpEtocPage})} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% - \texttt{enumitem}-Umgebung): }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup -\end{verbatim} - -Mit \etoc |1.08| gibt es ein einfacher Weg zum gleichen Resultat: -\begin{verbatim} -Beispiel\begingroup\etocglobaldefs % <-- NEU mit etoc 1.08. - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} - {} - {\item [{\bfseries\etocthelinkednumber.}] - \etocthelinkedname\ (\emph{S. \etocthelinkedpage })} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% - \texttt{enumitem}-Umgebung): }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup -\end{verbatim} -Beispiel\begingroup\etocglobaldefs % <-- NEU mit etoc 1.08. - \etocsetstyle {section} - {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} - {} - {\item [{\bfseries\etocthelinkednumber.}] - \etocthelinkedname\ (\emph{S. \etocthelinkedpage })} - {\end{itemize*}.}% - \etocsetnexttocdepth {section}% - \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% - \texttt{enumitem}-Umgebung): }{}% - \etocinline\tableofcontents \ref{toc:globalcmds} -\endgroup - -\section{Der \csbhyp{etocsetlevel}-Befehl} -\label{etocsetlevel} - -Wie bereits in \autoref{part:surprising} erklärt, kann man \etoc mitteilen, -welches Level er mit einem bestimmten Abschnitts-Befehl assoziieren soll, -nämlich mit \csa{etocsetlevel}. Zum Beispiel: - -\begin{verbatim} -\etocsetlevel{cell}{0} -\etocsetlevel{molecule}{1} -\etocsetlevel{atom}{2} -\etocsetlevel{nucleus}{3} -\end{verbatim} -Im Kompatibilitäts-Modus wird davon ausgegangen, dass die Makros |\l@cell|, -\texttt{\textbackslash l@mo\-le\-cule}, \ldots\ entweder durch -den Benutzer oder von einer anderen Klasse definiert wurden: Nur |\etocsetlevel| -ist nicht genug, um auf dem korrespondierenden Pegel "`out-of-the-box"' zu -arbeiten. - -Jedoch, ist im Kompatibilitätsmodus kein Inhaltsverzeichnis gesetzt, dann ist -nur wichtig, dass die verschiedenen Linienstile gesetzt sind. -Wenn beispielsweise |section| auf Level |1| ist, dann muss man nicht mehr -\csa{etocsetstyle}|{molecule}{..}{..}{..}{..}| nach -\csa{etocsetstyle}|{molecule}{1}| aufrufen, da -\csa{etocsetstyle}|{section}{..}{..}{..}{..}| bereits -wirksam ist (und es wurde im Paket selbst in der Definition seines -Linienstils gesetzt). - -Die akzeptierten Level laufen von |-2| bis einschließlich |6|. Alles andere wird -auf |6| abgebildet, welches ein Dummy-Level ist und nie dargestellt wird. Das -Paket tut Folgendes: -\begin{verbatim} -\etocsetlevel{book}{-2} -\etocsetlevel{part}{-1} -\etocsetlevel{chapter}{0} -\etocsetlevel{section}{1} -\etocsetlevel{subsection}{2} -\etocsetlevel{subsubsection}{3} -\etocsetlevel{paragraph}{4} -\etocsetlevel{subparagraph}{5} -\end{verbatim} -Die benutzerdefinierten Stile von \etoc werden von \csa{etocdefaultlines} -aktiviert. Sie werden vom Haupt-Inhaltsverzeichnis dieses Dokuments dargestellt. -Die Level-Zuweisungen können jederzeit modifiziert werden: In -\autoref{part:surprising} sieht man verschiedene Anwendungen dieser Technik. - -Als ein weiteres Beispiel soll hier angeführt werden, wie das -\hyperref[toc:main]{Haupt-Inhaltsverzeichnis} dieses Dokuments gesetzt -wurde, nämlich mit den folgenden Instruktionen: -\begin{verbatim} -\etocsettocdepth {subsubsection} % set the initial tocdepth -\etocdefaultlines % use the package default line styles. At this early stage in - % the document they had not yet been modified by \etocsetstyle - % commands, so \etoctoclines could have been used, too. -\etocmarkboth\contentsname -\etocmulticolstyle[1] % one-column display - {\pdfbookmark[1]{Table of contents}{MAINTOC}% create a bookmark in the pdf - \noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} -\begingroup % use a group to limit the scope of the - \etocsetlevel{subsection}{3} % subsection level change. - \etocsetlevel{subsubsection}{4} % anything > tocdepth=3. - \tableofcontents \label{toc:main} -\endgroup -\end{verbatim} -Auf diese Art und Weise benutzen die "`subsections"' die Stile, die ursprünglich -für "`subsubsections"' vorgesehen waren, während diese gar nicht gedruckt -werden. Ohne diese Modifikation wäre das Erscheinungsbild ein anderes gewesen: -die Paketlinienstile sind dafür gedacht gewesen, in Dokumenten mit vielen vielen -"`subsubsections"' verarbeitet zu werden, in einem Zwei-Spalten-Layout, um -diesen ein kompakteres Ergebnis zu liefern als die -Standard-\LaTeX-Inhaltsverzeichnisse. Hier haben wir jedoch noch ein paar -"`subsubsections"', daher ist es interessanter, diese zu ignorieren und dafür -"`sections"` und "`subsections"' visuell unterschiedlich zu drucken. - -\section{Umfang der zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei gehörigen Befehle} - -\begingroup % pour \small et \MacroFont en particulier. -\small - -\subsection{Testen des Bereichs} - -Lasst uns zur Farbe Rot wechseln und außerdem diesen Befehl zur -|.toc|-Datei hinzufügen: - -\color{red!50} -\addtocontents{toc}{\string\color{red!50}} - -\def\MacroFont{\ttfamily \footnotesize\hyphenchar\font45 } -\begin{verbatim} - \color{red!50} % Ändern der Textfarbe - \addtocontents{toc}{\string\color{red!50}} % das Gleiche in der .toc-Datei -\end{verbatim} - - -\subsection{Dies ist eine (blass)rote Subsection zu Demonstrationszwecken} - -Gut, der Titel hier wurde schwarz dargestellt, was daran liegt, wie die -|scrartcl|-Klasse funktioniert (in der |article|-Klasse wäre er rot gewesen), -aber wir sind ohnehin mehr daran interessiert, wie er im Inhaltsverzeichnis -aussieht: Und tatsächlich ist er rot im -\hyperref[toc:main]{Haupt-Inhaltsverzeichnis} dieses Dokuments, genau so wie im -\hyperref[toc:a]{Inhaltsverzeichnis für diesen Abschnitt}. Beide Befehle -gehorchen wie erwartet dem |\color{red!50}|-Befehl, der in die |.toc|-Datei -geschrieben wurde. - -Aber lasst uns jetzt diese "`subsection"' beenden und eine "`section"' starten. - -\section{Bin ich auch rot?} - -Die Frage ist, ob es im Inhaltsverzeichnis erscheint: Die Antwort ist ja, es ist -rot im \hyperref[toc:main]{Haupt-Inhaltsverzeichnis} und nein es ist nicht rot -im \hyperref[toc:a]{Inhaltsverzeichnis für diesen Abschnitt}. Grund dafür ist, -dass der \meta{finish}-Code für dieses "`subsection"'-Level eine Gruppe -geschlossen hat, da es |\end{enumerate}| verwendet hat. - -Das zeigt noch einmal die Diskussion aus \autoref{ssec:limitations}. - -Die standardmäßigen Paket-line-Stile beinhalten keine Gruppen-Öffnung- und -Schliess-Befehle: Die Gültigkeit eines Befehls in der |.toc|-Datei wird also -solange bestehen, bis er explizit durch einen weiteren Befehl wieder rückgängig -gemacht wird. - -\begin{verbatim} - \normalcolor - \addtocontents{toc}{\string\normalcolor} -\end{verbatim} -\endgroup - -\normalcolor -\addtocontents{toc}{\string\normalcolor} - -Zurück zu Schwarz. Man beachte das diese Bereichsprobleme auch in mehrsprachigen -Dokumenten auftauchen, da das |babel|-Paket auftretende Sprachänderungen -ebenfalls in die |.toc|-Datei schreibt. - - -\clearpage -\etocdepthtag.toc {globalcmds} - -\part{Befehle für den toc-Display-Stil} -\label{part:globalcmds} - -\thispartstats - -\etocsettocstyle{}{} -\etocstandardlines -\localtableofcontents \label{toc:globalcmds} - - -\section{Festlegung des toc-Display-Stils} - - -Der \emph{toc display}-Stil gibt an, ob das Inhaltsverzeichnis mit mehreren -Spalten erscheint oder nur mit einer, ob der Titel gesetzt ist wie in der -|article|- oder |book|-Klasse, oder ob er über den Einträgen zentriert sein -soll, mit Regeln an der Seite, oder ob das gesamte Inhaltsverzeichnis in einen -Rahmen gepackt werden soll. Entscheidet man sich bspw. für eine einheitliche -Überschrift und ein Ein-Spalten-Layout, so verwendet man dafür folgende Befehle: -\begin{verbatim} -\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents) -shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title}) -\end{verbatim} - -\subsection{Der Befehl \csbhyp{etocsettocstyle}} -\label{etocsettocstyle} - -Dies ist ein Befehl mit zwei notwendigen Argumenten: -% -\centeredline{\csb{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}} -% -Der \marg{before\_toc}-Teil ist verantwortlich für den Schriftsatz der -Überschriften, so kann er beispielsweise etwas sein wie -\starit{section}|{\contentsname}|. - -Generell gesprochen, sollte diese Überschrift \TeX{} im "`Vertikal-Modus"' -lassen, wenn der eigentliche Schriftsatz des Inhalts beginnt: die Linienstile -(entweder von den Standardklassen oder den Paketlinenstilen) erwarten alle im -`Vertikal-Modus' zu starten. - -Das erste Argument von \csb{etocsettocstyle} kann auch Instruktionen beinhalten, -um die Seitenüberschriften zu markieren. Oder es kann prüfen (|book|-Klasse), ob -der Zwei-Spalten-Modus eingeschaltet ist, um dann zum Ein-Spalten-Modus zu -wechseln. Der \meta{after\_toc}-Teil würde dann wieder den Ein-Spalten-Modus -aktivieren. - -Die im Folgenden beschriebenen Befehle \csb{etocmulticolstyle}, -\csb{etocruledstyle} und \csb{etocframedstyle} rufen alle \csa{etocsettocstyle} -als Subroutine auf, um eine \texttt{Mehr\-spalten}-Umgebung mit Hilfe von -\marg{before\_toc} zu starten, welche mit \marg{after\_toc} wieder geschlossen -wird. - -\subsection{Die Befehle \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol} und -\csbhyp{etoclocalmulticol}} -\label{etocmulticolstyle} -\label{etocmulticol} -\label{etoclocalmulticol} - -Dies ist ein Befehl mit einem optionalen und einem notwendigen Argument: -% -\centeredline{\csb{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}} -% -Die -\oarg{number\_of\_coloumns} können von 1 bis 10 gehen (default: 2; ist der Wert -1, so wird natürlich keine |multicols|-Umgebung angelegt). Das \meta{heading} -wird typischerweise `vertikaler' Art sein, also wie: \meta{heading} = -|\section*|\marg{title}, aber man kann auch horizontale Dinge realisieren wie -|\fbox{Hallo Welt}| (\etoc fügt automatisch ein |\par| ans Ende des -"`heading"'-Arguments von \csb{etocmulticolstyle}). Hier ist einmal exemplarisch -dargestellt, wie das Haupt-Inhaltsverzeichnis dieses Dokuments konfiguriert -wurde: -\begin{verbatim} -\etocmulticolstyle{\noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} -\end{verbatim} -Nach \csa{etocmulticolstyle} haben alle zukünftigen \csa{tableofcontents} den -spezifizierten Stil, falls es zwischendurch nicht mehr geändert wird. Eine -kürzere Variante für nur ein Inhaltsverzeichnis ohne Einfluss auf spätere ist: -\centeredline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} oder -\centeredline{\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}.} - -\subsubsection{Der Befehl \csbhyp{etoctocstyle}} -\label{etoctocstyle} - -\centeredline{\csb{etoctocstyle}\oarg{kind}% -\marg{number\_of\_columns}\marg{title}} -\centeredline{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% -|{\kind*{|\itshape title\upshape|}}|} -Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Standardwert ist -|chapter| oder |section|, abhängig von der Dokumentklasse. - -\paragraph{\texorpdfstring{\csbhyp{etoc\-toc\-style\-with\-marks}}{etoctocstylewithmarks}}% -\leavevmode\unskip{\color{blue}\oarg{kind}\marg{number\_of\_columns}\marg{title}\marg{mark}} -\label{etoctocstylewithmarks} -\label{etoctocstylewithmarksnouc} - -\centeredline -{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% -|{\kind*{|\itshape title \ttfamily\upshape\string\markboth% -|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|} -Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Die wirkliche Anzeige der -Markierungen ("`marks"') hängt vom Seitenstil ab. Es gibt die Variante -\csb{etoctocstylewithmarksnouc}, welche Großschreibung unterdrückt. - -\paragraph{Möchten wir wirklich pargraph-Einträge im Inhaltsverzeichnis?} - -\paragraph{Wirklich?} - -\subsection{Die Befehle \csbhyp{etocruledstyle}, \csbhyp{etocruled} und - \csbhyp{etoclocal\-ruled}} -\label{etocruledstyle} -\label{etocruled} -\label{etoclocalruled} - -Das generelle Format von \csa{etocruledstyle} ist: -\centeredline{\csb{etocruledstyle}% - \oarg{number of columns}\marg{title of the toc}} -\noindent -Der Titel ist horizontales Material (der |LR|-Modus von \emph{\LaTeX{}, ein -Dokument-Vorbereitung-System,}): wenn es nicht in eine Zeile passt, dann sollte -es in eine \csa{parbox} mit einer gegebenen Weite geschrieben werden. Der grüne -Rahmen für die Überschrift des Inhaltsverzeichnisses zu \hyperref[toc:a]{Beginn -des zweiten Teils dieses Dokuments} wurde erzeugt durch: -\begin{verbatim} -\etocruledstyle[1]{\etocfontminusone\color{green}% - \fboxrule1pt\fboxsep1ex - \framebox[\linewidth] - {\normalcolor\hss Contents of this part\hss}} -\end{verbatim} - -Eine kürzerer Weg den Stil zu setzen mit \csb{etocruledstyle} und dann einen -\csa{tableofcontents} zu erstellen, alles zusammen in einer Gruppe damit -zukünftige Inhaltsverzeichnisse nicht betroffen sind, ist: -\centeredline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}} - -\subsection{Die Befehle \csbhyp{etocframedstyle}, \csbhyp{etocframed} -und \csbhyp{etoclocal\-framed}} -\label{etocframedstyle} -\label{etocframed} -\label{etoclocalframed} - -Die gleiche Arbeitsweise: -% -\centeredline{\csb{etocframedstyle}\oarg{number\_of\_columns}\marg{title}} -und die passende Abkürzung: -% -\centeredline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} -Diese wird -verwendet, wenn man nicht den Stil zukünftiger Inhaltsverzeichnisse modifizieren -will (eine ändere Möglichkeit wäre es, das Ganze in Klammern zu packen oder -innerhalb eines |\begingroup...\endgroup|; es gibt auch noch einen -\csa{etoclocalframed} für ein lokales Inhaltsverzeichnis). - -Das gesamte Inhaltsverzeichnis ist eingerahmt. Der Titel selbst aber nicht: -Möchte man das erreichen, dann muss man das im \meta{title}-Argument mit -\csa{etocframedstyle} oder \csa{etocframed} festhalten. Die Farben für den -Hintergrund und der anderen Komponenten (oben, links, rechts, unten) des Rahmens -sind festgelegt mittels geeigneter |\renewcommand|'s (siehe -\autoref{ssec:customdisplay}). - -Eine |minipage| wird benutzt, von daher ist das produzierte Inhalsverzeichnis -nicht kompatibel mit Seitenumbrüchen. Um diese zu erlauben, wird empfohlen, die -Befehle -\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}} -oder -\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}} -in den Argumenten von \csb{etocsettocstyle} zu verwenden. - -Beispiele in diesem Dokument findet man auf den Seiten \pageref{toc:d}, -\pageref{toc:floating}, \pageref{toc:b} und \pageref{toc:clone}. - -\subsection{Überschriften, Titel, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}} -\label{etocinnertopsep} -\label{etocoldpar} - -Das für \csb{etocmulticolstyle} notwendige \meta{heading}-Argument kann entweder -Vertikal-Modus-Material sein wie |\section*{\emph{Inhaltsverzeichnis}}| oder die -horizontale Variante wie das einfache |\etocmulticolstyle{Hallo Welt}|. - -Es kann kein explizites |\par| oder eine Leerzeile in das notwendige Argument -von \csb{etocmulticolstyle} eingefügt werden, aber \etoc stellt \csb{etocoldpar} -als Ersatz bereit: Es fügt |\let\etocoldpar\par| vor der |multicols|-Umgebung -ein und eben dieses |\etocoldpar|\footnote{Dieser Befehl \csa{etocoldpar} (= -funktionierendes \csa{par} im Argument von \csa{etocmulticolstyle}) ist nicht -verwandt mit dem Schalter \csb{etocinline}, dessen Zweck es ist \etoc -mitzuteilen, kein \csa{par} vor dem Inhaltsverzeichnis auszuführen.} am Ende der -Überschrift ein, und macht dann noch einen vertikalen Sprung der Größe -\csa{etocinnertopsep}. - -Auf der anderen Seite erwarten die Befehle \csb{etocruledstyle} und -\csb{etocframedstyle} ein Argument im "`LR-Modus"' (um die Terminologie von -\emph{\LaTeX, a document preparation system} zu nutzen). Das bedeutet, dass -mehrzeilige Titel nur möglich sind, wenn man sie in etwas wie eine \csa{parbox} -einschließt. - -Eine wichtige Größe verwendet von sowohl \csb{etocmulticolstyle}, -\csb{etocruledstyle} als auch \csb{etocframedstyle} ist \csb{etocinnertopsep}. -Es gibt an, wieviel Platz zwischen den Überschriften und dem Start des Inhalts -liegen soll. Der Default-Wert ist |2ex| und man kann es mittels -|\renewcommand*{\etocinnertopsep}|\marg{neuer\_Wert} ändern, nicht mit -|\setlength|. - -\subsection{Der Kompatibilitätsmodus \csbhyp{etocstandarddisplaystyle}} -\label{etocstandarddisplaystyle} - -\etoc wird dann das emulieren, für was eigentlich die Dokument-Klasse -verantwortlich ist, in Bezug auf den globalen Display-Stil des -Inhaltsverzeichnisses. Allen Änderung von innerhalb der Klasse sollten -berücksichtigt werden. - -\subsection{Der Befehl \csbhyp{etoc\-inline}} -\label{etocinline} -\label{etocnopar} -\label{etocdisplay} - -Mit \csb{etocinline} oder seinem Synonym |\etocnopar|, von dem -|\tableofcontents|-Befehl und seinen Varianten werden \emph{nicht} zuerst ein -|\par| erstellt, um den vorherigen |paragraph| zu schließen. Von daher kann man -das Inhaltsverzeichnis in einem Inline-Stil darstellen; oder, wenn nur gebraucht -um eine Token-Liste bzw. ein Makro vorzubereiten, wird es bei der Ausführung -nichts im Token-Stream hinterlassen. - -% JFBU: -Mit \csb{etocdisplay} werden (nochmal) von dem |\tableofcontents|-Befehl und -seinen Varianten zuerst ein |\par| erstellt. - -\section{Gesternde Varianten des \csbhyp{tableofcontents} etc. Befehls} -\label{tableofcontents*} -\label{localtableofcontents*} -\label{etocbeforetitlehook} -\label{etocaftertitlehook} -\label{etocaftercontentshook} -\label{etocmemoirtoctotocfmt} - -Die Befehle \toc, \localtoc, \csa{etocmulticol} und all ihre Cousins und -Varianten haben Stern-Varianten (der Stern muss vor den anderen Argumenten -kommen). Für alle Klassen außer |memoir| verhalten diese sich wie die Originale. -Für |memoir| jedoch, schreibt das Original einen Eintrag in die |.toc|-Datei, -genau so wie die Verwendung des echten \toc Befehls in dieser Klasse, während -aber die Stern-Variante genau das nicht tut, wie es in |memoir| die Regel ist. - -Sobald man damit beginnt, lokale Inhaltsverzeichnisse zu benutzen merkt man, -dass der |memoir|-Standard, welcher dazu gedacht ist, einen |chapter|-Eintrag -für jedes Inhaltsverzeichnis zu erzeugen, nicht praktisch ist. Der Befehl -\csb{etocmemoirtoctotocfmt}\marg{Typ}\allowbreak\marg{name} ändert das Format -(\meta{Typ} ist wieder |chapter|, |section|, |subsection| etc. und \meta{name} -kann bspw. \csa{contentsname} sein.) Die Standardwerte für diese Größen sind -|chapter| und |\contentsname|. - -Das Format der tatsächlichen Überschrift des Inhaltsverzeichnisses sollte -ebenfalls ordnungsgemäß gesetzt werden (z.\,B. mit \csa{etoctocstyle}), um -einfach die selbe Einheitsgröße zu nutzen wie im ersten Argument von -\csa{etocmemoirtoctotocfmt}. - -Eine ungewöhnliche Situation tritt auf, wenn man zwei aufeinanderfolgende -\csa{localtableofcontents} hat (offensichtlich ist das eine nicht sehr -wahrscheinliche Situation), direkt nach einem \csa{part} zum Beispiel. Der erste -würde dann eine Kapitelüberschrift erzeugen (wenn der Standard nicht geändert -wurde, wie oben angedeutet), welche in die |.toc|-Datei geschrieben werden -würde. Das zweite Inhaltsverzeichnis denkt dann, es ist ein lokales zu diesem -Kapitel gehörig und würde aus diesem Grund nichts darstellen. Die Lösung für -dieses Problem ist es, das zweite als Klon des ersten zu definieren. - -Unabhängig von der Situation hat man bei der |memoir|-Klasse immer ein -Hook-Makro namens \csb{etocaftertitlehook}, welches man unterdrückt, indem man -die Stern-Varianten der Darstellungsbefehle nutzt. Außer für die |memoir|-Klasse -ist dieser Hook dazu gedacht, überhaupt nichts zu tun. - -Außerdem gibt es noch \csb{etocaftercontentshook}, ähnlich definiert, um -nichts zu tun. Es gibt auch \csb{etocbeforetitlehook}: es ist definiert -um nichts zu tun. Beide können für einige spezielle Effekte genutzt -werden. - - -\section{Das In\-halts\-ver\-zeic\-hnis von die\-sem Teil} - -\subsection{Über\-prü\-fen des Kom\-pa\-tibilitäts\-modus} - -Als drittes Beispiel wollen wir nun das Inhaltsverzeichnis dieses Teils setzen. -Dazu wollen wir zuerst den Kompatibilitätsmodus testen.\footnote{Dieses -Dokument wurde als |scrartcl| gesetzt. Wir wollen nun testen, ob -der Kompatibilitätsmodus des \etoc-Pakets die Anpassungen innerhalb der -Klassenbefehle umsetzt.} Das ursprüngliche Inhaltsverzeichnis ist -unsichtbar und wurde am Anfang von \autoref{part:globalcmds} definiert, -wobei es mit einem Label versehen wurde. -\begin{verbatim} -\KOMAoptions{toc=left} -\etocstandarddisplaystyle % wird benötigt, damit toc=left gilt -\etocstandardlines -\tableofcontents \ref{toc:globalcmds} -\end{verbatim} -\KOMAoptions{toc=left} -\etocstandarddisplaystyle -\etocstandardlines -\tableofcontents \ref{toc:globalcmds} - -\subsection{Ein In\-halts\-ver\-zeich\-nis mit Rahmen} - -Als nächstes wollen wir ein gerahmtes Inhaltsverzeichnis erzeugen, wobei wir den -vom Paket vorgegebenen Linienstil nutzen und ein paar Farben hinzufügen wollen. -(Es wurde in eine Float-Umgebung eingefügt, die man \vpageref{toc:b} -findet.)\footnote{Innerhalb der |figure|-Umgebung und vor dem gerahmten -Inhaltsverzeichnis, welches die Option |multicols| nutzt, haben wir den Befehl -\csa{normalcolor} eingefügt, um einen Bug zu umgehen, der durch die Interaktion -zwischen |multicols|, |color| und der |figure|-Umgebung entsteht. (Wir brauchen -den Befehl \csa{color\{red\}} in der |.toc|-Datei.) Der Fehler wird nicht durch -das \etoc-Paket verursacht.} - -\begin{verbatim} -\etocdefaultlines -\begingroup -\renewcommand{\etoccolumnsep}{2em} -\renewcommand{\etocinnerleftsep}{1.5em} -\renewcommand{\etocinnerrightsep}{1.5em} -% Befehle für die Hintergrundfarbe des Inhaltsverzeichnisses -\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} -% Befehle für die Rechtecke vor und nach dem Inhalt des Verzeichnisses -\renewcommand{\etoctoprule}{\hrule height 1pt} -\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} -\renewcommand{\etocbottomrule}{\hrule height 1pt} -\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} -% Befehle für die Rechtecke links und rechts des Inhaltsverzeichnisses -\renewcommand{\etocleftrule}{\vrule width 5pt} -\renewcommand{\etocrightrule}{\vrule width 5pt} -\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} -\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} -% mit \fcolorbox legen wir einen farbigen Rahmen für den Titel an -\fboxrule1pt -\renewcommand{\etocbelowtocskip}{0pt\relax} -\etocframedstyle {\normalsize\rmfamily\itshape - \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering - Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches - jedoch nur die Abschnitte und Unterabschnitte dieses Teils - enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite. - Es hat das Label |toc:b|.}}} -\begin{figure}[ht!] - \centering -\normalcolor % Workaround für einen Bug von color und multicols (und figure) -\tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure} -\endgroup -\end{verbatim} - - -\etocdefaultlines -\begingroup -\renewcommand{\etoccolumnsep}{2em} -\renewcommand{\etocinnerleftsep}{1.5em} -\renewcommand{\etocinnerrightsep}{1.5em} -% specify a background color for the toc contents -\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} -% set up the top and bottom rules -\renewcommand{\etoctoprule}{\hrule height 1pt} -\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} -\renewcommand{\etocbottomrule}{\hrule height 1pt} -\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} -% set up the left and right rules -\renewcommand{\etocleftrule}{\vrule width 5pt} -\renewcommand{\etocrightrule}{\vrule width 5pt} -\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} -\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} -% use \fcolorbox to set up a colored frame for the title -\fboxrule1pt -\renewcommand{\etocbelowtocskip}{-.5\baselineskip\relax} -\etocframedstyle {\normalsize\rmfamily\itshape - \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering - Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches - jedoch nur die Abschnitte und Unterabschnitte dieses Teils - enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite. - Es hat das Label |toc:b|.}}} -\begin{figure}[ht!] - \centering -\normalcolor % work-around to a bug involving color and multicols (and figure) -\tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure} -\endgroup - -% Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le -% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder -% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle -% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie -% donc un problème d'interaction avec multicol là. à voir. Pas le temps -% maintenant. - -% 2013/10/14 -% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec -% etoc: -% http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure -% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor -% _avant_ le multicols à l'intérieur de figure - -\subsection{Eine (verrückte) In\-line-Dar\-stellung} - -Nun wollen wir eine etwas verrückte Inline-Darstellung erzeugen, womit das -Inhaltsverzeichnis des gesamten Dokuments gesetzt werden soll. Hier werden die -Unterabschnitte als Fußnoten dargestellt. Diese Art der Darstellung bietet sich -eher für verlinkte Dokumente an, weniger für gedruckte! (Mir hingegen gefällt -diese Art der Darstellung, obwohl mein Geschmack scheinbar oft nicht geteilt -wird.) - -%%%% Note: 27 april 2014 - -%%%% except for a miraculous situation depending from the quantity of previous -%%%% material this TOC will have links extending accross pagebreaks, which -%%%% dvipdfmx does not know how to handle completely. Apart from that the output -%%%% is ok, thus no need to try seriously to avoid them. - -\begingroup -\newsavebox{\forsubsections} -\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} -\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} -\etocsetstyle{subsection} - {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} - {; } - {\etocname} - {\end{lrbox}\footnote{\unhbox\forsubsections.}} -\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} - {, }{\etocname}{\/\upshape)} -\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par} -\tableofcontents \label{toc:crazyinline} -\endgroup - -Zur Erzeugung dieses Inhaltsverzeichnisses wurde folgender Code genutzt: -\begin{verbatim} -\begingroup -\newsavebox{\forsubsections} -\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape} - {\bfseries\etocname:~~}{} -\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, } - {\mdseries\etocname}{} -\etocsetstyle{subsection} - {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} - {; }{\etocname}{\end{lrbox}\footnote{\unhbox\forsubsections.}} -\etocsetstyle{subsubsection} - { (\itshape\etocskipfirstprefix}{, }{\etocname}{\/\upshape)} -\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par} -\tableofcontents -\endgroup -\end{verbatim} - - -\clearpage -\etocdepthtag.toc {custom} - -\part{\etoc nutzen und an\-passen} -\label{part:custom} -\thispartstats - -\etocdefaultlines -\renewcommand{\etoctoprule}{\hrule height2pt depth0pt} -\renewcommand{\etoctoprulecolorcmd}{\color{red}} - -\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}% - \fbox{\parbox{.8\linewidth}{\centering\normalcolor Dies ist das - Inhaltsverzeichnis mit den Abschnitten und Unterabschnitten von - diesem Teil. Es hat das Label |toc:c|.}}} - -\localtableofcontents \label{toc:c} - -\section{Über\-blick über die Grund\-befehle zur Stil\-bearbeitung} - -\subsection{Ein lokales Inhalts\-ver\-zeich\-nis an\-passen} -\hbox{\color{green}\fboxrule1pt\fboxsep1em -\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links}}% -\framebox[\linewidth][c] -{\vbox{\hsize\wd0\normalcolor\noindent -\csa{etocsetstyle}\marg{Name der Ebene}% - \marg{Start}\marg{Präfix}\marg{Inhalt}\marg{Abschluss}\\ -\csa{etocname}, \csa{etocnumber}, \csa{etocpage}, -\csa{etocifnumbered}\marg{A}\marg{B}\\ -\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links} -}}} - -\subsection{Das Aus\-sehen eines Inhalts\-ver\-zeichnisses an\-passen} -\medskip -\hbox{\color{green}\fboxrule1pt\fboxsep 1em -\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{Ebene}% -\marg{Anzahl der Spalten}\marg{Titel}\marg{Symbol}}% -\framebox[\linewidth][c] -{\vbox{\hsize\wd0 -\normalcolor\noindent -\csa{etocmulticolstyle}\oarg{Anzahl der Spalten}\marg{Überschrift}\\ -\csa{etoctocstyle}\oarg{Ebene}\marg{Anzahl der Spalten}\marg{Titel}\\ -\csa{etoctocstylewithmarks}\oarg{Ebene}\marg{Anzahl der Spalten}% -\marg{Titel}\marg{Symbol}\\ -\csa{etoctocstylewithmarksnouc}\oarg{Ebene}\marg{Anzahl der Spalten}% -\marg{Titel}\marg{Symbol}\\ -\csa{etocruledstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\ -\csa{etocframedstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\ -\csa{etocsettocstyle}\marg{vor dem Inhaltsverzeichnis}\marg{nach dem Inhaltsverzeichnis}}}} - -\subsection{In\-halts\-ver\-zeich\-nisse dar\-stellen} -\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em - \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, - \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% - \framebox[\linewidth][c] - {\vbox{\hsize\wd0\normalcolor\noindent - \toc\\ - \localtoc\\ - \csa{etocmulticol}\oarg{Anzahl der Spalten}\marg{Überschrift}\\ - \csa{etoclocalmulticol}\oarg{Anzahl der Spalten}\marg{Überschrift}\\ - \csa{etocruled}\oarg{Anzahl der Spalten}\marg{Titel}\\ - \csa{etoclocalruled}\oarg{Anzahl der Spalten}\marg{Titel}\\ - \csa{etocframed}\oarg{Anzahl der Spalten}\marg{Titel}\\ - \csa{etoclocalframed}\oarg{Anzahl der Spalten}\marg{Titel}\\ - \hbox{}{\itshape\ttfamily\ \ \ \ und die mit Sternchen versehenen Varianten} - }}} - -\subsection{Label und Referenzen} - -Optional dürfen die Befehle für Label oder Referenzen auf die Befehle, die die -Darstellung des Inhaltsverzeichnisses realisieren, folgen. Hierbei ist -unwichtig, ob letztere mit Sternchen versehen sind oder nicht.\par - -\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em - \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, - \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% - \framebox[\linewidth][c] - {\vbox{\hsize\wd0\normalcolor\noindent - \toc \csa{label}|\{toc:here\}|\\ - \toc \csa{ref}|\{toc:far\}| \\ - \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ - \localtoc \csa{label}|\{toc:here\}|\\ - \hbox{}{\itshape\ttfamily\ \ \ \ \ }% - \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich} - }}} - - -\medskip Ein \csa{ref}-Befehl, der auf einen Befehl zur Erzeugung eines lokalen -Inhaltsverzeichnisses folgt, hat \emph{keinen} Einfluss auf diesen. Wird ein -anderes Inhaltsverzeichnis erneut dargestellt, so wird nur dessen Inhalt -angepasst. Sowohl das Aussehen des Inhaltsverzeichnisses als auch die -Darstellung seiner Linien orientieren sich an dem, das gerade definiert wurde -und nicht an dem, von dem der Inhalt übernommen wurde. - -\section{Der Linien\-standard des Pakets: \csbhyp{etoc\-defaultlines}} -\label{etocdefaultlines} - -Die Linienstile stammen bereits aus einer frühen Entwicklungsphase des Pakets, -weswegen sie sich noch sehr an \TeX{} orientieren und dadurch gruselig aussehen. -Daher bieten sie keinen guten Einstiegspunkt. Oft muss man, will man an dem Stil -etwas ändern, diesen aus dem Quellcode kopieren und direkt bearbeiten. Trotzdem -soll in diesem Abschnitt erläutert werden, wie die Schriftarten, die vertikalen -Abstände, etc. des gewählten Linienstils verändert werden können. - -Wurden die vorgegebenen Linienstile nicht durch \csa{etocsetstyle} verändert, so -kann man sie mit den Befehlen \csa{etocdefaultlines} bzw. \csa{etoctoclines} -einschalten. Außer, dass der Einzug eines Unterabschnitts etwas kleiner ist als -der eines Abschnitts, gleichen sich beide Gliederungsebenen. (Wie dieses -Dokument zeigt, werden Abschnitte in Dokumentklassen, denen der Befehl -\csa{chapter} fehlt, stets mit einer fettgedruckten Type gesetzt.) -Unter-Unterabschnitte werden inline, im selben Paragraphen und ohne Nummer oder -Seitenzahl dargestellt. Dieser Stil wurde für Dokumente, die viele -Unter-Unterabschnitte enthalten, entwickelt und anschließend mit solchen -getestet. Für derartige Dokumente sollte ein zweispaltiges Layout verwendet -werden, da diese Darstellung kompakter ist als jene, die standardmäßig durch -\LaTeX{} erzeugt wird.\footnote{Außerdem werden dadurch einzelne Teil- bzw. - Kapiteleinträge am Ende einer Seite oder einer Spalte vermieden, solange diese - weiter untergliedert sind.} Verwendet man hingegen ein einspaltiges Layout und -enthält der Teil nur wenige Unter-Unterabschnitte, so wird das -Inhaltsverzeichnis im Vergleich zur mit \LaTeX{} gesetzten Variante etwas in die -Breite gezogen. Weiterhin wirkt diese Darstellung weniger hierarisch als der -\LaTeX{}-Standard, da sich die Darstellung von Abschnitten und Unterabschnitten -kaum unterscheidet. (Dies gilt besonders, wenn die Dokumentklasse den Befehl -\csa{chapter} erlaubt.) - -Da wir für das \hyperref[toc:main]{zentrale Inhaltsverzeichnis} -|\etocsetlevel{subsection}{3}| gesetzt haben, werden die Unterabschnitte und die -Unter-Unterabschnitte inline dargestellt. - -Im Gegensatz dazu wollen wir nun das zentrale Inhaltsverzeichnis so darstellen, -als ob wir eine Dokumentklasse genutzt hätten, die den Befehl \csa{chapter} -erlaubt. Daher werden die Abschnitte im Folgenden als Kapitel und die -Unterabschnitte als Abschnitte gedruckt, was wir u. a. mit Hilfe des Befehls -\csa{etocsetlevel} erreichen. Zusätzlich nutzen wir für Abschnitte, welche in -Wirklichkeit unsere Unterabschnitte sind, statt der fetten Serie einer -Schriftart die halbfette Variante. Hierfür modifizieren wir den Befehl -\csa{etocfontone}. Weiterhin nutzen wir einen gepunkteten Einzug, da dieser -weniger Platz einnimmt als der Paketstandard. - -\begin{verbatim} -\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape - \fbox{\parbox{.6\linewidth}{ - \leftskip 0pt plus .5fil - \rightskip 0pt plus -.5fil - \parfillskip 0pt plus 1fil - Dies ist das zentrale zweispaltige Inhaltsverzeichnis, das den - Standardlinienstil von \etoc nutzt, wobei die Abschnitte wie Kapitel und die - Unterabschnitte wie Abschnitte gesetzt wurden. }}} -\etocdefaultlines -\etocsetnexttocdepth{1} -\begingroup -\etocsetlevel{section}{0} -\etocsetlevel{subsection}{1} -\renewcommand*{\etocfontone}{\normalfont \normalsize} -\renewcommand*{\etoctoclineleaders} - {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} -\sloppy -\tableofcontents -\endgroup -\end{verbatim} - -\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape - \fbox{\parbox{.6\linewidth}{ - \leftskip 0pt plus .5fil - \rightskip 0pt plus -.5fil - \parfillskip 0pt plus 1fil Dies ist das zentrale zweispaltige - Inhaltsverzeichnis, das den Standardlinienstil von \etoc nutzt, wobei die - Abschnitte wie Kapitel und die Unterabschnitte wie Abschnitte gesetzt - wurden. }}} - -\etocdefaultlines -\etocsetnexttocdepth{1} - -\begingroup -\etocsetlevel{section}{0} -\etocsetlevel{subsection}{1} -\renewcommand*{\etocfontone}{\normalfont \normalsize} -\renewcommand*{\etoctoclineleaders} - {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} -\sloppy -\tableofcontents -\endgroup - -\section{\etoc individuell an\-passen} - -\subsection{Den durch \etoc vor\-de\-finierten Linien\-stil individualisieren} - -Im Folgenden sollen einfach die wichtigsten Befehle des Pakets aufgelistet werden. Man kann diese -bequem mittels \csa{renewcommand} anpassen: -\begin{verbatim} -\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries} -\newcommand*\etocfontminusone{\normalfont \large \bfseries} -\newcommand*\etocfontzero{\normalfont \large \bfseries} -\newcommand*\etocfontone{\normalfont \normalsize \bfseries} -\newcommand*\etocfonttwo{\normalfont \normalsize} -\newcommand*\etocfontthree{\normalfont \footnotesize} - -\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex} -\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} -\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} -\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} -\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} -\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} - -\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil} -\newcommand*\etocminustworightmargin{1.5em plus -0.5fil} -\newcommand*\etocminusoneleftmargin{1em} -\newcommand*\etocminusonerightmargin{1em} - -\newcommand*\etocbaselinespreadminustwo{1} -\newcommand*\etocbaselinespreadminusone{1} -\newcommand*\etocbaselinespreadzero{1} -\newcommand*\etocbaselinespreadone{1} -\newcommand*\etocbaselinespreadtwo{1} -\newcommand*\etocbaselinespreadthree{.9} -\newcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} -\newcommand*\etocabbrevpagename{p.~} % muss der Sprache angepasst werden - % deutsche Nutzer: \renewcommand*\etocabbrevpagename{S.~} -\newcommand*\etocpartname{\partname} -\newcommand*\etocbookname{Book} % muss der Sprache angepasst werden -\end{verbatim} - -Der Standardlinienstil kann innerhalb der \etoc-Umgebung nicht individualisiert -werden. Wie bereits erwähnt, wird das Paket nach Aufruf des Befehls -\etocstandardlines kaum verwendet und agiert lediglich auf globaler Ebene, -sodass die Einträge des Inhaltsverzeichnisses (hoffentlich) so dargestellt -werden, als ob das Paket \etoc fehlen würde.\footnote{Innerhalb der - KOMA-script-Klassen muss der Befehl \csa{etocstandarddisplaystyle} genutzt - werden, damit die Option |toc=left| auch für die Linieneinträge gilt.} - -Wurde mittels \csa{etocsetlevel} die Tiefe der Gliederung soweit herabgesetzt, -dass \etoc die Befehle für bestimmte Gliederungsebenen kennt, so wirkt der -Kompatibilitätsmodus, also \csa{etocstandardlines}, auch auf diese. Dies gilt -natürlich nur für Gliederungsbefehle, die dem Standard von \LaTeX{} entsprechen -und die alle Definitionen liefern, welche zum Darstellen von Einträgen im -Inhaltsverzeichnis benötigt werden. (Es muss ein Makro der Art \csa{l@irgendwas} -existieren.) - -Sobald der Befehl \csa{etocsetstyle} aufgerufen wird, wird zusätzlich der -Kompatibilitätsmodus ausgeschaltet. Es spielt hierbei keine Rolle, ob der Befehl -in der Präambel oder im Hauptteil des Dokuments steht. - -\subsection{Die Dar\-stellung eines Inhalts\-ver\-zeich\-nisses an\-spassen} -\label{ssec:customdisplay} - -Erneut wollen wir uns darauf beschränken die relevanten Makros aufzulisten, da -deren Funktion aus ihrem Namen ableitbar ist. Soll die Länge eines Befehls -verändert werden, so muss der entsprechende Befehl mittels \csa{renewcommand} -und nicht durch \csa{setlength} verändert werden. Weiterhin erlauben Befehle, -welche die Farbe verändern, nicht nur die Standardfarben. Will man ihr Verhalten -ändern, so muss man in der neuen Definition den Befehl \csa{color} aufrufen. Um -ihre Wirkung zu beenden, muss man sie so neu definieren, dass sie danach nur den -Befehl \csa{relax} enthalten. -\begin{verbatim} -\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex} -\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex} - -\newcommand*\etoccolumnsep{2em} -\newcommand*\etocmulticolsep{0ex} -\newcommand*\etocmulticolpretolerance{-1} -\newcommand*\etocmulticoltolerance{200} -\newcommand*\etocdefaultnbcol{2} -\newcommand*\etocinnertopsep{2ex} -\newcommand*\etoctoprule{\hrule} -\newcommand*\etoctoprulecolorcmd{\relax} - -% nur für gerahmte Inhaltsverzeichnisse: -\newcommand*\etocinnerleftsep{2em} -\newcommand*\etocinnerrightsep{2em} -\newcommand*\etocinnerbottomsep{3.5ex} - -\newcommand*\etocleftrule{\vrule} -\newcommand*\etocrightrule{\vrule} -\newcommand*\etocbottomrule{\hrule} -\newcommand*\etocleftrulecolorcmd{\relax} -\newcommand*\etocrightrulecolorcmd{\relax} -\newcommand*\etocbottomrulecolorcmd{\relax} - -\newcommand*\etocbkgcolorcmd{\relax} - -% Haken -\newcommand\etocframedmphook{\relax} -\end{verbatim} - -Der Befehl \csa{etocframedmphook} ist direkt hinter dem Anfang einer Minipage, -innerhalb der der Inhalt eines gerahmten Verzeichnisses gesetzt wird, verankert. - -Wurden die Farbbefehle, also \csa{...colorcmd}, nicht verändert, so expandieren -sie lediglich zu \csa{relax}. (Daher muss man für ihre Verwendung nicht die -Pakete |color| oder |xcolor| einbinden.) Hat man jedoch einen solchen Befehl - -wie zum Beispiel \csa{etocbkgcolorcmd} - so verändert, dass er nun tatsächlich -eine Farbe anzeigt, so kann dies nur mittels -|\renewcommand{\etocbkgcolorcmd}{\relax}| aufgehoben werden und nicht durch -\csa{let}\csa{etocbkgcolorcmd}\csa{relax}. - -Wie man an dem Beispiel \centeredline{|\renewcommand{\etoctoprule}{\hrule height - 1ex}|} erkennen kann, werden die Größen des oberen Rechtecks in den Maßen -|ex| und |em| angegeben. - -Sobald der Titel während der Befehlsausführung von \csa{etocruledtoc} oder -\csa{etocframedtoc} gesetzt wurde, nutzt der Paketcode dessen Schriftgröße, um -die Bedeutung von \glq1ex\grq~zu ermitteln. Natürlich dürfen auch die anderen -Befehle zur Erzeugung eines Rechtecks Maße annehmen, deren Wert sich nur durch -eine zugehörige Schriftgröße ergibt. Hierbei dient jedoch die Schrift vor dem -Inhaltsverzeichnis als Referenz. - -Wie in \TeX{} üblich, werden sowohl das Rechteck vor als auch das nach dem -Inhalt des Verzeichnisses durch einfache Einzüge (einer festgelegten Höhe) -realisiert. Es muss sich hierbei also nicht um echte Rechtecke handeln. Die -Rechtecke links und rechts vom Inhalt werden hingegen nicht durch (horizontale) -Einzüge verwirklicht. Sie stellen vielmehr Objekte einer bestimmten Weite dar. -Daher darf hier \emph{nur} die Syntax von \TeX{}-Befehlen, mit deren Hilfe man -Rechtecke erzeugt, genutzt werden. - -\section{Ein weiteres Bei\-spiel für ein farbiges Inhalts\-verzeichnis} -\label{ssec:tocclone} - -Beim Befehl \csa{etocframedstyle} wird der Titel in der Mitte des oberen Rechtecks positioniert. Dies würde im folgenden Beispiel -jedoch sehr unschön aussehen, weswegen wir den Titel innerhalb der \meta{start}-Umgebung eines Abschnittbefehls -platzieren. Hierdurch wird er innerhalb des Rahmens gesetzt. - -\begin{verbatim} -\begingroup -\definecolor{subsecnum}{RGB}{13,151,225} -\definecolor{secbackground}{RGB}{0,177,235} -\definecolor{tocbackground}{RGB}{212,237,252} - -\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} -\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} - -\renewcommand{\etocleftrule}{\vrule width 1cm} -\renewcommand{\etocrightrule}{\vrule width .5cm} -\renewcommand{\etocbottomrule}{\hrule height 12pt} -\renewcommand{\etoctoprule}{\hrule height 12pt} - -\renewcommand{\etocinnertopsep}{0pt} -\renewcommand{\etocinnerbottomsep}{0pt} -\renewcommand{\etocinnerleftsep}{0pt} -\renewcommand{\etocinnerrightsep}{0pt} - -\newcommand\shiftedwhiterule[2]{% - \hbox to \linewidth{\color{white}% - \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2} - -\etocsetstyle{subsubsection}{\etocskipfirstprefix} - {\shiftedwhiterule{\leftskip}{6pt}} - {\sffamily\footnotesize - \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent - \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% - \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill - \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par - \nointerlineskip\vskip3pt} - {} - -\etocsetstyle{subsection}{\etocskipfirstprefix} - {\shiftedwhiterule{1.5cm}{6pt}} - {\sffamily\small - \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent - \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% - \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill - \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par - \nointerlineskip\vskip6pt} - {} - -\newcommand{\coloredstuff}[2]{% - \leftskip0pt\rightskip0pt\parskip0pt - \fboxsep0pt % Auch ohne Rahmen nutzt \colorbox den Befehl \fboxsep! - \noindent\colorbox{secbackground} - {\parbox{\linewidth}{% - \vskip5pt - {\noindent\color{#1}#2\par}\nointerlineskip - \vskip3pt}}% - \par\nointerlineskip} - -\etocsetstyle{section} -{\coloredstuff{white} - {\hfil \hyperref[toc:b]{\bfseries\large Ich bin der Zwilling von - diesem Verzeichnis (Klick mich an!)}\hfil}} -{\vskip3pt\sffamily\small} -{\coloredstuff{white} - {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip - \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% - \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% - \vskip6pt } -{} - -\etocframedstyle[1]{} -\tableofcontents \label{toc:clone} \ref{toc:globalcmds} -\endgroup -\end{verbatim} - -\begingroup -\definecolor{subsecnum}{RGB}{13,151,225} -\definecolor{secbackground}{RGB}{0,177,235} -\definecolor{tocbackground}{RGB}{212,237,252} - -\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} -\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} -\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} - -\renewcommand{\etocleftrule}{\vrule width 1cm} -\renewcommand{\etocrightrule}{\vrule width .5cm} -\renewcommand{\etocbottomrule}{\hrule height 12pt} -\renewcommand{\etoctoprule}{\hrule height 12pt} - -\renewcommand{\etocinnertopsep}{0pt} -\renewcommand{\etocinnerbottomsep}{0pt} -\renewcommand{\etocinnerleftsep}{0pt} -\renewcommand{\etocinnerrightsep}{0pt} - -\newcommand\shiftedwhiterule[2]{% - \hbox to \linewidth{\color{white}% - \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip -\vskip#2} - -\etocsetstyle{subsubsection}{\etocskipfirstprefix} -{\shiftedwhiterule{\leftskip}{6pt}} -{\sffamily\footnotesize -\leftskip2.5cm\hangindent1cm\rightskip1cm\noindent -\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par -\nointerlineskip\vskip3pt} -{} - -\etocsetstyle{subsection}{\etocskipfirstprefix} -{\shiftedwhiterule{1.5cm}{6pt}} -{\sffamily\small -\leftskip1.5cm\hangindent1cm\rightskip1cm\noindent -\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% -\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill -\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par -\nointerlineskip\vskip6pt} -{} - -\newcommand{\coloredstuff}[2]{% - \leftskip0pt\rightskip0pt\parskip0pt - \fboxsep0pt % \colorbox uses \fboxsep also when no frame! - \noindent\colorbox{secbackground} - {\parbox{\linewidth}{% - \vskip5pt - {\noindent\color{#1}#2\par}\nointerlineskip - \vskip3pt}}% - \par\nointerlineskip} - -% v1.07l on the occasion of traduction into German documentation - % APRIL 26, 2014 Improvement in the section style for better placement of - % page number when the section name is more than one line long. Use of - % \makebox rather than \hbox, to be more LaTeX like. -\etocsetstyle{section} -{\coloredstuff{white} - {\hfil \hyperref[toc:b] - {\bfseries\large Ich bin der Zwilling von diesem - Verzeichnis (Klick mich an!)}% - \hfil}} -{\vskip3pt\sffamily\small} -{\coloredstuff{white} - {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip - \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% - \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% - \vskip6pt } -{} - -\etocframedstyle[1]{} - -\begin{figure}[ht!]\centering - \tableofcontents \label{toc:clone} \ref{toc:globalcmds} -\end{figure} -\endgroup - -Das Inhaltsverzeichnis befindet sich in einer -\hyperref[toc:clone]{float}-Umgebung, die man \vpageref{toc:clone} findet. Da -diese Art von Code keine zusätzlichen Pakete verlangt, ist er etwas -komplexer.\footnote{Zudem zeigt er die Vorliebe des Autors für die -\TeX{}-Syntax.} Außerdem wurde er in einem früheren Stadium entwickelt und -seither nicht überarbeitet. - -Da Rahmen (welche hier genutzt wurden, um die Hintergrundfarbe zu setzen) nur -die Hintergrundfarbe innerhalb einer Seite verändern, würde es sich anbieten, -weitere Pakete einzubinden, mit deren Hilfe man die Hintergrundfarbe über -mehrere Seiten hinweg verändern kann. - -Alle Befehle, welche die Farbe verändern, sind in \etoc zu Beginn so definiert, -dass sie nichts verändern. Daher kann der Nutzer selbst entscheiden, ob er -Farben nutzen will oder nicht. - - -\clearpage -\etocdepthtag.toc {tips} - -\part{Tipps} -\label{part:tipsandtricks} - -\thispartstats - -\etocsettocstyle{}{} -\etocstandardlines -\localtableofcontents - -\section{\ldots\ und Tricks} - -\subsection{Hacken "`framed parboxes"'} - - -\begin{verbatim} -\etocdefaultlines -\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} -\etocruled{\color{green}\fboxrule2pt\fboxsep1ex - \fbox{\raisebox{-\fontdimen22\textfont2} - {\color{blue}\parbox{.5\linewidth} - {\normalfont Dieser Text ist vertikal perfekt zentriert - unter Berücksichtigung der \emph{surrounding horizontal rules.}}}} -\ref{toc:globalcmds} -\end{verbatim} - -\etocdefaultlines - -\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} - -\etocruled{\color{green}\fboxrule2pt\fboxsep1ex - \fbox{\raisebox{-\fontdimen22\textfont2} - {\color{blue}\parbox{.5\linewidth} - {\normalfont Dieser Text ist vertikal perfekt zentriert - unter Berücksichtigung der \emph{surrounding horizontal rules.}}}}} - \ref{toc:globalcmds} - - -\subsection{Umstellen der Ebenen} -\label{subsec:interverting} - -Lasst uns alle Unterabschnitte zeigen und aufzählen, die in diesem Dokument -vorkommen (Siehe \autoref{part:surprising} für andere Verwendungen dieser Technik.): -\begin{verbatim} -\etocsetnexttocdepth{2} -\begingroup -\etocsetlevel{part}{3} -\etocsetlevel{section}{3} -\etocsetstyle{subsection} - {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} - {\normalfont\bfseries\item} - {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} - {\end{enumerate}} -\renewcommand{\etoccolumnsep}{2.75em} -\renewcommand{\columnseprule}{1pt} -\etocmulticol[3]{\subsection{Alle Unterabschnitte in diesem Dokument}} -\endgroup -\end{verbatim} - -\etocsetnexttocdepth{2} - -\begingroup -\etocdefaultlines -\etocstandarddisplaystyle -\etocsetlevel{book}{3} -\etocsetlevel{part}{3} -\etocsetlevel{chapter}{3} -\etocsetlevel{section}{3} -\etocsetstyle{subsection}{\small -\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} -{\normalfont\bfseries\item} -{\roman{enumi}. \mdseries\etocname{} (\etocnumber, S.~\etocpage)} -{\end{enumerate}} - -\renewcommand{\etoccolumnsep}{2.75em} -\renewcommand{\columnseprule}{1pt} - -%%\etocmarkbothnouc{List of all subsections} -%% le mark (\markright) est fait par \subsection - -\etocmulticol[3]{\subsection{{Alle Unterabschnitte in diesem Dokument}}\label{toc:allsubsections}} - - -\endgroup - -\subsection{Sta\-ti\-sti\-ken anzeigen}\label{ssec:statistics} - -Jeder Teil dieses Dokuments beginnt mit einem Paragraphen, der sagt, wieviele -Kapitel und Unterkapitel er hat. Nun, jeder von diesen Paragraphen ist ein -Inhaltsverzeichnis! Wir haben ein Makro \csa{thispartstats} geschaffen, um dies -zu tun. Es nutzt "`Speicher"'-Boxen, um die Informationen über die ersten und -späteren Kapitel und Unterkapitel zu halten. Boxen zu nehmen, ist die einfachste -Art und Weise |hyperref|-Links für spätere Verwendungen zu kapseln (ob es einer -ist oder keiner). Allerdings kann man dann nichts an der Schriftart oder Farbe -ändern (die \TeX -Primitive \csa{setbox} eher nehmend als von \LaTeX{} -\csa{sbox} würde die Farbe Farbe um das ohne Boxen gespeicherte Feld verändern). -Wenn eine solche Notwendigkeit entsteht, muss man von der Boxenverwendung zum -Makro nehmen wechseln und die |hyperref|-Daten für später speichern, wie im oben -im Code von \autoref{ssec:molecule} vorgestellt. Wir präsentieren auch diese -zweite Methode. - -Aber als Erstes der Code von \csa{thispartstats}:\par -\begin{verbatim} -\newsavebox\firstnamei \newsavebox\firstnumberi -\newsavebox\lastnamei \newsavebox\lastnumberi -\newsavebox\firstnameii \newsavebox\firstnumberii -\newsavebox\lastnameii \newsavebox\lastnumberii -\newcounter{mycounti} \newcounter{mycountii} -\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{} -\newcommand*{\oldtocdepth}{} -\newcommand*{\thispartstats}{% - \setcounter{mycounti}{0}% - \setcounter{mycountii}{0}% - \def\thispartstatsauxi{% - \sbox{\firstnamei}{\etocname}% - \sbox{\firstnumberi}{\etocnumber}% - \def\thispartstatsauxi{}}% - \def\thispartstatsauxii{% - \sbox{\firstnameii}{\etocname}% - \sbox{\firstnumberii}{\etocnumber}% - \def\thispartstatsauxii{}}% - \begingroup - \etocsetstyle{subsection} {} {} - {\thispartstatsauxii - \stepcounter{mycountii}% - \sbox{\lastnameii}{\etocname}% - \sbox{\lastnumberii}{\etocnumber}} {}% - \etocsetstyle{section} - {} - {} - {\thispartstatsauxi - \stepcounter{mycounti}% - \sbox{\lastnamei}{\etocname}% - \sbox{\lastnumberi}{\etocnumber}} -% Hier wird ein Befehl definiert, der fuer jedes Teil ein paar Fakten sammelt -% und ausgibt. - {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält - \arabic{mycounti} Abschnitt\ifnum\value{mycounti}>1 e\fi{} und - \arabic{mycountii} Unterabschnitt\ifnum\value{mycountii}>1 e\fi. Der Name des ersten - Abschnitts lautet - \glqq\unhbox\firstnamei{}\grqq~und er hat die Gliederungsnummer - \glqq\unhbox\firstnumberi\grqq. Der Name des letzten Abschnitts lautet - \glqq\unhbox\lastnamei{}\grqq~und er hat die Nummer - \glqq\unhbox\lastnumberi\grqq. - \ifnum\value{mycountii}>0 Der erste - Unterabschnitt heißt - \glqq\unhbox\firstnameii{}\grqq~und er hat die Nummer - \glqq\unhbox\firstnumberii\grqq. Der Name des letzten Unterabschnitts ist - \glqq\unhbox\lastnameii{}\grqq~und dessen Nummer ist - \glqq\unhbox\lastnumberii\grqq.\fi }% - \etocinline - \etocsettocstyle {}{} - \etocsetnexttocdepth{2}% - \localtableofcontents % to be used at the top level of a Part. - \endgroup -} -\end{verbatim} - -Und nun, die Variante mit Makros anstelle von der mit Boxen (diese Variante -steht hier für die Verwendung in einem Kapitel). -\begin{verbatim} -\makeatletter -\newcommand*\firstsubname {} \newcommand*\lastsubname {} -\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {} -\newcommand*\thisspecialstatsaux{} -\newcommand*{\thisspecialstats}{% - \setcounter{mycounti}{0}% - \def\thisspecialstatsaux{% - \let\firstsubname\etocthelinkedname - \let\firstsubnumber\etocthelinkednumber - \def\thisspecialstatsaux{}} - \begingroup - \etocsetstyle{subsection} - {} - {} - {\thisspecialstatsaux - \stepcounter{mycounti}% - \let\lastsubname\etocthelinkedname - \let\lastsubnumber\etocthelinkednumber } - {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält - \arabic{mycounti} Unterabschnitt\ifnum\value{mycounti}>1 e\fi{}. Der Name des ersten - Abschnitts lautet\emph{\firstsubname{}} und er hat die Gliederungsnummer - {\firstsubnumber}. Der Name des letzten Unterabschnitts lautet - \emph{\lastsubname{}} und er hat die Nummer{\lastsubnumber}.} - \etocsettocstyle {}{} - \etocinline - \etocsetnexttocdepth {1}% - \localtableofcontents % to be used within a section - \endgroup -} -\makeatother -\end{verbatim} - -\subsection{Tiefe Tags nehmen} -\label{ssec:tocwithdepthtags} - -Wir wollen ein TOC, das für jeden |\part| eine Überschrift hat (außer der letzte -Teil mit dem Quellcode, wofür beschließen, ihn nicht einzubeziehen), und wir -wollen \autoref{part:globalcmds} öffnen für die Paragraphen. Um dies zu -erreichen, fügen wir zu dieser Quelle verschiedene -\csb{etocdepthtag.toc}-Befehle und es bleibt jetzt, zu setzen die Levels für -jeden Tag mit \csb{etocsettagdepth} (dies wurde oben in diesem Dokument -verwendet in \autoref{sec:secondexample}, in einer Gruppe, damit es keine -Auswirkungen auf andere Inhaltsverzeichnisse hat). - -Allerdings sind die Linienstile des Pakets nicht in der Lage Paragraphen -anzuzeigen und die Standardlinienstile der Dokumentklasse geben zu viel -vertikalen Abstand (in diesem Zusammenhang) bei der Anzeige einer -Teilüberschrift im TOC aus.Deshalb kochen wir unseren eigenen, schnell -entwickelten Linienstil, in der Art von \autoref{sec:firstexample} (aber auf dem -Weg Seitenzahlen von rechts, was mehr wie eine Methode von \LaTeX2e's -|\@dottedtocline| ist; und mehrzeilige Überschriften lassen nun den Bereich -unter den Zahlen leer, im Gegensatz zu dem Code von \autoref{sec:firstexample}). -Und nach ein paar Minuten für die Wahl der Längen (jetzt ist das erstmal getan, -es kann leicht recycelt) erhalten wir: - -\etocsetnexttocdepth {all} -\begingroup -\parindent 0pt -\leftskip 0cm -\rightskip 0.75cm -\parfillskip -\rightskip -\newcommand*{\EndParWithPagenoInMargin} - {\nobreak\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par} -\renewcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} -\newcommand*{\EndParWithPagenoInMarginAndLeaders} - {\nobreak\leaders\etoctoclineleaders\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par } -\etocsetstyle {part} - {} - {\leavevmode\leftskip 1cm\relax} - {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% - \etocname\EndParWithPagenoInMargin\smallskip} - {} -\etocsetstyle {section} - {} - {\leavevmode\leftskip 1.75cm\relax} - {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip 2.75cm\relax } - {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 4cm\relax } - {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {paragraph} - {} - {\leavevmode\leftskip 5.5cm\relax } - {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {surprising} {part} -\etocsettagdepth {linestyles} {part} -\etocsettagdepth {globalcmds} {paragraph} -\etocsettagdepth {custom} {part} -\etocsettagdepth {tips} {part} -\etocsettagdepth {code} {none} -\renewcommand\etoctoprule {\hrule height 3pt\relax } -\renewcommand\etoctoprulecolorcmd {\color{blue}} -\renewcommand\etocaftercontentshook - {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } -\etocruledstyle [1]{\Large\bfseries - \fbox{\makebox[8cm]{Ein TOC -- nehmend tiefe Tags}}} -\sloppy -\tableofcontents - -\begin{verbatim} -\etocsetnexttocdepth {all} -\begingroup -\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip -\newcommand*{\EndParWithPagenoInMargin} - {\nobreak\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par} -\renewcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} -\newcommand*{\EndParWithPagenoInMarginAndLeaders} - {\nobreak\leaders\etoctoclineleaders\hfill - \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par } -\etocsetstyle {part} - {} - {\leavevmode\leftskip 1cm\relax} - {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% - \etocname\EndParWithPagenoInMargin\smallskip} - {} -\etocsetstyle {section} - {} - {\leavevmode\leftskip 1.75cm\relax} - {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsection} - {} - {\leavevmode\leftskip 2.75cm\relax } - {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {subsubsection} - {} - {\leavevmode\leftskip 4cm\relax } - {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsetstyle {paragraph} - {} - {\leavevmode\leftskip 5.5cm\relax } - {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% - \etocname\EndParWithPagenoInMarginAndLeaders} - {} -\etocsettagdepth {preamble} {none} -\etocsettagdepth {overview} {part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {surprising} {part} -\etocsettagdepth {linestyles} {part} -\etocsettagdepth {globalcmds} {paragraph} -\etocsettagdepth {custom} {part} -\etocsettagdepth {tips} {part} -\etocsettagdepth {code} {none} -\renewcommand\etoctoprule {\hrule height 3pt\relax } -\renewcommand\etoctoprulecolorcmd {\color{blue}} -\renewcommand\etocaftercontentshook - {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } -\etocruledstyle [1]{\Large\bfseries - \fbox{\makebox[8cm]{A TOC using depth tags}}} -\sloppy -\tableofcontents -\endgroup -\end{verbatim} -\endgroup - -\subsection{Das TOC als eine Tabelle setzend (die alte Weise)} -\label{ssec:tocastableold} - -%%% ALT TEXT: -% Tabellenzellen erstellen Gruppen; Definitionen von |\etocname|, |\etocnumber|, -% |\etocpage| sind lokal gemacht, also wenn die erste Zelle einer Zeile ist, wo -% die |.toc|-Dateizeile gelesen wird und|\etocname| und |\etocnumber| definiert -% wird, werden diese Definitionen nach dem Tabularzeichen |&| -% verloren gehen. Der -% Quellcode von \etoc beginnt, die "`Anfangs"'- und "`End"'teile der Linienstile -% zu öffnen oder Gruppen zu schließen, durch ein |&| beispielsweise im -% "`Präfix"'-Teil des Linienstils ist nicht zu erwarten. - -% Weiterhin, ähnlich sieht die Sache der Neudefinition von |\contentsline|, made -% by \etoc , aus, jedesmal wird ein TOC gesetzt. Es wird nach dem -% ersten Argument -% getan, wenn \csb{etocsettocstyle} ausgeführt wurde, weil, wenn dieses Argument -% eine Tabelle öffnet, die |etoc|-Neudefintion der |\contentsline| in die erste -% Zelle der ersten Zeile getan werden will und danach verloren geht. - -% So, mit dem Öffnen und Schließen mit |\etocsettocstyle| und dem -% Nehmen von |&| | -% und | innerhalb eines Level-Stils, kann man nicht direkt ein TOC -% in eine Tabelle -% setzen. - -% Der \etoc -Quellcode könnte geändert werden, zu machen Modifizierungen von -% einigen relevanten globalen Definitionen, aber ich habe mich dagegen -% entschieden. Setzen als eine |tabular| (oder später als |longtable|) wird nur -% fortgeschrittene Anwendern gesucht und fortgeschrittene Anwender können die -% Technik einsetzen, die in \autoref{tocastree} erklärt wurden. Hier ist ein -% Beispiel mit einem vollverlinkten Inhaltsverzeichnis. Der Code kommt nach der -% Tabelle. - - -\textbf{UEBERSETZUNG NOETIG} - -\begin{otherlanguage}{english} -Due to, among other things, the fact that alignment cells create and close -groups, and that by default definitions of \csb{etocname}, \csb{etocnumber}, -\csb{etocpage} made by \etoc are local, it was not easy to typeset a TOC as -table with \etoc, prior to release |1.08|. - -Not only \csb{etocname} etc... caused a problem, but also the basic -redefinition of \csa{contentsline} was made by \etoc only after the -first argument to \csb{etocsettocstyle} had been executed, hence if this -argument were to open a tabular, the \etoc redefinition of -\csa{contentsline} would be done in the first cell of the first row and -get lost thereafter. - -Thus one had to resort to the technique explained in \autoref{tocastree} -of using the execution of \csa{tableofcontents} as a way to store data -which was then displayed later. - -For the record, here is how the TOC from \autoref{sec:tocastable} was -coded in the old days. We don't have here the problems with the -positioning of |\hline|'s we face with the newer method; on the other -hand we must manipulate token registers which are not familiar to most -\LaTeX{} users (macros could be used, but would be more cumbersome, -except perhaps if using the \eTeX{} \csa{unexpanded}). - -The method here is the most powerful because it filters out of the -|.toc| file only the data we want (the other things are not ignored, -they are executed but hopefully do not create havoc; typically they are -language changing instructions, or updates to certain counters, etc...), -and we are less susceptible to fall potential victims of various -external macros inserted in the |.toc| file by other packages. -\end{otherlanguage} - - -\begin{verbatim} -\newtoks\toctabletok -\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 - #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} - -\newcommand*\PreparePart{% - \toks0 \expandafter{\etocthelinkednumber}% - \toks2 \expandafter{\etocthelinkedname}% - \toks4 \expandafter{\etocthelinkedpage}% - \edef\toctablepiece {\noexpand\hline - \noexpand\strut\the\toks0 &\noexpand\bfseries\the\toks2 - &\the\toks4 \noexpand\\\noexpand\hline}% -} -\newcommand*\PrepareSection{% - \toks0 \expandafter{\etocthelinkednumber}% - \toks2 \expandafter{\etocthelinkedname}% - \toks4 \expandafter{\etocthelinkedpage}% - \edef\toctablepiece {\the\toks0 &\the\toks2 &\the\toks4 \noexpand\\}% -} -% new version for 1.07k, 2014/03/06 -\newcommand*{\PrepareSubsection}{% - \toks0 \expandafter{\etocthelinkednumber}% - \toks2 \expandafter{\expandafter\itshape\etocthelinkedname\strut}% - \toks4 \expandafter{\expandafter\itshape\etocthelinkedpage}% - \edef\toctablepiece{&\noexpand\makebox[1cm][c]{\the\toks0}% - \noexpand\parbox[t]{\dimexpr6cm-\tabcolsep\relax} - {\noexpand\sloppy\the\toks2}% - &\the\toks4 \noexpand\\}% -} - -\begingroup -\etocsetstyle{part}{}{}{\PreparePart \appendtotok\toctabletok\toctablepiece}{} - -\etocsetstyle{section}{}{}{\PrepareSection \appendtotok\toctabletok\toctablepiece}{} - -\etocsetstyle{subsection}{}{}{\PrepareSubsection\appendtotok\toctabletok\toctablepiece}{} - -\etocsettocstyle - {\toctabletok{\hypersetup{hidelinks}% - \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}\hline - \multicolumn{3}{|c|}{\Large\bfseries\strut TABLE OF CONTENTS}% - \\\hline\hline}} - {\global\toctabletok\expandafter{\the\toctabletok\hline\end{longtable}}} -\etocsettocdepth {subsection} -\tableofcontents -\the\toctabletok -\endgroup -\end{verbatim} - -\subsection{Kompatibilität mit anderen Paketen} -\label{etocaftertochook} - -% JFBU modifiziert Januar 23, 2015 -Die Inhalte der |.toc|-Datei (falls bereits vorhanden) werden einmal in den -Speicher von \etoc getan, bei |\begin{document}|. \footnote{Neu mit |1.07m|. - Früherer Versionen benutzten die |.toc|-Datei bei - \csa{usepackage\{etoc\}}. Danke an Denis Bitouzé für ein Babel-etoc - Problem entdecken zu haben.} - -\begin{framed} - Man sollte \etoc \emph{nach} \texttt{babel} laden. -\end{framed} - - Die |.toc|-Datei bleibt für andere Pakete nutzbar für - Lesevorgänge bis zum Ort des ersten Inhaltsverzeichnisses, zu diesem - Zeitpunkt wird ein Schreib-stream durch \etoc geöffnet und von diesem Punkt - aus wird die Datei gelöscht bis ihr Inhalt wieder auf die Platte von - \LaTeX{} am Ende der Kompilierung geschrieben wurde. - -\etoc lädt das Paket |multicol|. - -\etoc erwartet die Sektionierungseinheiten des Dokuments, um ihre Daten in eine -Datei mit der Endung |.toc| zu schreiben, in Form von Linien, die enthalten den -\csa{contentsline}-Befehl und dessen Argumente. -\textbf{UEBERSETZUNG NOETIG} -\begin{otherlanguage}{english} - \etoc requires the |.toc| file to use the |\contentsline| macro (possibly - patched by other packages). It is thus incompatible with the |beamer| class. - However, if |beamer| is used in an article mode, i.e., with the article - class in conjunction with the |beamerarticle| package, then \etoc should - work. -\end{otherlanguage} - -Es ist |hyperref| bekannt und hoffentlich kompatibel mit ihm: die Macros -\csa{etocname}, \csa{etocnumber} und \csa{etocpage} enthalten die -|hyperref|-Links, wenn vorhanden (Beachten Sie, dass die -\emph{linktoc=all}-Option von |hyperref| mitteilt, dass ein Link zur -Seitenzahl zu setzen ist, für ein einen toc-Eintrag.). Beispielsweise sind die -Inhaltsverzeichnisse des vorliegenden Dokuments komplett verlinkt. -Es ist kein Thema, ob \etoc vor oder nach |hyperref| geladen wird. - -Die Release |1.07k| fügt Kompatibilität mit dem Paket |tocloft| hinzu: -\footnote{\url{http://ctan.org/pkg/tocloft}} Schritte wurden getan, um eine Neudefinition -von |\tableofcontents| zu vermeiden, getan von |tocloft| an |\begin{document}|. -% - -Solange \etoc ungeschickt ist im Kompatibilitätsmodus, wird von |tocloft| die -Anpassung sowohl für den Lin ienstil als auch den TOC-Titel getan. Man kann -immer noch von den \emph{tiefen Tags}-Management mit \etoc profitieren, von -seinem |\localtableofcontents|, von seinem |\label+\ref|-Mechanismus. Man kann -|\etocsetstyle| nehmen, um mit \etoc das Layout des TOC zu definieren und dann -eher |tocloft| für etwas anderes, wenn auf |\tableofcontents| folgen -\csb{etocstandardlines} und \csb{etocstandarddisplaystyle}. In diesem -Kompatibiltätsmodus |\etocsetlevel{division unit}{6}| wird die gewählte -Bereichsebene gerendert, aber der Austausch von Ebenen ist andererseits nicht -möglich. -\begin{framed} - Man sollte \etoc \emph{nach} \texttt{tocloft} laden. Sonst wird eine Warnung - ausgegeben. -\end{framed} - -Die Release |1.07l| hat ebenfalls die Kompatibilität mit der |memoir|-Klasse -verbessert: Seine |appendix|-Ebene kann mit \etoc gemacht werden. Es ist die -gleiche Ebene wie wie bei |chapter|, also der Kapitelebenstil kann eventuell ein -Test für einige boolesche-Ausdrücke sein, die aktiviert sein können via einer -Instruktion an die |.toc|-Datei aufgenommen werden, wenn man zwei Arten von -Unterteilungen unterscheidet. - -\etoc kann nicht wirklich mit Paketen zusammensein, die -\csa{tableofcontents}-Befehle ändern: Eine Art Waffenstilstand kann erreicht -werden, wenn \etoc zuletzt geladen wird, daher ist es der Gewinner. - \begin{framed} - Ändern Sie nicht den |\tableofcontents|-Befehl, wie diesen folgenden: - \centeredline{|\let\oldtableofcontents\tableofcontents|,} - \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents\mystuff}|,} - da dies den |\label/\ref|-Mechanismus unmöglich macht. Sie können vielmehr - \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} ausführen und es - ergibt auch \csb{etocaftercontentshook}, das führt ein bisschen eher - \footnotemark{} aus, gerade vor dem Schließen des Teils vom toc-Anzeigestil - (und damit innerhalb einer Gruppe). - \end{framed} -\footnotetext{Im Gegensatz zu \csa{etocaftertochook}, - \csa{etocaftercontentshook} wird nicht ausgeführt, wenn |tocdepth| das - Drucken des TOC nicht ermöglicht.} - -\etoc zu verwenden, kann unvereinbar sein mit dem Paket -|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; jetzt lebt es , -sortierend, wie es deaktiviert die Modifikationen des |\tableofcontents| durch -|tocvsec2| (getan im Stile von oben) und es kanzelt auch andere |toc|-bezogene -Macros, aber es reimplantiert partiell ihre Funktionalität mit -\csb{etocsettocdepth.toc}. In der Art und Weise, die letzten beiden \LaTeX-Läufe -sind für das erneute Nehmen des Befehls in einem Dokument notwendig, um einen -Effekt im Inhaltsverzeichnis zu haben. - -Wenn ein \localtoc durch den Nutzer in das Dokument aufgenommen wird, eine -Zeile, in einen inneren \etoc-Befehl und eine Identifikationszahl in die -|.toc|-Datei aufgenommen wird. Das korrekte Inhaltsverzeichnis wird nur nach dem -nächsten \LaTeX -Lauf angezeigt werden. - -Es ist möglich (unter Verwendung des Pakets|tocloft| beispielsweise), im -gesamten Dokument die Makros \csa{l@section}, \csa{l@subsection} \ldots{} zu -benutzen und der Effekt wird im nächsten Inhaltsverzeichnis durch den -Kompatibilitätsmodus von \etoc sichtbar werden. - -\textbf{UEBERSETZUNG NOETIG} - -\begin{otherlanguage}{english} -It is possible to use simultaneously \etoc and -{\color{niceone}|tableof|}\footnote{\url{http://ctan.org/pkg/tableof}}. Release -|1.08| of \etoc requires at least version |1.4a| of |tableof|. If -\csb{etocglobaldefs} is put in the preamble, this must be after the loading of -package |tableof|. {\color{niceone}|tableof|} command \csa{nexttocwithtags} -should work as expected. - -{\color{niceone}|tableof|} commands \csa{tableof}, \csa{tablenotof}, ... will -typeset the (a priori global) table of contents according to the document -class defaults, obeying the \etoc depth tags; as explained in the |tableof| -documentation they do not typeset a TOC title. They should \emph{not} be used -in case \csb{etocglobaldefs} was issued before, except if its scope has been -terminated since then, or \csb{etoclocaldefs} has cancelled its influence. -\end{otherlanguage} - -\subsection{\TeX -nische Sachen} - -Die \csa{etocname}, \csa{etocnumber}, \csa{etocpage} Befehle sind gegen -vorzeitige Expansion geschützt. Sie enthalten geeignete |hyperref|-Links, wenn -das Paket |hyperref| geladen und aktiviert für das TOC ist. Die Befehle -\csa{etoclink} und \csa{etocifnumbered} sind auch gegen vorzeige Expansion -geschützt. - -Andererseits \csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, haben -keine Anbindung an |hyperref|-Links und sind nicht gegen Expansionen geschützt. - -Befehle wie \csa{etocsetstyle}, \csa{etocsetlevel}, \csa{etocsettocstyle}, -\csa{etocmulticolstyle}, \csa{etocruledstyle}, \csa{etocframedstyle} folgen -Gruppierungen von \LaTeX. Alle TOCs werden in Gruppierungen gesetzt. - -\subsection{Fehler und Katastrophen} - -Nach der Verwendung von \csa{etocsetstyle}für eine Ebene nehmen die restlichen, -nicht angepassten Ebenen die Standardstile von \etoc (diejenigen, die aktiviert -werden von \csa{etocdefaultlines}). Man muss sicherstellen, dass alle Ebenen, -die für das nächste Inhaltsverzeichnis gebraucht werden, miteinander kompatibel -sind: Insbesonders, dass die Standardlinienstile jeweils im "`vertikalen Modus"' -gestartet werden. - -Wenn man mehrere \toc-Befehle in einem Dokument verwendet, sollte man sich -hüten, mehrere Satzanweisungen in der |.toc|-Datei zu addieren, so sie mit \toc -ausgeführt für alle TOCs ausgeführt werden: Auch für \localtoc spielt es keine -Rolle, ob die Anweisungen Material außerhalb des Anwendungbereichs betreffen, -sie werden sie trotzdem erhalten. Falls unbedingt erforderlich (aber es das -sollte es nie) müssen dies Instruktionen so sein, dass einfach aktiviert oder -deaktiviert werden von der Dokumentquelle, wie es sein muss. - -So wie es üblich ist bei TOCs und Labels, muss nach jeder Änderung \LaTeX{} eine -bestimmte Anzahl von Durchführungen haben, um für das Dokument das endgültige -Aussehen zu erhalten (mindestens zweimal durchlaufen). - - - -\clearpage -\etocdepthtag.toc {code} - -\part{Der Code} - -\section{Zeitstempel} - -Dies ist die deutsche Dokumentation von \texttt{\etocDEdocdate}, erzeugt von der -Quelldatei mit dem Stempel \texttt{\etocdtxtimestamp}. Die dokumentierte -Paketversion ist \texttt{\etocDEpkgversion} von \texttt{\etocDEpkgdate}. - -% STOP GERMAN (DEUTSCH) VERSION - -^^Afi - -^^Acatcode92 0 - -\catcode1 13 - -\begingroup -\renewcommand\lowast{{\normalsize\raisebox{-.4\height}{*}}} -\small - -\ifnum\ForEnglish=1 - \section{Change history} -\fi - -\ifnum\ForDeutsch=1 - \section{Änderungen} -\fi - -\selectlanguage{english} - -\setlength{\columnsep}{\etoccolumnsep} - -\makeatletter - -% 27 avril 2014 un petit hack pour hyphénation (éventuelle) en allemand -% j'ai déjà ~ qui sera de catcode 0, cependant il faudrait aussi les accolades, -% donc finalement pour aller vite, je rends le + actif. Je modifie aussi le test -% fait par \jfverbaspace (n'ayant pas commenté mon code, j'ai dû réfléchir pour -% me rappeler à peu près ce que c'était censé faire). - -\def\jfverbatim{\@beginparpenalty \predisplaypenalty - \parindent \z@ - \parfillskip \@flushglue - \parskip \tw@\p@ plus 1fil\relax - \let \do \@makeother \dospecials \makestarlowast \catcode`+ \active - \begingroup\lccode`~`+ - \lowercase{\endgroup\def~[##1]{\foreignlanguage{ngerman}{##1}}}% - \catcode`^ \active - \begingroup\lccode`~`^ - \lowercase{\endgroup\def~{\nopagebreak}}% ajouté 2014/04/28, oblige à un peu - % plus de mark-up cependant - \catcode`\~\z@ - \footnotesize\normalfont\baselineskip10pt\relax - \frenchspacing \obeyspaces \jf@xverbatim } - -\begingroup -\catcode `|=0 \catcode `[= 1 \catcode`]=2 -\catcode `\{=12 \catcode `\}=12 \catcode`\\=12 -|long|gdef|jf@xverbatim#1\end{jfverbatim}[#1|end[jfverbatim]] -|endgroup - -\def\endjfverbatim{} - -\newdimen\jfverbadim - -\everypar{\leftskip\jfverbadim\bgroup - \def\par{\egroup\jfverbadim\z@\@@par}% - \def\jfverbaspace#1{\if\@sptoken\string#1\unskip\else\ \fi#1}} - -\begingroup\obeyspaces\def\x{\endgroup% -\def {\ifvmode\advance\jfverbadim.5em\relax\else\expandafter\jfverbaspace\fi}}\x - -\makeatother - -\begin{multicols}{2} -\begin{jfverbatim} -v1.08 [2015/03/10]^ - - \etocskipfirstprefix may now appear anywhere in the - part of a level style. - - New commands \etociffirst, \etocxiffirst, \etocxifnumbered. - - It is now possible to issue line style specifications directly - with & and \\ tokens, in order to typeset a TOC as a tabular - or longtable with the opening for example in the first - argument of \etocsettocstyle and the closing in its second - argument. - - It is mandatory for such uses to issue \etocglobaldefs which - tells etoc to proceed globally for certain definitions. This - is also useful in the context of the inline environments of - package enumitem. - - On this occasion, various old parts of the code have been - improved. - - -v1.07n [2015/03/05]^ - - No more use of \toks@ when etoc constructs \etocthelinkedname - etc... Thus \toks@ can be put in the line styles in order to - accumulate information. Only useful if it is certain nothing - else will change \toks@ either. - - In the documentation: list of main commands now in alphabetic - order. - - -v1.07m [2015/01/23]^ - - Reading of .toc file is delayed to \begin{document} to account for - possible Babel active characters used therein. Thanks to Denis - Bitouzé who reported a Babel related problem. - - Improved global toc display emulation under KOMA-script classes. - - New command \etocbeforetitlehook. New command \etocdisplay. - - -v1.07l [doc of 2014/04/29]^ - - Added to the documentation an example of use of \etocthelinkedname together - with an enumitem inline itemize* environment; moved main TOC to immediately - after the title, and license to the first pages. - - Incorporation of the translation into German done on the initiative of - +[Christine Römer] by +[Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel - Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU Jena).] My - grateful thanks to all! - - -v1.07l [2014/04/22]^ - - Fixes a bug with the 1.07k compatibility layer with tocloft which had broken - the 1.07k (sic) compatibility with memoir (yes, memoir class 1.07k testing - had been done before adding the tocloft thing to the source code . . . ). - Also, etoc when detecting tocvsec2 now checks if this is under the memoir - class, as then nothing special needs to be done to rescue \tableofcontents, - contrarily to the situation with the native tocvsec2. - - -v1.07k [2014/03/06]^ - - Compatibility with package tocloft; and improved compatibility with - class memoir. Novel TOC example in Overview. - - -v1.07j [2013/12/03]^ - - Some issues with the documentation formatting (now two-sided) have been - addressed, and a novel documentation section ``Typesetting the TOC as a - table'' has been added. Very minor code change (\Etoc@readtoc). - - -v1.07i [2013/10/21]^ - - Changes to the \etocmulticolstyle and \etocruledstyle codes - to lessen the risk of a page break after the title (in the one-column case). - - -v1.07h [2013/10/16]^ - - New commands \etocdepthtag.toc, \etocsettagdepth, \etocobeydepthtags, - \etocignoredepthtags. - - -v1.07g [2013/10/13]^ - - New commands \etocsettocdepth, \etocsettocdepth.toc, - \etocobeytoctocdepth, \etoc~-ignoretoctocdepth which - emulate part of tocvsec2 functionality ; measures to - make tocvsec2 partially compatible with etoc. - - New commands \etocsetnexttocdepth, \invisibletableofcontents, - \invisiblelocaltableofcontents. - - Switched from tikz-qtree to forest for the first `toc as - tree' example. - - Command names are linked to their descriptions, and many - other changes in the documentation. - - Removed printing of temporary message when the local toc - id is not yet stabilized; indeed \localtableofcontents - can have many uses, such as filling up some token list - register and one may wish to not have anything typeset, - even in an intermediate run. - - All of tex etoc.dtx, etex etoc.dtx, xetex etoc.dtx, latex - etoc.dtx, pdflatex etoc.dtx are now possible, and the - extracted file etoc.tex allows easy customization of - compilation options for the documentation (default is via - dvipdfmx which produces the smallest file). - - -v1.07f [2013/03/07]^ - - New macros \etocthelinkedname, \etocthelinkednumber, - \etocthelinkedpage, and \etocthelink. - - -v1.07e [2013/03/01]^ - - Improvements in the package own line styles with - regards to penalties and vertical spaces. - - Addition to the documentation of an example of - a tree-like table of contents (uses tikz). - - More such examples added 2013/03/03. - - -v1.07d [2013/02/24]^ - - Minor code improvements and new documentation - section ``Another compatibility mode''. - - -v1.07b [2013/02/02]^ - - Removal of the \xspace from the macros \etocname, - \etocnumber, \etocpage. - - Additional examples in the documentation. - - -v1.07 [2013/01/29]^ - - New commands: - - \etocthename, \etocthenumber, \etocthe~-page, \etoclink, - - \etoctoccontentsline, \etoctoccontentsline~lowast - - \etocnopar, \etocaftercontentshook - - Modified command: \etocmulticolstyle - - New documentation section ``Surprising uses of etoc'' which - explains how to do ``Lists of arbitrary things'', in - addition to the tables of contents. - - -v1.06 [2012/12/07]^ - - The standard macros \l@section etc... are modified only - during the calls to \tableofcontents; they can thus be - customized as will by the user (with the help of a - package like tocloft) and this will be taken into account - by etoc for the TOCs typeset in compatibility mode. - - -v1.05 [2012/12/01]^ - - \localtableofcontents replaces \tableofcontents~lowast (for - compatibility with the memoir class). - - Compatibility with KOMA-script and memoir document - classes. - - -v1.04 [2012/11/24]^ - - A (possibly local) table of contents can be labeled: - - \tableofcontents \label{toc:1} - - and reproduced elsewhere in the document (with a possibly - completely different layout): - - \tableofcontents \ref{toc:1} - - -v1.02 [2012/11/18]^ - - Initial version. - -\end{jfverbatim} -\end{multicols} -\endgroup % group for modified verbatim printing of the changes log - -\makeatletter - \let\check@percent\original@check@percent -\makeatother - -\small - -\ifnum\ForEnglish=1 -\section{Implementation} -\fi - -\ifnum\ForDeutsch=1 -\section{Ausführung} -\fi - -\indent % !!!!!!!!!!!!!!!!! Lundi 09 mars 2015 à 09:32:22 -% PUTAIN DE BORDEL DE MERDE AVEC CES \trivlist -% il faut faire un paragraphe après \section sinon pas d'espacement -% vertical en sortie de blocs macrocode. Pas évident à trouver, vu que -% je customisais différentes choses qui pouvaient affecter macrocode. - -% 9 mars 2015 -% Pour rappel on avait dans le préambule: -% \def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax} -% ce qui donne donc le \macro@font qui sera utilisé. - - - -\StopEventually{\normalsize - \ifnum\NoSourceCode=1 - \ifnum\ForEnglish=1 - \texttt{\parindent 0pt\rightskip 1cm minus 1cm - This documentation has been compiled without inclusion of the source - code. To produce the English documentation with source code included:\endgraf - \ \ \ \ run tex on etoc.dtx or etoc.ins to produce etoc.tex,\endgraf - \ \ \ \ then thrice latex on etoc.tex, then dvipdfmx on etoc.dvi.\endgraf - \medskip - To produce the German documentation with source code included, run tex on - etoc.dtx or etoc.ins to produce etoc-DE.tex, then edit etoc-DE.tex - to set \string\NoSourceCode\space to 0, and run latex thrice on etoc-DE.tex - then dvipdfmx on etoc-DE.dvi\endgraf - \medskip - (ignore dvipdfmx warnings, or, in case of problems caused by an old version - of dvipdfmx, set \string\Withdvipdfmx\space to 0 in etoc.tex or - etoc-DE.tex, to compile with pdflatex)\endgraf }% - \fi - \ifnum\ForDeutsch=1 - \texttt{\hyphenchar\font-1 - \parindent 0pt\rightskip 0.5cm minus 0.5cm \selectlanguage{ngerman}% - Diese Dokumentation wurde ohne Einbeziehung des Quellcodes erstellt. Um - die englische Dokumentation mit dem Quellcode zu produzieren, ist - einzubeziehen: \endgraf - \ \ \ \ kompilieren tex mit etoc.dtx oder etoc.ins, um etoc.tex zu - produzieren, \endgraf - \ \ \ \ dann dreimal latex mit etoc.tex, dann dvipdfmx mit etoc.dvi.\endgraf - \medskip - Um die deutsche Dokumentation mit Einbeziehung des Quellcodes zu erstellen, - ist zu kompilieren tex mit etoc.dtx oder etoc.ins, um etoc-DE.tex zu - erzeugen, dann ist \string\NoSourceCode\space in etoc-DE.tex auf 0 zu - setzen, dann ist latex dreimal mit etoc-DE.tex laufen zu lassen, dann - dvipdfmx mit etoc-DE.dvi.\endgraf - \medskip - (Ignorieren Sie dvipdfmx-Warnungen oder, im Falle von Problemen mit einer - alten Version von dvipdfmx, setzen Sie \string\Withdvipdfmx\space auf 0 in - etoc.tex oder etoc-DE.tex um dann pdflatex laufen zu lassen.)\endgraf }% - \fi - \fi -\end{document}} - - -% November 2012 -% I don't want to have to type at this location (far from the top of the -% file) explicitly the package version or version date, as it is -% inconvenient to have to remember to do this when updating the package. -% Also, I prefer not to add macros to the |.sty| file giving the package -% date, name, or version. So I extracted this from the real macrocode -% environment (leaving out the \init@crossref.) - -\makeatletter -\begingroup -\topsep\MacrocodeTopsep -\trivlist\parskip\z@\item[] -\macro@font -\leftskip\@totalleftmargin \advance\leftskip\MacroIndent -\rightskip\z@ \parindent\z@ \parfillskip\@flushglue -\global\@newlistfalse \global\@minipagefalse -\ifcodeline@index - \everypar{\global\advance\c@CodelineNo\@ne - \llap{\theCodelineNo\ \hskip\@totalleftmargin}}% -\fi -\string\NeedsTeXFormat\string{LaTeX2e\string}\par -\string\ProvidesPackage\string{etoc\string}\par -\noindent\space [\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]\par -\nointerlineskip -\global\@inlabelfalse -\endtrivlist -\endgroup -\makeatother - -% The catcode hackery next is to avoid to have <*package> to be listed -% in the commented source code... -% (c) 2012/11/19 jf burnol ;-) - -\MakePercentIgnore - -% -% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 -% \let\relax -% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12} -% -% -%<*package> -% \begin{macrocode} -\RequirePackage{multicol} -\DeclareOption*{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} -\ProcessOptions\relax -% \end{macrocode} -% |1.08| suppresses |\ifEtoc@part| and defines |\ifEtoc@skipprefix|. It -% also defines |\etocglobaldefs|, |\etoclocaldefs| and |\Etoc@global|. -% \begin{macrocode} -\newtoks\Etoc@toctoks -\def\Etoc@par{\par} -\def\etocinline{\def\Etoc@par{}} -\let\etocnopar\etocinline -\def\etocdisplay{\def\Etoc@par{\par}}% 1.07m 2015/01/23 -% \end{macrocode} -% |\etocglobaldefs| should be used only for special things such as TOC as a -% table; it should be put in a group to limit its scope. If used in the -% preamble, it must come \emph{after} |tableof| if the later is loaded too. -% \begin{macrocode} -\let\Etoc@global\@empty % 1.08 2015/03/10 -\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} -\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} -\newif\ifEtoc@jj % book -\newif\ifEtoc@j % part -\newif\ifEtoc@ % chapter -\newif\ifEtoc@i % section -\newif\ifEtoc@ii % subsection -\newif\ifEtoc@iii % subsubsection -\newif\ifEtoc@iv % paragraph -\newif\ifEtoc@v % subparagraph -\newif\ifEtoc@number -\newif\ifEtoc@hyperref -\newif\ifEtoc@parskip % 1.07d -\newif\ifEtoc@tocwithid -\newif\ifEtoc@standard -\newif\ifEtoc@skipprefix % 1.08 -\newif\ifEtoc@isfirst % 1.08 -\newif\ifEtoc@localtoc -\newif\ifEtoc@skipthisone -\newif\ifEtoc@stoptoc -\newif\ifEtoc@notactive -\newif\ifEtoc@mustclosegroup -\def\etoc@{\etoc@} -% \end{macrocode} -% |1.07g| uses a second counter; this could be avoided, but ok, let's not be -% that strict. -% \begin{macrocode} -\newcounter{etoc@tocid} -\newcounter{etoc@tocdepth}% 1.07g -% \end{macrocode} -% |2015/03/08| Why do I use |jj| in the flags and |minustwo| here? and -% is there an entity full of forgiveness out there to save my soul even -% if taking into consideration my use of single and doubled |@|'s ? -% Although I desperately need to waste time I miraculously decided not -% to change everything today and thus the somewhat dispendious set-up -% below is maintained. -% \begin{macrocode} -\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} -\def\Etoc@@minustwo@@{-\tw@} -\let\Etoc@@minusone@@\m@ne -\let\Etoc@@zero@@ \z@ -\let\Etoc@@one@@ \@ne -\let\Etoc@@two@@ \tw@ -\let\Etoc@@three@@ \thr@@ -\chardef\Etoc@@four@@ 4 -\chardef\Etoc@@five@@ 5 -\chardef\Etoc@@six@@ 6 -\let\Etoc@localtop\Etoc@@minustwo@@ -\def\Etoc@@minustwo@{minustwo} -\def\Etoc@@minusone@{minusone} -\def\Etoc@@zero@ {zero} -\def\Etoc@@one@ {one} -\def\Etoc@@two@ {two} -\def\Etoc@@three@ {three} -\def\Etoc@@four@ {four} -\def\Etoc@@five@ {five} -% \end{macrocode} -% |1.07g|. -% \begin{macrocode} -\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} -\expandafter\let\csname Etoc@-2@@\endcsname \Etoc@@minustwo@@ -\expandafter\let\csname Etoc@-1@@\endcsname \Etoc@@minusone@@ -\expandafter\let\csname Etoc@0@@\endcsname \Etoc@@zero@@ -\expandafter\let\csname Etoc@1@@\endcsname \Etoc@@one@@ -\expandafter\let\csname Etoc@2@@\endcsname \Etoc@@two@@ -\expandafter\let\csname Etoc@3@@\endcsname \Etoc@@three@@ -\expandafter\let\csname Etoc@4@@\endcsname \Etoc@@four@@ -\expandafter\let\csname Etoc@5@@\endcsname \Etoc@@five@@ -\expandafter\let\csname Etoc@6@@\endcsname \Etoc@@six@@ -\let\Etoc@all@@ \Etoc@@five@@ -\let\Etoc@none@@ \Etoc@minf -% \end{macrocode} -% Versions earlier than |1.08| did |\Etoc@newlevel| in a quite -% embarrassing way with an |\edef|. -% \begin{macrocode} -\let\Etoc@levellist\@empty -\def\Etoc@newlevel #1% -{\expandafter\def\expandafter\Etoc@levellist\expandafter - {\Etoc@levellist\Etoc@levellist@elt #1}% -} -\def\etocsetlevel#1#2{% - \expandafter\Etoc@newlevel\csname l@#1\endcsname - \ifcase#2\relax - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@zero@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@zero@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@one@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@one@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@two@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@two@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@three@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@three@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@four@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@four@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@five@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@five@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@six@@ - \else - \ifnum#2=\m@ne - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minusone@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minusone@ - \else - \ifnum#2=-\tw@ - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minustwo@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minustwo@ - \else - \PackageWarning{etoc} - {unexpected value `#2' in \string\etocsetlevel.^^J% - Should be -2,-1, 0, 1, 2, 3, 4, 5, or 6. Set to 6 (=ignored)}% - \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@@six@@ -\fi\fi\fi} -\etocsetlevel{book}{-2} -\etocsetlevel{part}{-1} -\etocsetlevel{chapter}{0} -\etocsetlevel{section}{1} -\etocsetlevel{subsection}{2} -\etocsetlevel{subsubsection}{3} -\etocsetlevel{paragraph}{4} -\etocsetlevel{subparagraph}{5} -% \end{macrocode} -% The first two parameters of |\Etoc@et@hop| are exchanged in |1.08| -% compared to earlier versions; this is in relation to changes done in -% |\Etoc@etoccontentsline|. -% \begin{macrocode} -\AtBeginDocument{% -\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% -\@ifpackageloaded{hyperref}{\Etoc@hyperreftrue - \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}% - \long\def\Etoc@gobblesixorfive#1#2#3#4#5#6{}} - {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}% - \long\def\Etoc@gobblesixorfive#1#2#3#4#5{}}% -} -% \end{macrocode} -% |2015/03/08| One has to be careful about the |Etoc@end@| user -% defined macros which may close groups. This has always been the reason -% for the |\global|'s here and elsewhere. -% -% |1.08| uses |\Etoc@level| rather than a |#1| which used to be anyhow always -% the |\Etoc@tmp|. Now |\Etoc@level| is what was called formerly |\Etoc@tmp| -% in |\Etoc@etoccontentsline|. -% \begin{macrocode} -\def\Etoc@setflags {% - \ifcase \Etoc@level - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@true - \or - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@itrue - \or - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iitrue - \or - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiitrue - \or - \global\Etoc@vfalse - \global\Etoc@ivtrue - \or - \global\Etoc@vtrue - \else -% \end{macrocode} -% |2015/03/08| I move up the common assignments. -% \begin{macrocode} - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@false - \ifnum\Etoc@level=\m@ne - \global\Etoc@jtrue - \else - \global\Etoc@jfalse - \global\Etoc@jjtrue - \fi - \fi} -% \end{macrocode} -% |1.08| This was originally in |\Etoc@etoccontentsline|, intermixed -% with the definitions of |\Etoc@contents| and |\Etoc@prefix|. Separated -% here for clarity of code. One has to be careful that this may close -% groups. The conditionals are all global. The |\Etoc@level| has been -% |\global\let| to a |\chardef| variable. The final |\else| of the -% |\ifcase| assumes none of the |\Etoc@end@..| routines modify it, -% naturally. -% \begin{macrocode} -\def\Etoc@doends {% - \ifcase \Etoc@level - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii\Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two\fi - \ifEtoc@i \Etoc@end@one\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii\Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii\Etoc@end@three\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv\Etoc@end@four\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \or - \else - \ifEtoc@v \Etoc@end@five \fi - \ifEtoc@iv \Etoc@end@four \fi - \ifEtoc@iii\Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two \fi - \ifEtoc@i \Etoc@end@one \fi - \ifEtoc@ \Etoc@end@zero \fi - \ifnum \Etoc@level =-\tw@ - \ifEtoc@j \Etoc@end@minusone\fi - \fi - \fi -} -% \end{macrocode} -% Heart of \etoc hack into execution of |.toc| file. It MUST be the case -% that the file contains |\contentsline {}...| instructions, with -% the standard meaning of executing |\l@unit| (the hyperref -% modifications are taken into account). It is the various |\l@unit|'s -% which are (locally) |\let| to |\Etoc@lxyz| and it is |\Etoc@lxyz| -% which does the parsing of the arguments in order to extract name, -% number and page number. Once they are obtained, via the execution of -% this indirectly hacked |\contentsline|, the code executes the -% |\Etoc@prefix| and |\Etoc@contents| corresponding to that unit level, -% according to the user |\etocsetstyle| declarations. Before that the -% begin part is executed when \etoc first encounters that level -% coming from a higher one and the end part will be executed when -% hitting a more important level. -% -% |\etocskipfirstprefix| was already part of the very first release of -% \etoc. Up to |1.07n| it was just an elegant |\@thirdofthree| possibly -% executed just before a |\@firstoftwo{\Etoc@swa{#1}}{\Etoc@swb{#1}}| -% line. But this made it impossible for me to execute things afer the -% |begin| parts. -% -% Executing stuff before |begin| is now a potential problem because the user -% can close some group in the |begin| code (this was in fact impossible in -% versions |<1.08| because this would have erased the definitions of -% |\Etoc@contents| and |\Etoc@prefix|). Thus I am not so free now to define -% things before execution of begin, if I allow people to close a group -% therein, except if I make them global. -% -% The mechanism of |\etocskipfirstprefix| made it impossible to add -% anything at the end of the |begin| codes. Thus I changed it in |1.08| -% to simply work with a (global) boolean flag. This gives user the -% freedom to use |\etocskipfirstprefix| anywhere in the |begin| code and -% it made room for a delimited macro I called |\etoconlyonfirst|. But -% then I dropped it in favor of definition of the |\etociffirst| -% conditional. -% -% Macros |\Etoc@swa| and |\Etoc@swb| which did the |\Etoc@et@hop| thing have -% been suppressed, their effect is incorporated to the end of -% |\Etoc@etoccontentsline|. -% \begin{macrocode} -\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } -% \end{macrocode} -% |2015/03/08| Let's record that |\Etoc@level| used to be called -% |\Etoc@tmp| in versions earlier than |1.08| (and |\Etoc@tmp| is used -% in the completely different ulterior |\Etoc@lxyz| context). The code -% sets it for example to be |\Etoc@section@@| which has been let by -% |\etocsetlevel| to |\@ne|, thus is always self-terminating in -% |\ifnum..\fi| contexts. -% \begin{macrocode} -\def\Etoc@etoccontentsline #1{% - \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname - \Etoc@skipthisonefalse - \ifnum\Etoc@level=\Etoc@@six@@ - \Etoc@skipthisonetrue - \else - \ifEtoc@localtoc - \let\Etoc@next\relax - \ifEtoc@stoptoc - \Etoc@skipthisonetrue - \fi - \ifnum\Etoc@level<\Etoc@localtop - \def\Etoc@next{\global\Etoc@stoptoctrue}% - \Etoc@skipthisonetrue - \fi - \ifEtoc@notactive - \def\Etoc@next{\Etoc@setflags}% - \Etoc@skipthisonetrue - \fi - \Etoc@next - \fi - \fi - \let\Etoc@next\Etoc@gobblesixorfive - \ifnum\c@tocdepth<\Etoc@level - \else - \ifEtoc@skipthisone - \else -% \end{macrocode} -% |1.08| New way to handle the compatibility mode. One has to worry -% only for the local tables of contents (in inactive state, which still -% must be parsed for global level flags) but in this case -% |\Etoc@setflags| was done above already. Earlier method proceeded with -% dummy empty line styles. -% \begin{macrocode} - \ifEtoc@standard\let\Etoc@next\@thirdofthree - \else -% \end{macrocode} -% |2015/03/08| Ever since the first release of \etoc, the code has -% to be careful that the |\Etoc@end@| user defined macros may -% close groups. This is the reason why some assignments have to be done -% globally. The |\let\Etoc@next\Etoc@gobblesixorfive| above could be -% local, because it is used only in case the stuff below is skipped, -% inclusive of |\Etoc@doends| which may close groups. -% -% Versions |1.08| extracts to a separate macro |\Etoc@doends|. Earlier code -% did |\global\let\Etoc@next\relax| but we can now give a default |\relax| -% value to |\Etoc@next| with no need of a |\global| prefix. -% \begin{macrocode} - \Etoc@doends -% \end{macrocode} -% |1.08| the |\Etoc@next| will (possibly) execute the |begin| code, -% \emph{before} |\Etoc@contents| and |\Etoc@prefix| get defined, -% contrarily to what I did in earlier versions. I still reset the flags -% before execution of the |begin| codes (although the flags are not -% supposed to be used therein anyhow). -% -% Also the \meta{begin} code does |\Etoc@isfirsttrue|. -% \begin{macrocode} - \let\Etoc@next\@empty - \Etoc@global\Etoc@isfirstfalse -% \end{macrocode} -% |2015/03/08| If my naming scheme had not been so baroque, I could easily do -% things in a more concise way here... -% \begin{macrocode} - \ifcase\Etoc@level - \ifEtoc@\else \def\Etoc@next{\Etoc@begin@zero}\fi - \or - \ifEtoc@i\else \def\Etoc@next{\Etoc@begin@one}\fi - \or - \ifEtoc@ii\else \def\Etoc@next{\Etoc@begin@two}\fi - \or - \ifEtoc@iii\else \def\Etoc@next{\Etoc@begin@three}\fi - \or - \ifEtoc@iv\else \def\Etoc@next{\Etoc@begin@four}\fi - \or - \ifEtoc@v\else \def\Etoc@next{\Etoc@begin@five}\fi - \else - \ifnum\Etoc@level=\m@ne - \ifEtoc@j\else \def\Etoc@next{\Etoc@begin@minusone}\fi - \else - \ifEtoc@jj\else \def\Etoc@next{\Etoc@begin@minustwo}\fi - \fi - \fi - \Etoc@setflags - \Etoc@next - \let\Etoc@next\@empty -% \end{macrocode} -% |1.08|: -% \begin{enumerate} -% \item separates the definition of |\Etoc@prefix| and -% |\Etoc@contents| from the execution of the |end| parts. And it does -% the definition with some |\csname|'s. -% -% \item implements |\etocskipfirstprefix| with a boolean, this is less slick -% but more flexible than the earlier method. -% -% \item defines the |\etociffirst| conditional. -% -% \item has |\Etoc@level| rather than |\Etoc@tmp| and thus we can dispense -% with the |\ifEtoc@part| switch as we will be able to test the equality -% |\Etoc@level=-1| inside of |\Etoc@lxyz|. -% -% \item adds the |\Etoc@global| prefix. -% \end{enumerate} -% \begin{macrocode} - \Etoc@global\expandafter\def\expandafter\Etoc@prefix\expandafter - {\csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname }% - \Etoc@global\expandafter\def\expandafter\Etoc@contents\expandafter - {\csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname }% - \ifEtoc@skipprefix \Etoc@global\let\Etoc@prefix\@empty\fi - \global\Etoc@skipprefixfalse - \fi\fi\fi -% \end{macrocode} -% |1.08| modifies the ending to not use the |\Etoc@swa| and |\Etoc@swb| -% things. With this version, the |\Etoc@next| here is only to gobble -% everything if it has to (or gobble only the \etoc things, when in -% compatibility mode). -% -% For the record we don't do |\csname l@#1\endcsname| mainly because -% hyperref patches |\contentsline|. -% -% The location where |\Etoc@savedcontentsline| is |\let| to -% |\contentsline| has been moved with release |1.08| to before the -% title as set by |\etocsettoctyle|, thus it is now possible to open a -% tabular in this part. And with the |\Etoc@global| prefix the user may -% opt for global definitions of |\etocname| and the like, thus use -% freely |&| and other group closing things. Also, some care has been -% put into doing only expandable things after expansion of the -% \meta{prefix} and \meta{contents} parts of a sectioning unit style. -% \begin{macrocode} - \Etoc@next - \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}% -} -% \end{macrocode} -% |2013/03/07|: -% -% Up to |1.06| \etoc defined only \csa{etocname}, \csa{etocnumber} and -% \csa{etocpage}. The |hyperref| added data is recycled in the simplest manner, -% prefixing it with \csa{leavevmode}. The included \csa{Hy@tocdestname} is left -% unexpanded. We have to spend some time with delimited macros to -% dis-entangle the |.toc| data, and reconstruct the possible |hyperref| -% data. If -% the page number is not hyperlinked, \csa{etocpage} does \emph{not} add the -% link found possibly in the name. -% -% Then |1.07| added \csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage} -% which are left fragile and do not have the links data, and -% \csa{etoclink}\marg{linkname} which is robust and reconstructs an arbitrarily -% named link. A need (for things like building up a token list to be used in a -% |tikzpicture|) arose later to have some form of the link which could be saved -% by a simple command like one can do |\global\let\lastname\etocthename|, and -% avoid having to manipulate \csa{Hy@tocdestname}. So |1.07f| adds -% \csa{etocthelinkedname}, \csa{etocthelinkednumber}, \csa{etocthelinkedpage}, -% \csa{etocthelink}: they use \csa{hyperlink} with an expanded -% \csa{Hy@tocdestname}. -% -% One could now define \csa{etocname}, etc ... to be the robust versions of -% \csa{etocthelinkedname}, etc ..., but the original definitions are kept by -% sentimentalism. |1.07f| also adds \csa{leavevmode} to \csa{etoclink} which -% should have been done earlier, as it was included in \csa{etocname} etc... -% -% attention, \csa{@namedef}|{A}{B}| and not \csa{@namedef}|{A} {B}| !! -% on the other hand this gives a simple way to insert a space as the first -% token in the paramaters. For \csa{Etoc@again} (which appears later in the -% code), a \csa{@firstofone} construct is however the simplest of all. -% -% |2015/03/09|: |1.08| adds |\Etoc@global| prefix. -% \begin{macrocode} -\def\Etoc@lxyz #1#2{% - \Etoc@global\@namedef {etoclink }{\leavevmode}% fall-back - \Etoc@global\let\etocthelink \@empty % fall-back - \Etoc@global\@namedef {etocname }{\leavevmode #1}% fall-back (perhaps linked) - \Etoc@global\def\etocthename {#1}% (if link, will be removed later) - \Etoc@global\def\etocthelinkedname {#1}% will probably get redefined - \Etoc@global\@namedef {etocpage }{\leavevmode #2}% (perhaps linked) - \Etoc@getthepage #2\etoc@ % defines also \etocthelinkedpage (and \etoclink) - \Etoc@getnb #1\relax\relax\etoc@ % gets number *and* name, and \etoclink - \ifEtoc@number\else - \ifnum\Etoc@level=\m@ne - \Etoc@getit #1\hspace\relax\etoc@ % additional job for parts - \fi - \fi} -% \end{macrocode} -% |1.08| adds the |\Etoc@global|'s. -% \begin{macrocode} -\def\Etoc@getthepage #1{% - \let\Etoc@next\Etoc@getthepage@nohyp - \ifEtoc@hyperref\ifx #1\hyper@linkstart - \let\Etoc@next\Etoc@getthepage@hyp - \fi\fi - \Etoc@next #1% -} -\def\Etoc@getthepage@nohyp #1\etoc@ {% - \Etoc@global\def\etocthepage {#1}% - \Etoc@global\def\etocthelinkedpage {#1}% -} -% \end{macrocode} -% |1.07k| corrects a bug here with an extra space before |##1| in -% |\@namedef{etoclink } ##1|. In 99.99\% of use cases however, the -% macro gets redefined at a later stage, thus the bug did not show. -% -% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. Thus, the user has -% the (not so recommended) possibility to use |\toks@| in the styles, even to -% store information whose scope extends beyond the execution of each -% |\contentsline|. -% -% |1.08| adds the |\Etoc@global|'s. -% \begin{macrocode} -\def\Etoc@getthepage@hyp #1#2#3#4#5\etoc@ {% - \Etoc@global\@namedef{etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}% - \Etoc@global\def\etocthepage {#4}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedpage\expandafter - {\expandafter\hyperlink \Etoc@tmp{#4}}% -} -% -\def\Etoc@getnb #1{% - \let\Etoc@next\Etoc@getnb@nohyp - \ifEtoc@hyperref\ifx #1\hyper@linkstart - \let\Etoc@next\Etoc@getnb@hyp - \fi\fi - \Etoc@next #1% -} -% -\def\Etoc@getit #1{% - \let\Etoc@next\Etoc@getit@nohyp - \ifEtoc@hyperref\ifx #1\hyper@linkstart - \let\Etoc@next\Etoc@getit@hyp - \fi\fi - \Etoc@next #1% -} -% \end{macrocode} -% |1.08| adds the |\Etoc@global|'s. -% \begin{macrocode} -\def\Etoc@getnb@nohyp #1#2#3\etoc@ {% - \def\Etoc@getname ##1\relax\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode ##1}% - \Etoc@global\def\etocthename {##1}% - \Etoc@global\def\etocthelinkedname {##1}% - }% - \ifx #1\numberline - \Etoc@global\@namedef {etocnumber }{\leavevmode #2}% - \Etoc@global\def\etocthenumber {#2}% - \Etoc@global\def\etocthelinkednumber {#2}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname #3\etoc@ - \else % then \etocthename and \etocthelinkedname already defined - \Etoc@global\@namedef {etocnumber }{\leavevmode}% - \Etoc@global\let\etocthenumber \@empty - \Etoc@global\let\etocthelinkednumber \@empty - \Etoc@global\Etoc@numberfalse - \fi -} -% \end{macrocode} -% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds -% the |\Etoc@global|'s. -% \begin{macrocode} -\def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {% - \Etoc@global\def\Etoc@getname ##1\relax\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\def\etocthename {##1}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedname\expandafter - {\expandafter\hyperlink \Etoc@tmp{##1}}% - }% - \def\Etoc@getnbr ##1##2##3\etoc@ {% - \ifx ##1\numberline - \Etoc@global\@namedef {etocnumber }{\leavevmode #1{#2}{#3}{##2}#5}% - \Etoc@global\def\etocthenumber {##2}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkednumber - \expandafter{\expandafter\hyperlink \Etoc@tmp{##2}}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname ##3\etoc@ - \else - \Etoc@global\@namedef {etocnumber }{\leavevmode}% - \Etoc@global\let\etocthenumber \@empty - \Etoc@global\let\etocthelinkednumber \@empty - \Etoc@global\Etoc@numberfalse - \Etoc@global\def\etocthename {#4}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedname - \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}% - \fi - }% - \Etoc@global\@namedef {etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}% - \Etoc@getnbr #4\relax\relax\etoc@ -} -% \end{macrocode} -% |1.08| adds the |\Etoc@global|'s. -% \begin{macrocode} -\def\Etoc@getit@nohyp #1\hspace#2#3\etoc@ {% - \def\Etoc@getname ##1\hspace\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode ##1}% - \Etoc@global\def\etocthename {##1}% - \Etoc@global\def\etocthelinkedname {##1}% - }% - \ifx\relax#2\else - \Etoc@global\@namedef {etocnumber }{\leavevmode #1}% - \Etoc@global\def\etocthenumber {#1}% - \Etoc@global\def\etocthelinkednumber {#1}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname #3\etoc@ - \fi -} -% \end{macrocode} -% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds -% the |\Etoc@global|'s. -% \begin{macrocode} -\def\Etoc@getit@hyp #1#2#3#4#5#6\etoc@ {% - \def\Etoc@getname ##1\hspace\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\def\etocthename {##1}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedname - \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% - }% - \def\Etoc@getnbr ##1\hspace##2##3\etoc@ {% - \ifx\relax##2\else - \Etoc@global\@namedef {etocnumber }{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\def\etocthenumber {##1}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkednumber - \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname ##3\etoc@ - \fi - }% - \Etoc@getnbr #4\hspace\relax\etoc@ -} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\let\etocthename \@empty -\let\etocthenumber \@empty -\let\etocthepage \@empty -\let\etocthelinkedname \@empty -\let\etocthelinkednumber \@empty -\let\etocthelinkedpage \@empty -\let\etocthelink \@empty -\DeclareRobustCommand*{\etocname} {} -\DeclareRobustCommand*{\etocnumber}{} -\DeclareRobustCommand*{\etocpage} {} -\DeclareRobustCommand*{\etoclink} {} -\DeclareRobustCommand*{\etocifnumbered} - {\ifEtoc@number\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} -\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname -% \end{macrocode} -% |1.08| defines |\etociffirst| -\DeclareRobustCommand*{\etociffirst} - {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} -\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname -% \begin{macrocode} -% \end{macrocode} -% |1.07j| modifies |\Etoc@readtoc|. -% \begin{macrocode} -\def\Etoc@readtoc {% - \ifeof \Etoc@tf - \else - \read \Etoc@tf to \Etoc@buffer - \Etoc@toctoks=\expandafter\expandafter\expandafter - {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% - \expandafter\Etoc@readtoc - \fi -} -% \end{macrocode} -% |1.07m| moves the reading of the toc file At Begin Document. Needed for -% Babel activated characters. -% \begin{macrocode} -\Etoc@toctoks {}% (superfluous, but for clarity) -\AtBeginDocument{\IfFileExists{\jobname.toc} - {{\endlinechar=-1 - \makeatletter - \newread\Etoc@tf - \openin\Etoc@tf\@filef@und - \Etoc@readtoc - \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% - \closein\Etoc@tf}} - {\typeout{No file \jobname.toc.}}} -% \end{macrocode} -% 1.07d: parskip and |\@nobreakfalse| stuff moved to |\Etoc@tableofcontents| -% \begin{macrocode} -\def\Etoc@openouttoc{% - \ifEtoc@hyperref - \ifx\hyper@last\@undefined - \IfFileExists{\jobname .toc} - {\Hy@WarningNoLine - {old toc file detected, not used; run LaTeX again (cheers from etoc)}% - \global\Etoc@toctoks={}% - } - {}% - \fi - \fi - \if@filesw - \newwrite \tf@toc - \immediate \openout \tf@toc \jobname .toc\relax - \fi - \global\let\Etoc@openouttoc\empty -} -% \end{macrocode} -% |1.08| has a new way to handle |\Etoc@standardtrue|. -% -% Also the expansion of |\Etoc@levelist| is moved to inside -% |\Etoc@tableofcontents| as set-up by |\etocsettocstyle|. This opens up -% the possibility for the user to open a group in the title (for example -% start a tabular) which would be closed (by the first |&|) sometime -% later. In combination with |\etocglobaldefs| it will be now much -% easier to typeset TOC as tables with \etoc! -% \begin{macrocode} -\def\Etoc@toctoc{% - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@false - \global\Etoc@jfalse - \global\Etoc@jjfalse -\the\Etoc@toctoks -\ifEtoc@notactive\else - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii \Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two\fi - \ifEtoc@i \Etoc@end@one\fi - \ifEtoc@ \Etoc@end@zero\fi - \ifEtoc@j \Etoc@end@minusone\fi - \ifEtoc@jj \Etoc@end@minustwo\fi -\fi} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etoc@@startlocaltoc#1#2{% -\let\Etoc@next\relax - \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 - \def\Etoc@next{\global\Etoc@notactivefalse - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@false - \global\Etoc@jfalse - \global\Etoc@jjfalse}% - \fi - \fi\fi -\Etoc@next} -\let\etoc@startlocaltoc\@gobble -% \end{macrocode} -% |1.07g| suppresses the printing of |--unknown etoc ref: run latex again--| as -% sometimes one uses |\localtableofcontents| to prepare something else, and one -% does not want any text output even in intermediate runs. -% -% Also |1.07g| adds |\etocaftertochook| to help with -% |\invisiblelocaltableofcontents| (and then I did |\etocsetnexttocdepth|). -% |1.07h| makes the hook used by |\etocsetnexttocdepth| private. -% \begin{macrocode} -\def\Etoc@localtableofcontents#1{% - \edef\Etoc@tmp{#1}% - \ifnum\Etoc@tmp<\@ne - \PackageWarning{etoc} - {Unknown toc id: run LaTeX to get references right}% - \let\Etoc@next\@gobble\else\let\Etoc@next\@firstofone\fi - \Etoc@next - {\edef\etoc@startlocaltoc##1{% - \noexpand\etoc@@startlocaltoc{##1}{#1}} - \Etoc@localtoctrue - \let\Etoc@localtop\Etoc@@minustwo@@ - \global\Etoc@stoptocfalse - \global\Etoc@notactivetrue - \Etoc@tableofcontents}% - \endgroup\ifEtoc@mustclosegroup\endgroup\fi - \Etoc@aftertochook % 1.07h - \etocaftertochook % 1.07g -} -% \end{macrocode} -% |2013/03/07|: I discover a \csa{@namedef} trick to construct the -% \csa{Etoc@again} space delimited macro:\\ -% | \@namedef {Etoc@again} {...stuff...}|\\ -% Original version was (copied from analogous stuff in |source2e|):\\ -% | {\def\1{\Etoc@again}\expandafter\gdef\1 {...stuff...}}|\\ -% and in the end (now that I think about it) I simply use |\@firstofone|.\par -% \begin{macrocode} -\def\Etoc@getrefno #1#2\etoc@ {#1} -\def\Etoc@getref #1{\@ifundefined{r@#1}{0}{\expandafter\expandafter\expandafter - \Etoc@getrefno\csname r@#1\endcsname\relax\etoc@}} -\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} -\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -% \end{macrocode} -% Why |\global| for |\Etoc@notactivefalse|? and not for -% |\Etoc@localtocfalse|. Must think about this, a pity I did not -% document it when I was young and intelligent ... -% \begin{macrocode} -\def\Etoc@t@bleofcontents{% - \ifx\Etoc@nexttoken\label - \def\Etoc@next{\expandafter\Etoc@label\@gobble}\else - \ifx\Etoc@nexttoken\@sptoken - \let\Etoc@next\Etoc@again\else - \ifEtoc@tocwithid - \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}% - \else - \ifx\Etoc@nexttoken\ref - \def\Etoc@next{\expandafter\Etoc@ref\@gobble}% - \else - \def\Etoc@next{\Etoc@localtocfalse - \global\Etoc@notactivefalse - \Etoc@tableofcontents - \endgroup - \ifEtoc@mustclosegroup\endgroup\fi - \Etoc@aftertochook % 1.07h - \etocaftertochook % 1.07g - }% - \fi - \fi\fi\fi\Etoc@next} -% \end{macrocode} -% |1.07g| for consistency Etoc@ prefix added. -% \begin{macrocode} -\def\Etoc@table@fcontents{% - \refstepcounter{etoc@tocid}% - \Etoc@tocwithidfalse - \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -\def\Etoc@localtable@fcontents{% - \refstepcounter{etoc@tocid}% - \addtocontents{toc} - {\string\etoc@startlocaltoc{\arabic{etoc@tocid}}}% - \Etoc@tocwithidtrue - \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -% \end{macrocode} -% |1.07g| defines |\etoctableofcontents| to be able to undo the evil and -% brutal doings of some packages with |\tableofcontents|. -% -% |1.08| patches |tableof|'s influence. Version |1.4a| or later of |tableof| -% is needed. -% \begin{macrocode} -\let\etocaftertitlehook \@empty -\let\etocaftercontentshook \@empty -\def\etoctableofcontents{% - \Etoc@openouttoc - \Etoc@par - \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents -% \end{macrocode} -% No need for tableof extra group level, and furthermore -% it is better to get rid of it if. However I can't do it globally because I -% want to leave open for the user the possibility (whose interest is quasi nil -% however) of using directly |\tableof|, |\tablenotof|, ... and not the only -% reasonable thing which is |\nexttocwithtags{}{}|. -% \begin{macrocode} - \let\tof@begingroup\@empty - \let\tof@endgroup \@empty - \def\etoc@startlocaltoc##1{\etoc@@startlocaltoc{##1}{\c@etoc@tocid}}% - \@ifstar - {\def\Etoc@aftertitlehook{}\Etoc@table@fcontents} - {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@table@fcontents}} -\let\tableofcontents\etoctableofcontents -\newcommand*\localtableofcontents{% - \Etoc@openouttoc - \Etoc@par - \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents - \let\tof@begingroup\@empty - \let\tof@endgroup \@empty - \@ifstar - {\def\Etoc@aftertitlehook{}\Etoc@localtable@fcontents} - {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@localtable@fcontents}} -% \end{macrocode} -% |1.08| moves earlier the definitions of |\Etoc@savedcontentsline| as -% well as |\Etoc@levellist|. It will thus not be operative to do -% |\etocsetlevel| from inside the title now. But perhaps it will be -% easier to deal with tables. -% -% Also I remove a big |\@firstofone|, and use rather -% |\Etoc@gobbletoetoc@| for the gobbling case. -% -% Also, |1.08| modifies the code to do only expandable things after -% |\Etoc@toctoc|, in order to allow opening of an alignment in the first -% argument and closing in the second. Earlier versions had an -% |\Etoc@@next| initially set to relax after the first |\Etoc@toctoc|. I -% was in 2012/2013 quite uneasy with the TeX conditionals hence wanted -% for safety to move the things for the second invocation of -% |\Etoc@toctoc| after the |\fi\fi\fi|. I could define an |\afterfififi| -% macro, but it should be ok as it is done here. -% \begin{macrocode} -\long\def\Etoc@gobbletoetoc@ #1\etoc@ {} -\newcommand\etocsettocstyle[2]{% -\def\Etoc@tableofcontents -{% - \ifnum\c@tocdepth>\Etoc@minf\else - \expandafter\Etoc@gobbletoetoc@ - \fi - \etocbeforetitlehook % 1.07m - \Etoc@storetocdepth % 1.07g - \let\Etoc@savedcontentsline\contentsline % moved up here 1.08 - \let\contentsline\Etoc@etoccontentsline - \ifEtoc@standard - \else % moved here from \Etoc@toctoc (1.08) - \def\Etoc@levellist@elt####1{\let####1\Etoc@lxyz}% - \Etoc@levellist - \let\booknumberline\numberline - \let\partnumberline\numberline - \let\chapternumberline\numberline - \fi - #1% - \ifEtoc@parskip\parskip\z@skip\fi %1.07d - \Etoc@aftertitlehook - \Etoc@toctoc - \ifEtoc@tocwithid\else - \ifEtoc@localtoc - \ifEtoc@notactive - \Etoc@localtocfalse - \global\Etoc@notactivefalse - \Etoc@toctoc - \fi - \fi - \fi - \etocaftercontentshook - #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here - \Etoc@resettocdepth % 1.07g. moved here from before #2 by 1.08 -% \end{macrocode} -% |1.08|: necessary if |tableof 1.4a| has been used in global mode and thus -% was forced to modify globally |\contentsline|. The collateral effect is that -% \etoc is now forced to reset globally |\contentsline|. -% \begin{macrocode} - \ifx\Etoc@global\global\ifx\tof@finish\@empty\else - \global\let\contentsline\Etoc@savedcontentsline - \fi\fi - \@gobble\etoc@ -}% end of \Etoc@tableofcontents definition by \etocsettocstyle -} -% \end{macrocode} -% |2015/03/09| |1.08| hacks the begin parts to update therein the -% |\ifEtoc@isfirst| flag. -% \begin{macrocode} -\def\etocsetstyle{\Etoc@standardfalse\etoc@setstyle} -\long\def\etoc@setstyle#1#2#3#4#5{% - \long\expandafter\def - \csname Etoc@begin@\csname Etoc@#1@\endcsname\endcsname - {#2\Etoc@global\Etoc@isfirsttrue}% - \long\expandafter\def - \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname {#3}% - \long\expandafter\def - \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname {#4}% - \long\expandafter\def - \csname Etoc@end@\csname Etoc@#1@\endcsname\endcsname {#5}% -} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocfontminustwo {\normalfont \LARGE \bfseries} -\def\etocfontminusone {\normalfont \large \bfseries} -\def\etocfontzero {\normalfont \large \bfseries} -\def\etocfontone {\normalfont \normalsize \bfseries} -\def\etocfonttwo {\normalfont \normalsize} -\def\etocfontthree {\normalfont \footnotesize} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} -\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} -\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} -\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} -\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} -\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocbaselinespreadminustwo {1} -\def\etocbaselinespreadminusone {1} -\def\etocbaselinespreadzero {1} -\def\etocbaselinespreadone {1} -\def\etocbaselinespreadtwo {1} -\def\etocbaselinespreadthree {.9} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocminustwoleftmargin {1.5em plus 0.5fil} -\def\etocminustworightmargin {1.5em plus -0.5fil} -\def\etocminusoneleftmargin {1em} -\def\etocminusonerightmargin {1em} -\def\etoctoclineleaders - {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} -\def\etocabbrevpagename {p.~} -\def\etocpartname {\partname} -\def\etocbookname {Book} -% \end{macrocode} -% placeholder for comments -% The macro \csa{etocdefaultlines} was initially called \csa{etoctoclines}. Now -% \csa{etoctoclines} just does \csa{Etoc@standardfalse}. -% Version |1.07e| has rewritten entirely the stuff related to penalties and -% \csa{addvspace}, as this was not satisfactory in the earlier versions, which -% were written at a early stage in the development of the -% package. Actually I am not fully satisfied with these line styles. -% -% \begin{macrocode} -\def\etocdefaultlines{\Etoc@standardfalse % -%% `book': -\etoc@setstyle{@minustwo} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@secpenalty} - {\begingroup - \etocfontminustwo - \addvspace{\etocsepminustwo}% - \parindent \z@ - \leftskip \etocminustwoleftmargin - \rightskip \etocminustworightmargin - \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocbookname\enspace\etocnumber:\quad}{}\etocname - \baselineskip\etocbaselinespreadminustwo\baselineskip - \par}% - \addpenalty\@M\addvspace{\etocsepminusone}% - \endgroup} - {}% -%% `part': -\etoc@setstyle{@minusone} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@secpenalty} - {\begingroup - \etocfontminusone - \addvspace{\etocsepminusone}% - \parindent \z@ - \leftskip \etocminusoneleftmargin - \rightskip \etocminusonerightmargin - \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}\etocname - \baselineskip\etocbaselinespreadminusone\baselineskip - \par}% - \addpenalty\@M\addvspace{\etocsepzero}% - \endgroup} - {}% -%% `chapter': -\etoc@setstyle{@zero} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@itempenalty} - {\begingroup - \etocfontzero - \addvspace{\etocsepzero}% - \parindent \z@ \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname - \baselineskip\etocbaselinespreadzero\baselineskip - \par}% - \endgroup} - {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% -%% `section': -\etoc@setstyle{@one} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@itempenalty} - {\begingroup - \etocfontone - \addvspace{\etocsepone}% - \parindent \z@ \parfillskip \z@ - \setbox\z@\vbox{\parfillskip\@flushglue - \etocname\par - \setbox\tw@\lastbox - \global\setbox\@ne\hbox{\unhbox\tw@\ }}% - \dimen\z@=\wd\@ne - \setbox\z@=\etoctoclineleaders - \advance\dimen\z@\wd\z@ - \etocifnumbered - {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} - {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% - \advance\dimen\z@\wd\tw@ - \ifdim\dimen\z@ < \linewidth - \vbox{\etocname~% - \leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadone\baselineskip - \par} - \else - \vbox{\etocname~% - \leaders\copy\z@\hfil\break - \hbox{}\leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadone\baselineskip - \par} - \fi - \endgroup} - {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% -%% `subsection': -\etoc@setstyle{@two} - {\addpenalty\@medpenalty\etocskipfirstprefix} - {\addpenalty\@itempenalty} - {\begingroup - \etocfonttwo - \addvspace{\etocseptwo}% - \parindent \z@ \parfillskip \z@ - \setbox\z@\vbox{\parfillskip\@flushglue - \etocname\par\setbox\tw@\lastbox - \global\setbox\@ne\hbox{\unhbox\tw@}}% - \dimen\z@=\wd\@ne - \setbox\z@=\etoctoclineleaders - \advance\dimen\z@\wd\z@ - \etocifnumbered - {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} - {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% - \advance\dimen\z@\wd\tw@ - \ifdim\dimen\z@ < \linewidth - \vbox{\etocname~% - \leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadtwo\baselineskip - \par} - \else - \vbox{\etocname~% - \leaders\copy\z@\hfil\break - \hbox{}\leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadtwo\baselineskip - \par} - \fi - \endgroup} - {\addpenalty\@secpenalty\addvspace{\etocsepone}}% -%% `subsubsection': -\etoc@setstyle{@three} - {\addpenalty\@M - \etocfontthree - \vspace{\etocsepthree}% - \noindent - \etocskipfirstprefix} - {\allowbreak\,--\,} - {\etocname} - {.\hfil - \begingroup - \baselineskip\etocbaselinespreadthree\baselineskip - \par - \endgroup - \addpenalty{-\@highpenalty}}% -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\etoc@setstyle{@four}{}{}{}{}% -\etoc@setstyle{@five}{}{}{}{}% -} % end of \etocdefaultlines! -% \end{macrocode} -% The |\etocinnertopsep| default value is too big as well as |\etocbelowtocskip| -% and |\etocabovetocskip|, I guess, but if I am remember correctly I chose them -% to mimick the standard TOC spacings in |article| class. -% \begin{macrocode} -\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} -\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} -\def\etoccolumnsep{2em} -\def\etocmulticolsep{0ex} -\def\etocmulticolpretolerance{-1} -\def\etocmulticoltolerance{200} -\def\etocdefaultnbcol{2} -\def\etocinnertopsep{2ex} -% \end{macrocode} -% |1.07i| adds a |\nobreak| before the |\etocinnertopsep| and a test of vertical -% mode to see if truly adding a |\par| is a reasonable idea, in the -% case of single-column mode. -% \begin{macrocode} -\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% -\etocsettocstyle - {\let\etocoldpar\par - \addvspace{\etocabovetocskip}% - \ifnum #1>\@ne\let\Etoc@next\@firstoftwo - \else \let\Etoc@next\@secondoftwo\fi - \Etoc@next{% - \multicolpretolerance\etocmulticolpretolerance - \multicoltolerance\etocmulticoltolerance - \setlength{\columnsep}{\etoccolumnsep}% - \setlength{\multicolsep}{\etocmulticolsep}% - \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} - {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip - \@@par\endgroup - \fi - \nobreak\addvspace{\etocinnertopsep}% - \pretolerance\etocmulticolpretolerance - \tolerance\etocmulticoltolerance}} - {\ifnum #1>\@ne\let\Etoc@next\@firstofone - \else \let\Etoc@next\@gobble\fi - \Etoc@next{\end{multicols}}% - \addvspace{\etocbelowtocskip}}} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocinnerbottomsep{3.5ex} -\def\etocinnerleftsep{2em} -\def\etocinnerrightsep{2em} -\def\etoctoprule{\hrule} -\def\etocleftrule{\vrule} -\def\etocrightrule{\vrule} -\def\etocbottomrule{\hrule} -\def\etoctoprulecolorcmd{\relax} -\def\etocbottomrulecolorcmd{\relax} -\def\etocleftrulecolorcmd{\relax} -\def\etocrightrulecolorcmd{\relax} -% \end{macrocode} -% |1.07i| moves the |\nobreak| to before the |\vskip\etocinnertopsep| -% (especially important for the single column case). -% \begin{macrocode} -\def\etoc@ruledheading #1{% - \hb@xt@\linewidth{\color@begingroup - \hss #1\hss\hskip-\linewidth - \etoctoprulecolorcmd\leaders\etoctoprule\hss - \phantom{#1}% - \leaders\etoctoprule\hss\color@endgroup}% - \nointerlineskip\nobreak\vskip\etocinnertopsep} -\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% -\etocsettocstyle - {\addvspace{\etocabovetocskip}% - \ifnum #1>\@ne\let\Etoc@next\@firstoftwo - \else \let\Etoc@next\@secondoftwo\fi - \Etoc@next - {\multicolpretolerance\etocmulticolpretolerance - \multicoltolerance\etocmulticoltolerance - \setlength{\columnsep}{\etoccolumnsep}% - \setlength{\multicolsep}{\etocmulticolsep}% - \begin{multicols}{#1}[\etoc@ruledheading{#2}]} - {\etoc@ruledheading{#2}% - \pretolerance\etocmulticolpretolerance - \tolerance\etocmulticoltolerance}} - {\ifnum #1>\@ne\let\Etoc@next\@firstofone - \else \let\Etoc@next\@gobble\fi - \Etoc@next{\end{multicols}}% - \addvspace{\etocbelowtocskip}}} -% \end{macrocode} -% |1.07k| defines |\Etoc@relax| and |\etocbkgcolorcmd| as |\long|: the user -% manual says to use |\renewcommand\etocbkgcolorcmd|, and an |\ifx| test is used -% in the framed style. It was thus a bug to have non-long definitions before. Or -% I could have said in the user manual to use |\renewcommand*|, or in -% |\etocframedstyle| I should test for the two, or I should pause to try to -% remember about this code and think about it. -% \begin{macrocode} -\def\etocframedmphook{\relax} -\long\def\etocbkgcolorcmd{\relax} -\long\def\Etoc@relax{\relax} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\newbox\etoc@framed@titlebox -\newbox\etoc@framed@contentsbox -\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% -\etocsettocstyle{% - \addvspace{\etocabovetocskip}% - \sbox\z@{#2}% - \dimen\z@\dp\z@ - \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi - \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup - \hss - \ifx\etocbkgcolorcmd\Etoc@relax\else - \sbox\tw@{\color{white}% - \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% - \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi - \box\tw@ - \hskip-\wd\z@ - \fi - \copy\z@ - \hss - \hskip-\linewidth - \etoctoprulecolorcmd\leaders\etoctoprule\hss% - \hskip\wd\z@ - \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% - \setbox\z@\hbox{\etocleftrule\etocrightrule}% - \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ - \advance\dimen\tw@-\etocinnerleftsep - \advance\dimen\tw@-\etocinnerrightsep - \setbox\etoc@framed@contentsbox=\vbox\bgroup - \hsize\dimen\tw@ - \kern\dimen\z@ - \vskip\etocinnertopsep - \hbox\bgroup - \begin{minipage}{\hsize}% - \etocframedmphook - \ifnum #1>\@ne\let\Etoc@next\@firstoftwo - \else \let\Etoc@next\@secondoftwo\fi - \Etoc@next - {\multicolpretolerance\etocmulticolpretolerance - \multicoltolerance\etocmulticoltolerance - \setlength{\columnsep}{\etoccolumnsep}% - \setlength{\multicolsep}{\etocmulticolsep}% - \begin{multicols}{#1}} - {\pretolerance\etocmulticolpretolerance - \tolerance\etocmulticoltolerance}} - {\ifnum #1>\@ne\let\Etoc@next\@firstofone - \else \let\Etoc@next\@gobble\fi - \Etoc@next{\end{multicols}\unskip}% - \end{minipage}% - \egroup - \vskip\etocinnerbottomsep - \egroup - \vbox{\hsize\linewidth - \ifx\etocbkgcolorcmd\Etoc@relax\else - \kern\ht\etoc@framed@titlebox - \kern\dp\etoc@framed@titlebox - \hb@xt@\linewidth{\color@begingroup - \etocleftrulecolorcmd\etocleftrule - \etocbkgcolorcmd - \leaders\vrule - \@height\ht\etoc@framed@contentsbox - \@depth\dp\etoc@framed@contentsbox - \hss - \etocrightrulecolorcmd\etocrightrule - \color@endgroup}\nointerlineskip - \vskip-\dp\etoc@framed@contentsbox - \vskip-\ht\etoc@framed@contentsbox - \vskip-\dp\etoc@framed@titlebox - \vskip-\ht\etoc@framed@titlebox - \fi - \box\etoc@framed@titlebox\nointerlineskip - \hb@xt@\linewidth{\color@begingroup - {\etocleftrulecolorcmd\etocleftrule}% - \hss\box\etoc@framed@contentsbox\hss - \etocrightrulecolorcmd\etocrightrule\color@endgroup} - \nointerlineskip - \vskip\ht\etoc@framed@contentsbox - \vskip\dp\etoc@framed@contentsbox - \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd - \leaders\etocbottomrule\hss\color@endgroup}} - \addvspace{\etocbelowtocskip}}} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \tableofcontents} -\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \tableofcontents*} -\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \localtableofcontents} -\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \localtableofcontents*} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \tableofcontents} -\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \tableofcontents*} -\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \localtableofcontents} -\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \localtableofcontents*} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \tableofcontents} -\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \tableofcontents*} -\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \localtableofcontents} -\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \localtableofcontents*} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocmulticol{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@multicoltoci} - {\etoc@multicoltoc}} -\def\etocruled{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@ruledtoci} - {\etoc@ruledtoc}} -\def\etocframed{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@framedtoci} - {\etoc@framedtoc}} -\def\etoclocalmulticol{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@local@multicoltoci} - {\etoc@local@multicoltoc}} -\def\etoclocalruled{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@local@ruledtoci} - {\etoc@local@ruledtoc}} -\def\etoclocalframed{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@local@framedtoci} - {\etoc@local@framedtoc}} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocarticlestyle{% - \etocsettocstyle - {\section *{\contentsname - \@mkboth {\MakeUppercase \contentsname} - {\MakeUppercase \contentsname}}} - {}} -\def\etocarticlestylenomarks{% - \etocsettocstyle - {\section *{\contentsname}} - {}} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocbookstyle{% - \etocsettocstyle - {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi - \chapter *{\contentsname - \@mkboth {\MakeUppercase \contentsname} - {\MakeUppercase \contentsname}}} - {\if@restonecol \twocolumn \fi}} -\def\etocbookstylenomarks{% - \etocsettocstyle - {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi - \chapter *{\contentsname}} - {\if@restonecol \twocolumn \fi}} -\let\etocreportstyle\etocbookstyle -\let\etocreportstylenomarks\etocbookstylenomarks -\def\etocmemoirtoctotocfmt #1#2{% - \def\Etoc@addsuitablecontentsline{\addcontentsline {toc}{#1}{#2}}% - \renewcommand*\etocaftertitlehook{% - \ifmem@em@starred@listof - \else\phantomsection\aftergroup\Etoc@addsuitablecontentsline\fi}} -\def\etocmemoirstyle{% - \etocsettocstyle - {\ensureonecol \par \begingroup \@nameuse {@tocmaketitle} - \Etoc@aftertitlehook\let\Etoc@aftertitlehook\relax - \parskip \cftparskip \@nameuse {cfttocbeforelisthook}} - {\@nameuse {cfttocafterlisthook}\endgroup\restorefromonecol}} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocscrartclstyle{% - \etocsettocstyle - {\let\if@dynlist\if@tocleft - \def\@currext{toc}% added 1.07m 2015/01/23 - \iftocfeature {toc}{onecolumn} - {\iftocfeature {toc}{leveldown} - {} - {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} - {}% -% \end{macrocode} -% |1.07k|: next line to do as within current |scrartcl 2013/12/19 v3.12| -% KOMA-Script article class. -% \begin{macrocode} - \iftocfeature {toc}{numberline}{\def \nonumberline {\numberline {}}}{}% - \tocbasic@listhead {\listoftocname}% - \begingroup \expandafter \expandafter \expandafter - \endgroup \expandafter - \ifx - \csname microtypesetup\endcsname \relax - \else - \iftocfeature {toc}{noprotrusion}{} - {\microtypesetup {protrusion=false}% - \PackageInfo {tocbasic}% - {character protrusion at toc deactivated}}% - \fi - \setlength {\parskip }{\z@ }% - \setlength {\parindent }{\z@ }% - \setlength {\parfillskip }{\z@ \@plus 1fil}% - \csname tocbasic@@before@hook\endcsname - \csname tb@toc@before@hook\endcsname} - {\csname tb@toc@after@hook\endcsname - \csname tocbasic@@after@hook\endcsname}} -\let\etocscrbookstyle\etocscrartclstyle -\let\etocscrreprtstyle\etocscrartclstyle -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\etocstandarddisplaystyle{\etocarticlestyle} -\newcommand*\etocmarkboth[1]{% - \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} -\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} -\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% - {\csname #1\endcsname *{#3}}} -\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% - {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} -\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% - {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\Etoc@redefetocstyle#1{% - \renewcommand\etoctocstylewithmarks[4][#1] - {\etocmulticolstyle[##2]% - {\csname ##1\endcsname *{##3\etocmarkboth{##4}}}} - \renewcommand\etoctocstylewithmarksnouc[4][#1] - {\etocmulticolstyle[##2]% - {\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}} - \renewcommand\etoctocstyle[3][#1]{% - \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}}}} -\@ifclassloaded{scrartcl} - {\renewcommand*\etocstandarddisplaystyle{\etocscrartclstyle}}{} -\@ifclassloaded{book} - {\renewcommand*\etocfontone{\normalfont\normalsize} - \renewcommand*\etocstandarddisplaystyle{\etocbookstyle} - \Etoc@redefetocstyle{chapter}}{} -\@ifclassloaded{report} - {\renewcommand*\etocfontone{\normalfont\normalsize} - \renewcommand*\etocstandarddisplaystyle{\etocreportstyle} - \Etoc@redefetocstyle{chapter}}{} -\@ifclassloaded{scrbook} - {\renewcommand*\etocfontone{\normalfont\normalsize} - \renewcommand*\etocstandarddisplaystyle{\etocscrbookstyle} - \Etoc@redefetocstyle{chapter}}{} -\@ifclassloaded{scrreprt} - {\renewcommand*\etocfontone{\normalfont\normalsize} - \renewcommand*\etocstandarddisplaystyle{\etocscrreprtstyle} - \Etoc@redefetocstyle{chapter}}{} -% \end{macrocode} -%|1.07k (2014/03/06)| adds the |appendix| to the list of known levels if class -%|memoir| is detected. -% \begin{macrocode} -\@ifclassloaded{memoir} - {\etocsetlevel{appendix}{0}% - \renewcommand*\etocfontone{\normalfont\normalsize} - \etocmemoirtoctotocfmt{chapter}{\contentsname}% - \renewcommand*\etocstandarddisplaystyle{\etocmemoirstyle} - \Etoc@redefetocstyle{chapter}}{} -% \end{macrocode} -%|1.07k (2014/03/06)| adds the compatibility with the |tocloft| package; in -% compatibility mode etoc will obey the |tocloft| customisation for the division -% headings as well as for the toc title. -% -%|1.07l (2014/04/02)| fixes the bug from the |tocloft| compatibility layer which -%was |memoir| incompatible: |memoir| has its version of |tocloft| which doesn't -%have the |\if@cftnctoc| boolean. -% \begin{macrocode} -\def\etoctocloftstyle {% - \etocsettocstyle - {\@cfttocstart\par\begingroup - \parindent\z@ \parskip\cftparskip \@cftmaketoctitle - \if@cfttocbibind\@cftdobibtoc\fi }% - {\endgroup\@cfttocfinish }% -} -\@ifclassloaded{memoir}{} -{\@ifpackageloaded{tocloft} - {\if@cftnctoc\else - \renewcommand*\etocstandarddisplaystyle{\etoctocloftstyle} - \AtBeginDocument{\let\tableofcontents\etoctableofcontents} - \fi } - {\AtBeginDocument - {\@ifpackageloaded{tocloft} - {\if@cftnctoc\else - \PackageWarning {etoc} - {Package `tocloft' was loaded after `etoc'!^^J% -**** to prevent it from overwriting \protect\tableofcontents, it will be tricked^^J% -**** into believing to have been loaded with option `titles'. For better^^J% -**** compatibility, please load `tocloft' before `etoc'}% - \AtEndDocument{\PackageWarning{etoc} - {Please load `tocloft' /before/ `etoc'!}}\fi - \@cftnctoctrue }% - {}% - }% - }% -} -% \end{macrocode} -% placeholder for comments -% \begin{macrocode} -\def\Etoc@addtocontents #1#2% - {\ifEtoc@hyperref - \addtocontents {toc}{\protect\contentsline - {#1}{#2}% - {\thepage }{\@currentHref }}% - \else - \addtocontents {toc}{\protect\contentsline - {#1}{#2}{\thepage }}% - \fi} -\def\Etoc@addcontentsline@ #1#2#3% - {\@namedef{toclevel@#1}{#3}% - \addcontentsline {toc}{#1}{#2}} -\DeclareRobustCommand*{\etoctoccontentsline} - {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} -% \end{macrocode} -% All the following added for version |1.07g [2013/10/13]|. Motivated by -% a demand about |tovsec2|. But it is impossible to make |tocvsec2| -% compatible, if not re-doing all `toc' macros in |tocvsec2| -% (|v1.3, 2011/08/07|). I do not retain the stack idea, which does not convince -% me as useful. The empty line in the |.toc| file is put there by -% |tocvsec2| (see its code line 143). -% -% I take this opportunity to add to the start of the toc file -% |\let\etoc@startlocaltoc\@gobble| in case |etoc| is not detected, I should -% possibly have done that long ago (like I did in |tableof|). -% -% In |1.07h| I decide that I should not have used |\Etoc@| but |\etoc@| for -% |\Etoc@settocdepth|. So I now use lowercase and add a temporary line for -% transition in the very improbable situation that someone actually did already -% use the just released |1.07g|. -% -% In |1.07i| the deactivation of |\etoc@settocdepth| done at the start -% of the |.toc| file (for the case this file is used after having -% removed |etoc| from the document, or imported in another document) is -% done via letting it to |\@gobble| rather than |\count@| (which would -% not be ok, as what follows would be undefined too). The reason for the -% |\count@| also used originally in |\etocignoretoctocdepth| is that -% when I first worked on |1.07g| I possibly had more than one token -% after |\etoc@settocdepth|, but I changed that later. -% -% \begin{macrocode} -\def\Etoc@storetocdepth {\global\c@etoc@tocdepth\c@tocdepth } -\def\Etoc@resettocdepth {\global\c@tocdepth\c@etoc@tocdepth } -\def\etocobeytoctocdepth {\def\etoc@settocdepth - {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} -\def\Etoc@@nottoodeep {\ifnum\c@tocdepth>\c@etoc@tocdepth - \global\c@tocdepth\c@etoc@tocdepth\fi } -\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } -\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } -\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup - \expandafter\Etoc@set@tocdepth@ - \else\expandafter\Etoc@set@toctocdepth - \fi } -\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} - {\PackageWarning{etoc} - {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} - {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% -} -\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } -\def\Etoc@set@toctocdepth@ #1{% - \@ifundefined{Etoc@#1@@}% - {\PackageWarning{etoc} - {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% - {\addtocontents {toc} - {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% -} -% \end{macrocode} -% |1.07h| adds the depth tags, and an even more general mechanism could be added -% at some point: we could insert `action' tags and have the user map them to -% arbitrary commands. For the time being we just provide -% |\etocdepthtag.toc {name}| and |\etocsettagdepth {tag_name}{level}| where -% level is numeric or -% alphabetical. The numeric -% level |-3| is now again not accepted by |\etocsetlevel|, it can be used with -% |\etocsettagdepth| (which accepts equivalently |none|). -% \begin{macrocode} -\def\etocdepthtag #1#{\Etoc@depthtag } % \etocdepthtag.toc {name} -\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} -\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } -\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } -\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% - {}% ignore in silence if tag has no associated depth - {\afterassignment\Etoc@@nottoodeep - \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% -} -\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% - {\PackageWarning{etoc} - {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% - {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% -} -% \end{macrocode} -% We must cancel all |tocvsec2| toc-related actions. But a check must be done -% for the memoir class, as its |tocvsec2| emulation does not have the -% incompatible things etoc needs to revert. This extra check added with etoc -% |1.07l|. -% \begin{macrocode} -\def\Etoc@tocvsec@err #1{\PackageError {etoc} - {the command \protect#1\space is incompatible with etoc} - {use \protect\etocsettocdepth.toc as replacement (check the manual)}% -}% -\AtBeginDocument {% - \@ifclassloaded{memoir} - {\PackageWarning{etoc}{You may consider using \protect\etocsettocdepth.toc - as a drop-in^^J - replacement to the memoir own \protect\settocdepth\space - if you wish to exploit etoc to its^^J - fullest. Similarly consider using - \protect\etocsettocdepth\space and - \protect\etocsetnexttocdepth^^J rather - than memoir's \protect\maxtocdepth.}} - {\@ifpackageloaded {tocvsec2} - {\def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% - \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% - \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% - {\Etoc@tocvsec@err \resettocdepth }% - }% - \def\save@tocdepth #1#2#3{}% % if etoc is added to file previously - \let\reset@tocdepth\relax % using tocvsec2 - \let\remax@tocdepth\relax - \let\tableofcontents\etoctableofcontents - \PackageWarning {etoc} - {package tocvsec2 detected and its modification of^^J - \protect\tableofcontents\space reverted. Use - \protect\etocsettocdepth.toc as a replacement^^J - for the tocvsec2 toc-related commands}}{}% - }% -}% -% \end{macrocode} -% |1.07g| -% \begin{macrocode} -\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% -\def\invisiblelocaltableofcontents - {\etocsetnexttocdepth {-3}\localtableofcontents }% -\def\etocsetnexttocdepth #1{% - \@ifundefined{Etoc@#1@@} - {\PackageWarning{etoc} - {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} - {\edef\Etoc@aftertochook {\global\c@tocdepth\the\c@tocdepth\space - \let\noexpand\Etoc@aftertochook\noexpand\@empty }% - \global\c@tocdepth\csname Etoc@#1@@\endcsname}% -}% -% \end{macrocode} -% |1.07h|. In order for the |.toc| file to be usable without error even -% without etoc. In |1.07i| use of |\@gobble| for |\etoc@settocdepth|. -% \begin{macrocode} -\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% - {\let\protect\etoc@startlocaltoc\protect\@gobble - \let\protect\etoc@settocdepth\protect\@gobble - \let\protect\etoc@depthtag\protect\@gobble }{}}% -% \end{macrocode} -% Initializations. -% \begin{macrocode} -\def\etocstandardlines {\Etoc@standardtrue} -\def\etoctoclines {\Etoc@standardfalse} -\etocdefaultlines -\etocstandardlines -\etocstandarddisplaystyle -\etocobeytoctocdepth -\etocobeydepthtags -\let\Etoc@aftertochook\@empty % private for \etocsetnexttocdepth -\let\etocaftertochook \@empty % public for end user. -\let\etocbeforetitlehook \@empty % new with 1.07m -\endinput -% \end{macrocode} -% \MakePercentComment -\CharacterTable - {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z - Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z - Digits \0\1\2\3\4\5\6\7\8\9 - Exclamation \! Double quote \" Hash (number) \# - Dollar \$ Percent \% Ampersand \& - Acute accent \' Left paren \( Right paren \) - Asterisk \* Plus \+ Comma \, - Minus \- Point \. Solidus \/ - Colon \: Semicolon \; Less than \< - Equals \= Greater than \> Question mark \? - Commercial at \@ Left bracket \[ Backslash \\ - Right bracket \] Circumflex \^ Underscore \_ - Grave accent \` Left brace \{ Vertical bar \| - Right brace \} Tilde \~} - -\CheckSum{3061} - -\csname check@checksum\endcsname -\Finale -%% -%% End of file `etoc.dtx'. diff --git a/Master/texmf-dist/source/generic/etoc/etoc.ins b/Master/texmf-dist/source/generic/etoc/etoc.ins deleted file mode 100644 index 7e292525a27..00000000000 --- a/Master/texmf-dist/source/generic/etoc/etoc.ins +++ /dev/null @@ -1,77 +0,0 @@ -%% -%% Package: etoc -%% Version: 1.08 (2015/03/10) -%% License: LPPL 1.3c or later (see etoc.dtx) -%% Copyright (C) 2012-2015 Jean-Francois Burnol -%% Copyright (C) 2014-2015 Christine Roemer -%% and collaborators for the translation into German of the documentation -%% -\def\etocpkgdate {2015/03/10} -\def\etocdocdate {2015/03/10} -\def\etocpkgversion {v1.08} -\def\etocpkgdescription {Completely customisable TOCs (jfB)} -%% Run tex on this file to extract from etoc.dtx: -%% etoc.sty, etoc.tex, etoc-DE.tex and README.md -%% -%% At least three ways to produce etoc.pdf (method (3) is preferred): -%% (1) latex etoc.dtx (three times), then dvips, then ps2pdf -%% (2) pdflatex etoc.dtx (three times) -%% (3) latex etoc.tex (three times), then dvipdfmx -%% -%% Method (3) produces the smallest pdf files. -%% Options can be set in etoc.tex (and etoc-DE.tex): -%% - scrdoc class options (paper size, font size, ...) -%% - with or without source code, -%% - with dvipdfmx or with latex/pdflatex. -%% -%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins -%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with -%% latex (thrice) then dvipdmx, or edit the suitable toggle in -%% etoc-DE.tex to allow compilation to proceed with pdflatex. -%% -%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen -%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen -%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, -%% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. -%% -%% Installation: -%% -%% etoc.sty -> TDS:tex/latex/etoc/etoc.sty -%% etoc.dtx -> TDS:source/latex/etoc/etoc.dtx -%% etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf -%% etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf -%% README.md -> TDS:doc/latex/etoc/README.md -%% -\input docstrip.tex -\askforoverwritefalse -\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% -\string\NeedsTeXFormat{LaTeX2e}^^J% -\string\ProvidesPackage{etoc}^^J% -\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% -\generate{\nopreamble\nopostamble -\file{README.md}{\from{etoc.dtx}{readme}}% -\usepostamble\defaultpostamble -\file{etoc.tex}{\from{etoc.dtx}{tex}}% -\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% -\usepreamble\etocpkgpreamble -\file{etoc.sty}{\from{etoc.dtx}{package}}}% -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* etoc.sty} -\Msg{*} -\Msg{* To produce the documentation run latex thrice on file etoc.tex} -\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.} -\Msg{* etoc-DE.dvi} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} -\endbatchfile -\endinput -%% -%% End of file `etoc.ins'. diff --git a/Master/texmf-dist/source/latex/etoc/etoc.dtx b/Master/texmf-dist/source/latex/etoc/etoc.dtx new file mode 100644 index 00000000000..8e9676b4e52 --- /dev/null +++ b/Master/texmf-dist/source/latex/etoc/etoc.dtx @@ -0,0 +1,12641 @@ +% -*- coding: utf-8; -*- +%<*none> +{\def\doctimestamp {Time-stamp: <13-03-2015 23:06:42 CET>}% + \def\getdtxtimestamp #1 <#2 #3 #4>{#2 at #3 #4}% + \xdef\etocdtxtimestamp {\expandafter\getdtxtimestamp\doctimestamp }}% +% +%<*!readme> +%% +%% Package: etoc +%% Version: 1.08a (2015/03/13) +%% License: LPPL 1.3c or later (see etoc.dtx) +%% Copyright (C) 2012-2015 Jean-Francois Burnol +%% Copyright (C) 2014-2015 Christine Roemer +%% and collaborators for the translation into German of the documentation +%% +% +%<*insfile> +\def\etocpkgdate {2015/03/13} +\def\etocdocdate {2015/03/13} +\def\etocpkgversion {v1.08a} +\def\etocpkgdescription {Completely customisable TOCs (jfB)} +% +%<*none> +% Now the date and version which are specific to the German translation. +% Replace \let by suitable \def's in case this lags behing English version. +\let\etocDEpkgdate \etocpkgdate % +\let\etocDEdocdate \etocdocdate % +\let\etocDEpkgversion\etocpkgversion % +% Definition of \etocLicense +% -------------------------- +\begingroup + \long\def\firstofone #1{#1}\catcode1=14\catcode2=0 + \catcode`\%=12\catcode`\_=12\endlinechar13\catcode13=13 ^^A + \catcode32=13\catcode`\\=12^^Brelax^^A +^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A +{% Package: etoc +% Version: 1.08a (2015/03/13) +% License: LPPL 1.3c or later +% Copyright (C) 2012-2015 Jean-Francois Burnol +% Copyright (C) 2014-2015 Christine Roemer +% and collaborators for the translation into German of the documentation +% +% This Work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any later +% version. This version of this license is in +% http://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of +% LaTeX version 2005/12/01 or later. +% +% The Authors of this Work are: +% Jean-Francois Burnol for the source code and +% English documentation, and +% Christine Roemer and collaborators +% for the translation into German of the documentation. +% +% This Work consists of the main source file etoc.dtx and the derived +% files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, etoc.pdf, etoc-DE.pdf, +% etoc.dvi, etoc-DE.dvi, README.md. +% +% Running tex or etex on etoc.dtx extracts etoc.sty, etoc.ins, etoc.etex, +% etoc-DE.tex, and README.md. See README.md for further instructions. +% +% It is also possible to typeset etoc.dtx directly via latex or pdflatex. +}}% +\iffalse +% +%<*readme> + + + Source: etoc.dtx (v1.08a 2015/03/13) + Author: Jean-Francois Burnol + Author for German tranlation: Christine Roemer + Info: Completely customisable TOCs + License: LPPL 1.3c or later + +Copyright (C) 2012-2015 Jean-Francois Burnol `` + +Copyright (C) 2014-2015 Christine Roemer `` +and collaborators for the translation into German of the documentation. + +ABSTRACT +======== + +The etoc package gives to the user complete control on how the entries +of the table of contents should be constituted from the *name*, +*number*, and *page number* of each sectioning unit. This goes via the +definition of *line styles* for each sectioning level used in the +document. The package provides its own custom line styles. Simpler +ones are given as examples in the documentation. The simplest usage +will be to take advantage of the layout facilities of packages dealing +with list environments. + +Regarding the *global toc display*, etoc provides pre-defined styles +based on a multi-column format, with, optionally, a ruled title or +framed contents. + +The `\tableofcontents` command may be used arbitrarily many times and +it has a variant `\localtableofcontents` which prints tables of +contents 'local' to the current surrounding document unit. An +extension of the `\label/\ref` syntax allows to reproduce (with +another layout) a local table of contents defined somewhere else in +the document. + +Via ''depth tags'', one gets an even finer control for each table of +contents of which sectioning units it should, or not, display. + +The formatting inherited (and possibly customized by other packages) +from the document class will be used when in compatibility mode. + +The assignment of levels to the sectioning units can be changed at any +time, and etoc can thus be used in a quite general manner to create +custom ''lists of'', additionally to the tables of contents related to +the document sectioning units. No auxiliary file is used additionally +to the standard .toc file. + +INSTALLATION +============ + +The simplest is to download + +> + +and then run `unzip etoc.tds.zip -d ` where `` is a +TDS-compliant repertory. + +Else, to extract the package (.sty) and driver (.tex) files from etoc.dtx: + +- if etoc.ins is present: etex etoc.ins (or tex etoc.ins) +- without etoc.ins: etex etoc.dtx (or tex etoc.dtx) + +It is also possible to run latex or pdflatex directly on etoc.dtx. + +At least three ways to produce etoc.pdf (method (3) is preferred): + +(1) latex etoc.dtx (three times), then dvips, then ps2pdf + +(2) pdflatex etoc.dtx (three times) + +(3) latex etoc.tex (three times), then dvipdfmx + +Method (3) produces the smallest pdf files. +Options can be set in etoc.tex: + +- scrdoc class options (paper size, font size, ...) +- with or without source code, +- with dvipdfmx or with latex+dvips or pdflatex. + +To produce etoc-DE.pdf (German documentation) run tex on etoc.ins +or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +latex (thrice) then dvipdmx, or set first to 0 `\Withdvipdfmx` in +etoc-DE.tex to allow compilation with pdflatex. + +Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +mit dvipdfmx ist `\Withdvidpdfmx` auf 0 in etoc-DE.tex zu setzen, +dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. + +Installation: + + etoc.sty -> TDS:tex/latex/etoc/etoc.sty + etoc.dtx -> TDS:source/latex/etoc/etoc.dtx + etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf + etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf + README.md -> TDS:doc/latex/etoc/README.md + +The other files may be discarded. + +LICENSE +======= + +This Work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. This version of this license is in + +> + +and the latest version of this license is in + +> + +and version 1.3 or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +The Authors of this Work are: + +- Jean-Francois Burnol `` for the source code and + English documentation, and +- Christine Roemer `` and collaborators + for the translation into German of the documentation. + +This Work consists of the main source file etoc.dtx and the +derived files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, +etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. + +RECENT CHANGES +============== + +v1.08a [2015/03/13] +------------------- + +`\etocname`, `\etocnumber` and `\etocpage` are now the robust variants of +`\etocthelinkedname`, `\etocthelinkednumber` and `\etocthelinkedpage`. +This should arguably have been done since the addition of the latter to +etoc with v1.07f [2013/03/07]. The earlier `\etocname` etc... contained +the hyperlink destination only in an unexpanded form. + +The documentation has a brand new title page and a new section *The TOC as +a TikZ mind map* both illustrating further uses of etoc to display tables +of contents as trees in an automatic manner. + +v1.08 [2015/03/10] +------------------ + +`\etocskipfirstprefix` may now appear anywhere in the `` +part of a level style. + +New commands `\etociffirst`, `\etocxiffirst`, `\etocxifnumbered`. + +It is now possible to issue line style specifications directly with +`&` and `\\` tokens, in order to typeset a TOC as a tabular or +longtable with the opening for example in the first argument of +`\etocsettocstyle` and the closing in its second argument. + +It is mandatory for such uses to issue `\etocglobaldefs` which tells +etoc to proceed globally for certain definitions. This is also useful +in the context of the inline environments of package enumitem. + +On this occasion, various old parts of the code have been improved. + +v1.07n [2015/03/05] +------------------- + +No more use of `\toks@` when etoc constructs `\etocthelinkedname` +etc... Thus `\toks@` can be put in the line styles in order to +accumulate information. Only useful if it is certain nothing else +will change `\toks@` either. + +In the documentation: list of main commands now in alphabetic order. + +v1.07m [2015/01/23] +------------------- + +Reading of .toc file is delayed to `\begin{document}` to account for +possible Babel active characters used therein. Thanks to Denis +Bitouzé who reported a Babel related problem. + +Improved global toc display emulation under KOMA-script classes. + +New command `\etocbeforetitlehook`. New command `\etocdisplay`. + +v1.07l [doc of 2014/04/29] +-------------------------- + +Added to the documentation an example of use of `\etocthelinkedname` +together with an enumitem inline itemize\* environment; moved main +TOC to immediately after the title, and license to the first pages. + +Incorporation of the translation into German done on the initiative +of Christine Römer by Felix Baral-Weber, Jenny Rothkrämer-Vogt, +Daniel Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU +Jena). My grateful thanks to all! +% +%<*tex>------------------------------------------------------------------------- +%% 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 (due to hyperlinks extending over page +%% breaks) may be ignored, but in case of a too old dvipdfmx, it may +%% be preferable to use pdflatex. Set \Withdvipdfmx to 0 first. +%% +\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex +\chardef\NoSourceCode 0 % replace 0 by 1 for the doc *without* the source code +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile {etoc.tex}[Driver for etoc documentation]% +\PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc} +\PassOptionsToPackage {ngerman,english}{babel} +\chardef\ForEnglish 1 % (can NOT be both 1..) +\chardef\ForDeutsch 0 % +\input etoc.dtx +%%% Local Variables: +%%% mode: latex +%%% End: +%------------------------------------------------------------------------- +%<*DEtex>----------------------------------------------------------------------- +%% run latex thrice on this file etoc-DE.tex then dvipdfmx on etoc-DE.dvi +%% to produce the German documentation etoc-DE.pdf (without source code). +%% +%% possible dvipdfmx warnings (due to hyperlinks extending over page +%% breaks) may be ignored, but in case of a too old dvipdfmx, it may +%% be preferable to use pdflatex. For this set \Withdvipdfmx to 0. +%% +%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +%% mit dvipdfmx ist \Withdvidpdfmx auf 0 zu setzen, dann ist pdflatex +%% dreimal mit etoc-DE.tex laufen zu lassen. +%% +\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex +\chardef\NoSourceCode 1 % replace 1 by 0 for the doc *with* the source code +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile {etoc-DE.tex}[Driver for etoc German documentation]% +\PassOptionsToClass {a4paper,fontsize=11pt,twoside,ngerman}{scrdoc} +\PassOptionsToPackage {english,ngerman}{babel} +\chardef\ForEnglish 0 % (can NOT be both 1..) +\chardef\ForDeutsch 1 % +\input etoc.dtx +%%% Local Variables: +%%% mode: latex +%%% End: +%----------------------------------------------------------------------- +%<*insfile>--------------------------------------------------------------------- +%% Run tex on this file to extract from etoc.dtx: +%% etoc.sty, etoc.tex, etoc-DE.tex and README.md +%% +%% At least three ways to produce etoc.pdf (method (3) is preferred): +%% (1) latex etoc.dtx (three times), then dvips, then ps2pdf +%% (2) pdflatex etoc.dtx (three times) +%% (3) latex etoc.tex (three times), then dvipdfmx +%% +%% Method (3) produces the smallest pdf files. +%% Options can be set in etoc.tex (and etoc-DE.tex): +%% - scrdoc class options (paper size, font size, ...) +%% - with or without source code, +%% - with dvipdfmx or with latex/pdflatex. +%% +%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins +%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +%% latex (thrice) then dvipdmx, or edit the suitable toggle in +%% etoc-DE.tex to allow compilation to proceed with pdflatex. +%% +%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, +%% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. +%% +%% Installation: +%% +%% etoc.sty -> TDS:tex/latex/etoc/etoc.sty +%% etoc.dtx -> TDS:source/latex/etoc/etoc.dtx +%% etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf +%% etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf +%% README.md -> TDS:doc/latex/etoc/README.md +%% +\input docstrip.tex +\askforoverwritefalse +\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% +\string\NeedsTeXFormat{LaTeX2e}^^J% +\string\ProvidesPackage{etoc}^^J% +\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% +\generate{\nopreamble\nopostamble +\file{README.md}{\from{etoc.dtx}{readme}}% +\usepostamble\defaultpostamble +\file{etoc.tex}{\from{etoc.dtx}{tex}}% +\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% +\usepreamble\etocpkgpreamble +\file{etoc.sty}{\from{etoc.dtx}{package}}}% +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* etoc.sty} +\Msg{*} +\Msg{* To produce the documentation run latex thrice on file etoc.tex} +\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.} +\Msg{* etoc-DE.dvi} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} +\endbatchfile +%--------------------------------------------------------------------- +%<*none>------------------------------------------------------------------------ +\fi +% +\chardef\noetex 0 +\expandafter\ifx\csname numexpr\endcsname\relax \chardef\noetex 1 \fi +\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop +\else +% \ifdefined does not count as \if with Knuth tex ! +% no way to use it or \ifcsname here ! (besides hiding it in macros) + \expandafter\ifx\csname ProvidesFile\endcsname\relax + \chardef\extractfiles 0 % etex etc.. on etoc.dtx + \else % latex/pdflatex on etoc.tex or on etoc.dtx + \ProvidesFile{etoc.dtx}% + [`etoc' source and documentation (\etocdtxtimestamp)]% + \expandafter\ifx\csname Withdvipdfmx\endcsname\relax + % latex run is on etoc.dtx + \chardef\extractfiles 1 % 1 = extract files and typeset manual + \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips + \chardef\NoSourceCode 1 % do not include source code + \chardef\ForEnglish 1 \chardef\ForDeutsch 0 + \PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc}% + \PassOptionsToPackage {ngerman,english}{babel}% + \else % latex run is on etoc.tex or etoc-DE.tex + \chardef\extractfiles 2 % do not extract files + \fi + \fi +\fi +\ifnum\extractfiles<2 % extract files +\def\MessageDeFin{\newlinechar10 \let\Msg\message +\Msg{********************************************************************^^J}% +\Msg{*^^J}% +\Msg{* To finish the installation you have to move the following^^J}% +\Msg{* file into a directory searched by TeX:^^J}% +\Msg{*^^J}% +\Msg{*\space\space\space\space etoc.sty^^J}% +\Msg{*^^J}% +\Msg{* To produce the documentation with source code included run latex^^J}% +\Msg{* thrice on file etoc.tex and then dvipdfmx on etoc.dvi^^J}% +\Msg{*^^J}% +\Msg{* To produce the German documentation run latex thrice on file^^J}% +\Msg{* etoc-DE.tex and then dvipdfmx on etoc-DE.dvi^^J}% +\Msg{*^^J}% +\Msg{* Happy TeXing!^^J}% +\Msg{*^^J}% +\Msg{********************************************************************^^J}% +}% +\begingroup + \input docstrip.tex + \askforoverwritefalse + \def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% + \string\NeedsTeXFormat{LaTeX2e}^^J% + \string\ProvidesPackage{etoc}^^J% + \space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% + \generate{\nopreamble\nopostamble + \file{README.md}{\from{etoc.dtx}{readme}}% + \usepostamble\defaultpostamble + \file{etoc.ins}{\from{etoc.dtx}{insfile}}% + \file{etoc.tex}{\from{etoc.dtx}{tex}}% + \file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% + \usepreamble\etocpkgpreamble + \file{etoc.sty}{\from{etoc.dtx}{package}}}% +\endgroup +\fi % end of file extraction +\ifnum\extractfiles=0 % tex/etex/xetex/etc on etoc.dtx, files extracted, stop + \MessageDeFin\expandafter\end\fi +% no use of docstrip to extract files if latex run was on etoc.tex +\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi +%------------------------------------------------------------------------------- +% START OF USER MANUAL TEX SOURCE +\documentclass[abstract]{scrdoc} + +\ifnum\NoSourceCode=1 \OnlyDescription\fi + +\makeatletter +\ifnum\Withdvipdfmx=1 + \@for\@tempa:=hyperref,bookmark,graphicx,xcolor\do + {\PassOptionsToPackage{dvipdfmx}\@tempa} + % + \PassOptionsToPackage{dvipdfm}{geometry} + \PassOptionsToPackage{bookmarks=true}{hyperref} + \PassOptionsToPackage{dvipdfmx-outline-open}{hyperref} + \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark} + % + \def\pgfsysdriver{pgfsys-dvipdfm.def} +\else + \PassOptionsToPackage{bookmarks=true}{hyperref} +\fi +\makeatother + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[hscale=0.66,vscale=0.75]{geometry} +\pagestyle{headings} +% \usepackage{layout} + +% January 2014. work-around a bug in KOMA 3.12 (December 2013): +\makeatletter +\def\buggysectionmark #1{% KOMA 3.12 as released to CTAN December 2013 + \if@twoside\expandafter\markboth\else\expandafter\markright\fi + {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat\fi}{}#1}}{}} +\ifx\buggysectionmark\sectionmark +\def\sectionmark #1{% + \if@twoside\expandafter\markboth\else\expandafter\markright\fi + {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat}{}#1}}{}} +\fi +\makeatother + +\makeatletter +% 2013/03/07. +% This macro allows to conveniently center a line inside a paragraph and still +% use therein \verb or other commands changing catcodes. +% Note: \centerline in LaTeX still uses \hsize and not \linewidth/\columnwidth + \def\@centeredline {\hbox to \linewidth + \bgroup \hss \bgroup + \aftergroup\centeredline@ } + \newcommand*\centeredline {% + \ifhmode + \\\relax + \def\centeredline@{\hss\egroup\hskip\z@skip}% + \else + \def\centeredline@{\hss\egroup}% + \fi + \afterassignment\@centeredline + \let\next=} + +% pour maintenir les % en début de ligne dans les blocs verbatim +% + + \let\original@check@percent\check@percent + \let\check@percent\relax +\makeatother + + +% pour les environnements verbatim +% uniformisé finalement, avec quelques exceptions, pour dtx du 3 déc 2013 +\def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax} + +% ATTENTION: (avec doc.sty ou les classes scrdoc ou ltxdoc) +% +% - l'environnement macrocode se fait avec \macro@font qui est le +% \MacroFont du \begin{document}. +% +% - les environnements verbatim utilisent le \MacroFont courant. +% +% - \verb utilise un \ttfamily !! et non pas \verbatim@font que l'on +% peut customiser. +% +% - (9 mars 2015) il ne faut PAS commencer des macrocode directement après +% un \section, il faut un paragraphe (par exemple un \indent\par) + +%---- +% better \verb pour doc. +% 12 octobre 2013, importé de xint.dtx +% je rajoute pour { afin que truc{machin puisse avoir hyphénation +% retire \leavemmode, pas nécessaire pour emploi ici + +% NOTE 9 mars 2015. J'ai depuis une version plus aboutie dans xint.dtx +% mais je laisse ici tel quel. + +\def\MicroFont{\ttfamily\hyphenchar\font45 } +% modif de \do@noligs: \char`#1} --> \char`#1 } +\makeatletter +\def\do@noligs #1% +{% + \catcode `#1\active + \begingroup \lccode `\~=`#1\relax + \lowercase {\endgroup \def ~{\kern \z@ \char `#1 }}% +}% +\def\dobackslash +{% + \catcode92 \active + \begingroup \lccode `\~=92\relax + \lowercase {\endgroup \def ~{\kern \z@ \char 92 }}% +}% +\def\dobraces +{% + \catcode123 \active + \begingroup \lccode `\~=123\relax + \lowercase {\endgroup \def ~{\hskip \z@\@plus.1pt\@minus.1pt + \char 123 }}% + \catcode125 \active + \begingroup \lccode `\~=125\relax + \lowercase {\endgroup \def ~{\char 125 \hskip \z@\@plus.1pt\@minus.1pt }}% +}% +\def\verb +{% + \relax \ifmmode\hbox\else\leavevmode\null\fi + \bgroup \MicroFont + \let\do\do@noligs \verbatim@nolig@list + \let\do\@makeother \dospecials + \catcode32 10 + \dobackslash \dobraces \makestarlowast + \@jfverb +}% +\def\@jfverb #1{\catcode`#1\active + \lccode`\~`#1\lowercase{\def~{\egroup\unskip}}}% +% (\unskip ajouté le 14 octobre) +% \lowast est défini plus loin +\begingroup + \lccode`\~=`\* +\lowercase{% +\endgroup +\def\makestarlowast {\catcode`\*\active\let~\lowast}}% +\makeatother +% +\usepackage{txfonts} + +% m'occuper de la taille de txtt: +% au passage je supprime le \hyphenchar \font\m@ne + +% avril 2013 +% ATTENTION ATTENTION ATTENTION Un changement de taille comme \small semble +% déclencher (peut-être) la relecture de t1txtt.fd et quoi qu'il en soit le +% \hyphenchar est REMIS à -1 ! + +% update: 13 octobre 2013 +% et pourtant tailles sont ok, donc au moins cette information est +% maintenue je ne sais donc pas exactement ce qui se passe. + +\DeclareFontFamily{T1}{txtt}{\hyphenchar\font 45\relax} +\DeclareFontShape{T1}{txtt}{m}{n}{ %medium + <->s*[.96] t1xtt% +}{} +\DeclareFontShape{T1}{txtt}{m}{sc}{ %cap & small cap + <->s*[.96] t1xttsc% +}{} +\DeclareFontShape{T1}{txtt}{m}{sl}{ %slanted + <->s*[.96] t1xttsl% +}{} +\DeclareFontShape{T1}{txtt}{m}{it}{ %italic + <->ssub * txtt/m/sl% +}{} +\DeclareFontShape{T1}{txtt}{m}{ui}{ %unslanted italic + <->ssub * txtt/m/sl% +}{} +\DeclareFontShape{T1}{txtt}{bx}{n}{ %bold extended + <->t1xbtt% +}{} +\DeclareFontShape{T1}{txtt}{bx}{sc}{ %bold extended cap & small cap + <->t1xbttsc% +}{} +\DeclareFontShape{T1}{txtt}{bx}{sl}{ %bold extended slanted + <->t1xbttsl% +}{} +\DeclareFontShape{T1}{txtt}{bx}{it}{ %bold extended italic + <->ssub * txtt/bx/sl% +}{} +\DeclareFontShape{T1}{txtt}{bx}{ui}{ %bold extended unslanted italic + <->ssub * txtt/bx/sl% +}{} +\DeclareFontShape{T1}{txtt}{b}{n}{ %bold + <->ssub * txtt/bx/n% +}{} +\DeclareFontShape{T1}{txtt}{b}{sc}{ %bold cap & small cap + <->ssub * txtt/bx/sc% +}{} +\DeclareFontShape{T1}{txtt}{b}{sl}{ %bold slanted + <->ssub * txtt/bx/sl% +}{} +\DeclareFontShape{T1}{txtt}{b}{it}{ %bold italic + <->ssub * txtt/bx/it% +}{} +\DeclareFontShape{T1}{txtt}{b}{ui}{ %bold unslanted italic + <->ssub * txtt/bx/ui% +}{} + +\usepackage{xspace} +\usepackage[dvipsnames]{xcolor} +\usepackage{graphicx} +\usepackage[inline]{enumitem} +\usepackage{array} +\usepackage{longtable} + +\definecolor{joli}{RGB}{225,95,0} +\definecolor{JOLI}{RGB}{225,95,0} +\definecolor{BLUE}{RGB}{0,0,255} +\colorlet{niceone}{green!35!blue!75} + +\usepackage {babel} % ngerman and english options have been passed to babel +\AtBeginDocument { + \ifnum\ForEnglish=1 \renewcommand\partname{Part}\fi + \addto\captionsenglish{\renewcommand\partname{Part}} + \addto\captionsgerman {\renewcommand\partname{Teil}} +} + +\usepackage{tikz} +\usetikzlibrary{trees} % added for "cyclic" grow function 2013/03/02 +\usepackage{forest} % switched from tikz-qtree to forest 2013/09/09 +% No problem with hyperlinks then, contrarily to tikz-qtree. + +% NOTE: (12 octobre 2013) +% - si compilation pour dvipdfmx, les arbres dans le dvi visualisés par xdvi +% montrent correctement les textes, mais rien au point de vue graphique, +% - si compilation pour dvips, l'arbre fait par forest est tout empilé, celui +% fait par tikz sans forest est presque correct, les labels débordent. +% Dans les deux cas, le résultat final dans le pdf est bon. +% grosso modo dans l'état actuel le pdf fait 250K (dvipdfmx), 340K (pdflatex) et +% 1M pour dvips+ps2pdf. + +% 9 octobre 2013, je me décide à ne plus utiliser hidelinks, mais il est tout de +% même ajouté au .toc + +\usetikzlibrary{mindmap} % 2015/03/12, see http://tex.stackexchange.com/a/232584/4686 + +%18 mai 2014: pdfinfo différent suivant anglais ou allemand +\ifnum\ForEnglish=1 +\usepackage[pdfencoding=pdfdoc]{hyperref} +\hypersetup{% +linktoc=all,% why is the important stuff +%% bookmarksdepth=3,% in a *hard* to find README? +%% (but not needeed anymore now, v1.07g) +breaklinks=true,% +colorlinks,% +linkcolor=RoyalBlue,% Orchid +urlcolor=OliveGreen,% +pdfauthor={Jean-Fran\c cois Burnol},% +pdftitle={The etoc package},% +pdfsubject={Tables of contents with LaTeX},% +pdfkeywords={LaTeX, table of contents},% +pdfstartview=FitH,% +pdfpagemode=UseOutlines} +\fi + +\ifnum\ForDeutsch=1 +\usepackage[pdfencoding=pdfdoc]{hyperref} +\hypersetup{% +linktoc=all,% +breaklinks=true,% +colorlinks,% +linkcolor=RoyalBlue,% Orchid +urlcolor=OliveGreen,% +pdfauthor={Jean-Fran\c cois Burnol, Christine Römer},% +pdftitle={Das etoc Paket},% +pdfsubject={Inhaltsverzeichnisse mit LaTeX},% +pdfkeywords={LaTeX, Inhaltsverzeichnis},% +pdfstartview=FitH,% +pdfpagemode=UseOutlines} +\fi + +% added usage of package bookmark 2013/10/10 +\usepackage{bookmark} + +\usepackage{framed} +\usepackage{varioref} + +\usepackage{etoc} % loads multicol + +%-------- +% 10 octobre 2013: +\AtBeginDocument{\addtocontents{toc}{\protect\hypersetup{hidelinks}}} +% mieux que de passer hidelinks comme option à hyperref. +% Comme toutes les tocs sont faites dans un groupe, c'est très +% bien. (et j'utilise \etocaftertitlehook pour autre chose) + +%-------- +% add-ons for the new section `surprising uses of etoc' (2013/01/24) +\newcounter{visibletoc} +\renewcommand{\etocaftertitlehook} + {\stepcounter{visibletoc}% + \phantomsection + \etoctoccontentsline{visibletoc}{\thevisibletoc}} +\etocsetlevel{visibletoc}{6} +%-------- +% add-ons for the `fancy TOC' (2013/01/25) + \newcounter{dummypart} + \newcounter{dummychapter} + \newcounter{dummysection} + \etocsetlevel{dummypart}{6} + \etocsetlevel{dummychapter}{6} + \etocsetlevel{dummysection}{6} +%-------- +% for "Another compatibility mode" (2013/02/21): +% attention au 5 qui est hard-coded +% (pour 1.07f c'était 3, maintenant 5 pour 1.07g; et 4 maintenant pour 1.07h...) +% (et pour 1.07i.. à nouveau 3 faudra vraiment que je change cela) +% et maintenant =4 pour version de la doc du 28 avril 2014... faudra vraiment qu +% je mette un mécanisme plus robuste pour cette TOC. +\makeatletter +\newcommand*{\MyQuasiStandardTOC}[1]{% + \begingroup + \let\savedsectionline\l@section + \let\savedsubsectionline\l@subsection + \etocsetstyle{section}{} + {\ifnum\etocthenumber=4 % <- check this if new sections added to user manual + \etocsetstyle{subsection} + {\par\nopagebreak\begingroup + \leftskip1.5em \rightskip\@tocrmarg + \parfillskip \@flushglue + \parindent 0pt + \normalfont\normalsize\rmfamily\itshape + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname\ \textup{(\etocnumber)}} + {.\par\endgroup}% + \else + \etocsetstyle{subsection}{}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \fi} + {\savedsectionline + {\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} + {}% + \etocstandarddisplaystyle + \etocsetnexttocdepth {2}% + \tableofcontents #1 + \endgroup} +\makeatother +%-------- +% Statistics on sections and subsections in a part \thispartstats: +% 2 mars 2013 +% cette version utilise des box, plutôt que des macros. +% mais on ne peut plus alors changer de police etc... + +% 11 octobre 2013, je retire les \color{teal}. + +\newsavebox\firstnamei +\newsavebox\firstnumberi +\newsavebox\lastnamei +\newsavebox\lastnumberi +\newsavebox\firstnameii +\newsavebox\firstnumberii +\newsavebox\lastnameii +\newsavebox\lastnumberii +\newcounter{mycounti} +\newcounter{mycountii} + +\newcommand*{\thispartstatsauxi}{} +\newcommand*{\thispartstatsauxii}{} +\newcommand*{\oldtocdepth}{} + +\newcommand*{\thispartstats}{% + \setcounter{mycounti}{0}% + \setcounter{mycountii}{0}% + \def\thispartstatsauxi{% + \sbox{\firstnamei}{\etocname}% + \sbox{\firstnumberi}{\etocnumber}% + \def\thispartstatsauxi{}}% + \def\thispartstatsauxii{% + \sbox{\firstnameii}{\etocname}% + \sbox{\firstnumberii}{\etocnumber}% + \def\thispartstatsauxii{}}% + \begingroup + \etocsetstyle{subsection} + {} + {} + {\thispartstatsauxii + \stepcounter{mycountii}% + \sbox{\lastnameii}{\etocname}% + \sbox{\lastnumberii}{\etocnumber}} + {} +\ifnum\ForEnglish=1 + \etocsetstyle{section} + {} + {} + {\thispartstatsauxi + \stepcounter{mycounti}% + \sbox{\lastnamei}{\etocname}% + \sbox{\lastnumberi}{\etocnumber}} + {Here are some statistics for this part: it contains \arabic{mycounti} + section\ifnum\value{mycounti}>1 s\fi{} and + \arabic{mycountii} subsection\ifnum\value{mycountii}>1 s\fi. The name of + the first section is + ``\unhbox\firstnamei{}'' and the corresponding number is + ``\unhbox\firstnumberi''. The name of the last section is + ``\unhbox\lastnamei{}'' and its number is + ``\unhbox\lastnumberi''. + \ifnum\value{mycountii}>0 The name of + the first subsection is + ``\unhbox\firstnameii{}'' and the corresponding number is + ``\unhbox\firstnumberii''. The name of the last subsection is + ``\unhbox\lastnameii{}'' and its number is + ``\unhbox\lastnumberii''.\fi } +\fi +\ifnum\ForDeutsch=1 + \etocsetstyle{section} + {} + {} + {\thispartstatsauxi + \stepcounter{mycounti}% + \sbox{\lastnamei}{\etocname}% + \sbox{\lastnumberi}{\etocnumber}} +% Hier wird ein Befehl definiert, der fuer jedes Teil ein paar Fakten sammelt +% und ausgibt. + {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält + \arabic{mycounti} Abschnitt\ifnum\value{mycounti}>1 e\fi{} und + \arabic{mycountii} Unterabschnitt\ifnum\value{mycountii}>1 e\fi. Der Name des ersten + Abschnitts lautet + \glqq\unhbox\firstnamei{}\grqq~und er hat die Gliederungsnummer + \glqq\unhbox\firstnumberi\grqq. Der Name des letzten Abschnitts lautet + \glqq\unhbox\lastnamei{}\grqq~und er hat die Nummer + \glqq\unhbox\lastnumberi\grqq. + \ifnum\value{mycountii}>0 Der erste + Unterabschnitt heißt + \glqq\unhbox\firstnameii{}\grqq~und er hat die Nummer + \glqq\unhbox\firstnumberii\grqq. Der Name des letzten Unterabschnitts ist + \glqq\unhbox\lastnameii{}\grqq~und dessen Nummer ist + \glqq\unhbox\lastnumberii\grqq.\fi }% +\fi + \etocinline +% october 10, 2013. + \etocsetnexttocdepth {2}% + \etocsettocstyle {\pdfbookmark[1]{Statistics}{\thepart.STATS}}{} + \localtableofcontents + \endgroup +} + +\newcommand\etoc{% + \texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}}{etoc}\xspace} + +\DeclareRobustCommand\csa [1] {{\ttfamily\hyphenchar\font45 \char`\\ #1}} + +\DeclareRobustCommand\csb [1] + {\hyperref[#1] {\ttfamily\hyphenchar\font45 \char`\\ #1}} + +\newcommand\cshyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} + +\newcommand\csbhyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} + +\newcommand\toc{\csa{table\-of\-contents}\xspace} +\newcommand\localtoc{\csa{local\-table\-of\-contents}\xspace} + +\newcommand\lowast{\raisebox{-.25\height}{*}} +\newcommand\starit[1]{\csa{#1\lowast}} +\newcommand\staritb[1]{\csb{#1}\lowast} + +\hyphenation{toc-depth sec-num-depth con-tents-line} +\hyphenation{etoc-tan-dard-lines +etoc-de-fault-lines +etoc-toc-lines +etoc-set-style +etoc-name +etoc-page +etoc-skip-first-pre-fix +etoc-num-ber +etoc-if-first +etoc-ifnum-bered +etoc-the-name +etoc-the-num-ber +etoc-the-page +etoc-link +etoc-the-linked-name +etoc-the-linked-num-ber +etoc-the-linked-page +etoc-the-link +etoc-set-level +etoc-set-toc-depth +etoc-set-next-toc-depth +etoc-set-toc-depth +etoc-obey-toc-toc-depth +etoc-ig-nor-toc-depth +etoc-depth-tag +etoc-set-tag-depth +etoc-obey-depth-tags +etoc-ig-nore-depth-tags +etoc-stan-dard-dis-playstyle +etoc-set-toc-style +etoc-mul-ti-col-style +etoc-mul-ti-col +etoc-lo-cal-mul-ti-col +etoc-toc-style +etoc-toc-style-with-marks +etoc-toc-style-with-mark-snouc +etoc-ruled-style +etoc-ruled +etoc-lo-cal-ruled +etoc-framed-style +etoc-framed +etoc-lo-cal-framed +etoc-in-line +etoc-af-ter-ti-tle-hook +etoc-af-ter-con-tentshook +etoc-af-ter-toc-hook +etoc-skip-first-pre-fix +etoc-only-on-first} + +\hyphenation{ +etoc-font-mi-nus-two +etoc-font-mi-nus-one +etoc-font-zero +etoc-font-one +etoc-font-two +etoc-font-three +etoc-sep-mi-nus-two +etoc-sep-mi-nus-one +etoc-sep-zero +etoc-sep-one +etoc-sep-two +etoc-sep-three +etoc-mi-nus-two-left-mar-gin +etoc-mi-nus-two-right-mar-gin +etoc-mi-nus-one-left-mar-gin +etoc-mi-nus-one-right-mar-gin +etoc-base-line-spread-mi-nus-two +etoc-base-line-spread-mi-nus-one +etoc-base-line-spread-zero +etoc-base-line-spread-one +etoc-base-line-spread-two +etoc-base-line-spread-three +etoc-toc-line-lead-ers +etoc-ab-brev-page-name +etoc-part-name +etoc-book-name +etoc-above-toc-skip +etoc-be-low-toc-skip +etoc-column-sep +etoc-mul-ti-col-sep +etoc-mul-ti-col-pre-tol-er-ance +etoc-mul-ti-col-tol-er-ance +etoc-de-fault-nb-col +etoc-in-ner-top-sep +etoc-top-rule +etoc-top-rule-col-or-cmd +etoc-in-ner-left-sep +etoc-in-ner-right-sep +etoc-in-ner-bot-tom-sep +etoc-left-rule +etoc-right-rule +etoc-bot-tom-rule +etoc-left-rule-col-or-cmd +etoc-rightrule-col-or-cmd +etoc-bot-tom-rule-col-or-cmd +etoc-bkg-col-or-cmd +etoc-framed-mp-hook} + +\hyphenation{next-toc-with-tags} +\frenchspacing + +\renewcommand\familydefault\sfdefault + +% for illustration only. Not to be recommended in general. +\setcounter{secnumdepth}{4} + +\ifnum\ForDeutsch=1 + \renewcommand*{\etocabbrevpagename}{S.~} +\fi + + +% pour les TOC à la TikZ +\newtoks\treetok +\newtoks\parttok +\newtoks\sectiontok +\newtoks\subsectiontok +\newtoks\tmptok +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter + {\expandafter\the\expandafter #1#2}} + +% pour les Mindmap +\def\appendpart #1#2#3{% + \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}% + #1\expandafter {\tmpstuff }% +} + + +% Vendredi 13 mars 2015 à 18:10:40 +% POUR LA TOC DE TITLE PAGE +\newcount\tikznumberofcurrentgrandchild + +\def\tikzmycustomgrowth {% + \pgftransformreset + \ifnum\tikztreelevel=1 + \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild-1)}% + \fi + \ifnum\tikztreelevel=2 + \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentgrandchild-4)}% + \global\advance\tikznumberofcurrentgrandchild by 1 + \fi + \pgftransformxshift {\the\tikzleveldistance}% +} + +\newcounter{partco} +% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 +\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} +%\newwrite\TOCasTree +\newbox\TitlePageMindmapTOC + +\usepackage{eso-pic} +\usepackage{picture} + +\begin{document}%\layout +\rmfamily +\thispagestyle{empty} + +%------------------------------------------------------------------------------- +% THIS IS TO AVOID TEX BEING CONFUSED BY CONDITIONALS IN FALSE BRANCHES +\catcode1 0 +\catcode92 12 + +^^Aifnum^^AForEnglish=1 + + ^^Acatcode92 0 + +% START ENGLISH VERSION +\bookmark[named=FirstPage,level=1]{Title page} + +\begingroup + +\etocsetstyle{part} + {\etocskipfirstprefix} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendpart\treetok\parttok {teal!60}% first + \or \appendpart\treetok\parttok {yellow!80}% second + \else\appendpart\treetok\parttok {green!50}% third and next ... + \fi + } + {\stepcounter{partco}% + \edef\treenode{node + {\unexpanded\expandafter{\etocthelinkednumber}. + \unexpanded\expandafter{\etocthelinkedname}}}% +% grosse astuce: la première Partie ne sera pas embêtée par les trois sections +% avant car ce qu'elles auront mis dans \parttok va être effacé. + \parttok\expandafter{\treenode}} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendpart\treetok\parttok {teal!60}% first + \or \appendpart\treetok\parttok {yellow!80}% second + \else\appendpart\treetok\parttok {green!50}% third and next ... + \fi + } + +\etocsetstyle{section} + {} + {} + {% define the section node + \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} + \unexpanded\expandafter{\etocthelinkedname}}}}% + \appendtotok\parttok\childnode } + {} + +\etocsetnexttocdepth{section} +\etocsettocstyle + {\setcounter{partco}{0}% + \treetok{\node [root concept]{\normalfont{The \etoc package}\par {\normalsize\textsc + {Jean-François Burnol}\par \ttfamily jfbu (at) free (dot) fr}\par + {\normalsize Package + version:\par \etocpkgversion{} (\etocpkgdate )\par}}}} + {\global\appendtotok\treetok{ ;}} + +\etocinline\tableofcontents\label{toc:mindmaptitlepage} + +% \immediate\openout\TOCasTree=\jobname.toctree +% \immediate\write\TOCasTree{\the\treetok}% + +\tikzset{ + branch color/.style={ + concept color=#1!white, + every child/.append style={concept color=#1!white!30!white}, + } +}% + +\global\setbox\TitlePageMindmapTOC\hbox{% +\resizebox{.9\paperwidth}{!}{% +\begin{tikzpicture}[mindmap, + text width=2cm, + align = flush center, + growth function=\tikzmycustomgrowth, + nodes={concept}, + concept color=orange!60, + root concept/.append style={font=\huge, text width = 6cm}, + level 1/.append style={level distance=7cm, sibling angle=360/8},% 8 hard-coded mais je pourrais aussi le calculer + level 1 concept/.append style={font=\Large, text width = 3cm}, + level 2/.append style={level distance=12.5cm, sibling angle=360/35},% 35 hard coded mais je pourrais aussi le calculer + % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment) + ] +\the\treetok +\end{tikzpicture}}} +\endgroup + +\indent\null +\begingroup + \let\thefootnote\empty + \footnote{Documentation (\etocdocdate) generated from the source file + with timestamp ``\etocdtxtimestamp''.} +\endgroup +\setcounter{footnote}{0} + +\AddToShipoutPictureFG*{% + \put(10.5cm,16.85cm) + {\makebox(0,0){\box\TitlePageMindmapTOC}}} + +\clearpage + +\etocdepthtag.toc {preamble} + +%---- +% MAIN TOC +% +\etocsettocdepth {subsubsection} +\etoctoclines +\etocmarkboth\contentsname +\etocmulticolstyle[1] + {\pdfbookmark[1]{Table of contents}{MAINTOC}% + \noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} + +\begingroup + \etocsetlevel{subsection}{3} + \etocsetlevel{subsubsection}{6} + \tableofcontents \label{toc:main} +\endgroup + +\phantomsection\addcontentsline{toc}{section}{\abstractname} +\begin{abstract} + The \etoc package gives to the user complete control on how + the entries of the table of contents should be constituted + from the \emph{name}, \emph{number}, and \emph{page number} + of each sectioning unit. This goes via the definition of + \emph{line styles} for each sectioning level used in the + document. The package provides its own custom line styles. + Simpler ones are given as examples in the documentation. The + simplest usage will be to take advantage of the layout facilities + of packages dealing with list environments. + + Regarding the \emph{global toc display}, \etoc provides pre-defined styles + based on a multi-column format, with, optionally, a ruled title or framed + contents. + + The \csa{tableofcontents} command may be used arbitrarily many times and it + has a variant \csa{localtableofcontents} which prints tables of contents + `local' to the current surrounding document unit. An extension of the + \csa{label}/\csa{ref} syntax allows to reproduce (with another layout) a local + table of contents defined somewhere else in the document. + + Via ``depth tags'', one gets an even finer control for each table of contents + of which sectioning units it should, or not, display. + + The formatting inherited (and possibly customized by other + packages) from the document class will be used when in + \emph{compatibility mode}. + + The assignment of levels to the sectioning units can be changed at any + time, and \etoc can thus be used in a quite general manner to + create custom ``lists of'', additionally to the tables of contents + related to the document sectioning units. No auxiliary file is used + additionally to the standard |.toc| file. +\end{abstract} + +\section{Foreword} + +Popular packages dealing with TOCs include |tocloft|, |titletoc| +and |minitoc|. Why another one? I started \etoc +for my own use, and found out only later about these mentioned +packages. + +As is well explained in the |tocloft| package documentation, +the standard \LaTeX{} layout for the Table of Contents is +buried in the class definitions. In particular, most of the +lengths therein are hardcoded, and the only way for the user +to change them is to recopy the class definitions into the +document and then change them to obtain what is desired +(within suitable \csa{makeatletter} and \csa{makeatother}). +The more reasonable alternative is to use a dedicated package such as +|tocloft| or to use another flexible document class. + +However, although now things are hopefully not hard-coded, one +still has to go through the package or class interface. This +means one has to memorize a (possibly large) number of macros +which will serve only to this task, and one will always be +constrained to customizing one initially given layout. + +The spirit of \etoc is something else. The user will deal with +the \emph{name}, the \emph{number} and the \emph{page number} +corresponding to each document sectional division (and +found in a line of the |.toc| file) in a completely arbitrary +manner: they are made available via the \csb{etocname}, +\csb{etocnumber}, and \csb{etocpage} commands. + +\etoc appears to be (at least partially) compatible with the +|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| and +|memoir| classes. Starting with release |1.07k| it is possible to +use \etoc concurrently with package |tocloft|. + +\section{License} + +\begingroup\ttfamily\small\hyphenchar\font -1 + \parindent0pt + \obeyspaces\obeylines % +\etocLicense\endgroup + + +\clearpage + +\etocsettocdepth {subsection} + +\etocdepthtag.toc{overview} + +\part{Overview}\label{part:overview} + +\thispartstats + +\invisiblelocaltableofcontents \label{toc:overview} + +\section{Do I need to be a geek to use \etoc?} + +Not quite. The simplest way is to use |enumerate| environments, +with the customizing facilities of packages such as +|enumitem|,\footnote{\url{http://ctan.org/pkg/enumitem}} to +display the data fetched by \etoc from the |.toc| file. The data +consists of the \emph{name} (\csb{etocname}), \emph{number} +(\csb{etocnumber}), and \emph{page number} (\csb{etocpage}) as +extracted +% \footnote{although \LaTeX{} has been promoted as +% separating contents from form, there are some areas where its +% real implementation is very far from this ideal. And the |.toc| +% file is a case in point; not to mention the hard-coded +% dimensions, with use of the @ sign, +% in the macros responsible for constructing the typeset table of +% contents.} +from the |.toc| file. + +This is +illustrated \hyperref[toc:a]{at the start} of +\autoref{part:linestyles}. More +sophisticated examples would use more sophisticated |enumitem| +options. One may say then that again the user has to memorize some +customizing! indeed, but the syntax and option names to memorize +are in no way related only to matters of tables of contents, hence +an economy of use of the poor brain. + +% People who +% know the internals of \LaTeX2e well (which is not my case) could +% happily use directly a |\list| command; + +Next in ease of use, perhaps, is the method explained +\hyperref[sec:firstexample]{later in this part} (\autoref{sec:firstexample}). +For this some knowledge of |\leftskip|, |\rightskip|, etc... is necessary. And a +slight elaboration of this method, whose code is to be found in +\autoref{ssec:tocwithdepthtags}, allows to mimick very well, if so desired, the +standard looks. + +As will be amply illustrated in this manual, \etoc is quite +versatile (especially as it allows to re-define at any point in +the document the hierarchy of sectioning units) and one can +achieve surprising effects with it: \autoref{part:surprising} is +devoted to this, and some more is to be found in +\autoref{part:tipsandtricks}. + +\begin{framed} +\setcounter{mycounti}{0}% + \etocinline +\etocsetlevel{part}{1} +\etocsetlevel{chapter}{1} +\etocsetlevel{visibletoc}{0} +\etocsetstyle{visibletoc} + {} + {\stepcounter{mycounti}} + {} + {} +\etocsettocstyle{}{} +\etocsetnexttocdepth{0} +\tableofcontents +A very important aspect of \etoc is that it is geared towards making many TOCs +in the same document, \emph{using only one |.toc| file}! The present +documentation contains \arabic{mycounti} visible tables of contents (and a few +invisible ones) and uses only one |.toc| file!\footnotemark{} So one should +think +twice before adding manually extra commands to the |.toc| file (see +\autoref{sec:addingtotoc}). +\end{framed} + +\footnotetext{and the counting itself has been achieved by a table of contents + which was inserted in the framed paragraph! \dots the technique for this kind + of effect will be explained later.} + + +\subsection{Limitations in the use of list environments for + tables of contents} +\label{ssec:limitations} + +There are some limitations to the use of list environments +for typesetting TOCs. One of them is intrinsic to the scope +limitations created by the groups associated to the +environments: the |.toc| file +may contain, besides the information to be typeset in the +TOCs, some other commands, such as language changing +commands, which do not expect to see their scope limited in +this way inside a group (\LaTeX's environments create groups). + +Therefore the built-in ``line styles'' proposed by \etoc as an example (and +which are illustrated\footnote{with a twist, subsections having been downgraded + to the subsubsection style\dots} by the \hyperref[toc:main]{main table of + contents} in this document) do not make use of environments. Actually, in this +user manual, only the \hyperref[toc:a]{table of contents} at the start of +\autoref{part:linestyles} and the \autoref{toc:allsubsections} (which is a TOC!) +have their line styles expressed in terms of enumerate environments. + +\section{Line styles and toc display style} + +A distinction shall be made between the \emph{line styles}, +\emph{i.e.} the way the name, number and page numbers are +used at each level, and the \emph{toc display style} (for +lack of a better name) which tells how the title should be +set, whether an entry in the |.toc| file should be made, +whether the contents should be typeset with multiple columns, +etc... the latter is governed by the command +\csa{etocsettocstyle} (or some higher-level commands) and the +former by the command \csa{etocsetstyle}. + + +\subsection{\csbhyp{etocsetstyle} for the line styles} + +The command to inform \etoc of what to do with \csa{etocname}, \csa{etocnumber}, +and \csa{etocpage} is called \csb{etocsetstyle}. It has five mandatory +arguments. The first one is the name of the sectional unit: a priori known names +are |book|, |part|, |chapter|, |section|, |subsection|, |subsubsection|, +|paragraph|, and |subparagraph|, and any other name can be declared and assigned +to a (numeric) level via the \csb{etocsetlevel} command.\footnote{under the + \texttt{memoir} class, \etoc knows \texttt{appendix} as a sectioning + name.} + +The four other arguments of \csb{etocsetstyle} specify: 1) \emph{what to do when + this level is first encountered, down from a more general one,} then 2) \& 3) +(two arguments, a `prefix' and a `contents') \emph{what to do when a new entry + of that type is found,} and 4) \emph{the last argument is the code to execute + when a division unit of higher importance is again hit upon.} + +\subsection{\csbhyp{etocsettocstyle} for the toc display} + +The \csb{etocsettocstyle} command allows to specify what +should be done before and after the line entries of the TOC +are typeset, and in particular how the title should be +printed. It has two arguments, the first one is executed +before the TOC contents (typically it will print +``Contents'' and define suitable marks for the page headings) and +the second is executed after the TOC contents. + +\etoc provides four (customizable) higher level toc styles: +\csb{etocmulticolstyle}, \csb{etoctocstyle}, +\csb{etocruledstyle}, and \csb{etocframedstyle}. All use the +|multicol| package with a default of two columns +(single-column mode is obtained with the optional argument |[1]|). + +These commands must be followed either by \toc or \localtoc. + +\subsection{Compatibility mode}\label{ssub:compat} +\label{etoctoclines} +\label{etocstandardlines} + +Both for the ``line styles'' and the ``toc display style'', it is +possible to switch into a compatibility mode which uses the +defaults from the +document class.\footnote{for the ``toc display style'' + \etoc checks if it knows the class, and if not defaults to + the |article| class layout. It will also check if + \texttt{tocloft} has customized the TOC title.} +This is activated by:\\ +\makebox[5.2cm][l]{\csb{etocstandardlines}} + |% `line entries' as without \usepackage{etoc}|\\ +\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}} + |% `toc display' as without \usepackage{etoc}| + + +If the command \csa{etocsetstyle} has \emph{not been used in the +preamble} the package will be at |\begin{document}| in this + compatibility mode: hence just adding \csa{usepackage\{etoc\}} + should hopefully not change anything to the look of a + previously existing document, under the |article|, |book|, + |report|, |scrartcl|, |scrbook|, |scrreprt| and |memoir| + classes. + + Any use of \csa{etocsetstyle} in the \emph{preamble or body} of + the document turns off from that point on the compatibility mode + for line styles, but maintains the compatibility mode for the + TOC title. One re-activates the compatibility mode for line + styles with \csb{etocstandardlines}; and + \csb{etoctoclines} will re-activate the line styles as defined + with the help of \csa{etocsetstyle}, if their scope was not + limited to a group or environment. + + The command \csb{etocdefaultlines} resets the line styles as + pre-defined internally by \etoc and described in + \autoref{etocdefaultlines}. + +Even if \csb{etocsetstyle} has been used, the global display style +remains initially as defined by the document class (or the +|tocloft| package); one needs to use the command +\csb{etocsettocstyle} or its variants to exit from this +compatibility mode at the ``toc display style'' level. It will be +re-activated if use if made of \csb{etocstandarddisplaystyle}. + +\section{A first example} +\label{sec:firstexample} + +Let us present a first example of specification for line styles. +Immediately after the start of \autoref{part:overview} we inserted in the +source file: +\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|} This +sets-up the label |toc:overview|, and we can use it at any location in the +document: \centeredline{|\tableofcontents \ref{toc:overview}|} And as we used +|\invisible...|,\footnote{this is a shortcut for setting temporarily the + |tocdepth| to |-3|, which has the effect to tell \etoc not to print the TOC, + and not even the heading.} the local TOC will exist only through its clones +elsewhere in the document. + +We could use the line styles defined by \etoc, with \csb{etocdefaultlines}, or +the default document class styles with \csb{etocstandardlines}, but we were a +bit more ambitious here and wanted to design our own. The technique is a simple +one: each heading is in its own paragraph, which may extend on multiple lines; +it is responsible for setting its own |\leftskip|. + + + +\begingroup +\parindent 0pt +\parfillskip 0pt +\leftskip 0cm +\rightskip 1cm +\etocsetstyle {section} + {} + {\leavevmode\leftskip 0cm\relax} + {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip .5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 1.5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC of + \autoref{part:overview} (\nameref{part:overview})} +\tableofcontents \ref {toc:overview} +\endgroup + + +This is a simple design which does not make provisions for page breaks +which should be discouraged in-between a section and a subsection +etc\dots{} as we only used it for the table of contents of this part, thus +with sections as top levels, there was no need to specify a style for +parts too (we defined a subsubsection line style but as it turns +out there are no subsubsections in this part). The two commands used are +\csb{etocsetstyle} for specifying the line styles, and +\csb{etocruledstyle} for the TOC global style. + +The |\rightskip| is shared by all, and creates space where the page +numbers get printed. For an elaboration of this technique see the next +\autoref{sec:secondexample} as well as \autoref{ssec:tocwithdepthtags} +which provides a TOC with parts and paragraphs. Both allow multi-line +headings and employ a technique for putting page numbers in the right margin +which was inspired from what \LaTeX2e's |\@dottedtocline| macro does. + + + +\begin{verbatim} +\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm +\etocsetstyle {section} + {} + {\leavevmode\leftskip 0cm\relax} + {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip .5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 1.5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC of + \autoref{part:overview} (\nameref{part:overview})} +\tableofcontents \ref {toc:overview} +\endgroup +\end{verbatim} + +\section{A second example} +\label{sec:secondexample} + +This second example displays only the contents from +\autoref{part:linestyles} and \autoref{part:globalcmds}. This selection +is done via the technique of \emph{depth tags}, described in +\autoref{etocsettagdepth} and \autoref{ssec:tocwithdepthtags}. Its +layout is a bit like the one of the \hyperref[toc:main]{main document + TOC}, although the line styles are coded very differently. + +\begingroup +\newcommand*{\DotsAndPage} +{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% + \hfill\nobreak + \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} + +\etocsetstyle {part} +{\parindent 0pt + \nobreak + \etocskipfirstprefix} +{\pagebreak[3]\bigskip} +{\large\rmfamily\bfseries\scshape\centering + \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} +{} + +\etocsetstyle {section} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \nobreak\medskip + \etocskipfirstprefix} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \pagebreak[1]\smallskip} +{\normalsize\rmfamily\bfseries\scshape + \etocnumber. \etocname\DotsAndPage } +{\parfillskip 0pt plus 1fil\relax } + +\etocsetstyle {subsection} +{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax + \nobreak\smallskip} +{} +{\footnotesize\sffamily\mdseries\itshape + \etocname{} (\etocnumber, p. \etocpage). } +{\par\medskip} + +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {none} +\etocsettagdepth {arbitrarily}{none} +\etocsettagdepth {surprising} {none} +\etocsettagdepth {linestyles} {subsection} +\etocsettagdepth {globalcmds} {subsection} +\etocsettagdepth {custom} {none} +\etocsettagdepth {tips} {none} +\etocsettagdepth {code} {none} + +\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup + +The code: +\begin{verbatim} +\begingroup +\newcommand*{\DotsAndPage} +{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% + \hfill\nobreak + \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} + +\etocsetstyle {part} +{\parindent 0pt + \nobreak + \etocskipfirstprefix} +{\pagebreak[3]\bigskip} +{\large\rmfamily\bfseries\scshape\centering + \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} +{} + +\etocsetstyle {section} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \nobreak\medskip + \etocskipfirstprefix} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \pagebreak[1]\smallskip} +{\normalsize\rmfamily\bfseries\scshape + \etocnumber. \etocname\DotsAndPage } +{\parfillskip 0pt plus 1fil\relax } + +\etocsetstyle {subsection} +{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax + \nobreak\smallskip} +{} +{\footnotesize\sffamily\mdseries\itshape + \etocname{} (\etocnumber, p. \etocpage). } +{\par\medskip} + +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {none} +\etocsettagdepth {arbitrarily}{none} +\etocsettagdepth {surprising} {none} +\etocsettagdepth {linestyles} {subsection} +\etocsettagdepth {globalcmds} {subsection} +\etocsettagdepth {custom} {none} +\etocsettagdepth {tips} {none} +\etocsettagdepth {code} {none} + +\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup +\end{verbatim} + +\section{Linked list of the main package commands} + +\begingroup\raggedcolumns +\advance\linewidth18pt +\begin{multicols}{3}\parindent0pt\relax + \csb{etocaftercontentshook}\par + \csb{etocaftertitlehook}\par + \csb{etocaftertochook}\par + \csb{etocbeforetitlehook}\par + \csb{etocdefaultlines}\par + \csb{etocdepthtag.toc}\par + \csb{etocdisplay}\par + \csb{etocframedstyle}\par + \csb{etocframed}\par + \csb{etociffirst}\par + \csb{etocifnumbered}\par + \csb{etocignoredepthtags}\par + \csb{etocignoretoctocdepth}\par + \csb{etocinline}\par + \csb{etoclink}\par + \csb{etoclocalframed}\par + \csb{etoclocalmulticol}\par + \csb{etoclocalruled}\par + \csb{etocmulticolstyle}\par + \csb{etocmulticol}\par + \csb{etocname}\par + \csb{etocnumber}\par + \csb{etocobeydepthtags}\par + \csb{etocobeytoctocdepth}\par + \csb{etocpage}\par + \csb{etocruledstyle}\par + \csb{etocruled}\par + \csb{etocsetlevel}\par + \csb{etocsetnexttocdepth}\par + \csb{etocsetstyle}\par + \csb{etocsettagdepth}\par + \csb{etocsettocdepth.toc}\par + \csb{etocsettocdepth}\par + \csb{etocsettocstyle}\par + \csb{etocskipfirstprefix}\par + \csb{etocstandarddisplaystyle}\par + \csb{etocstandardlines}\par + \csb{etocthelinkedname}\par + \csb{etocthelinkednumber}\par + \csb{etocthelinkedpage}\par + \csb{etocthelink}\par + \csb{etocthename}\par + \csb{etocthenumber}\par + \csb{etocthepage}\par + \csb{etoctoccontentsline}\par + \csb{etoctoclines}\par +%\vspace{5\baselineskip}\hrule height 0pt +\end{multicols} +\endgroup + + +\clearpage +% 15 octobre, je teste les tags +\etocdepthtag.toc {arbitrarily} + +\part{Arbitrarily many TOCs, and local ones too} +% 13 octobre, ceci était une section avant + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents + +\section{Labeling and reusing elsewhere} + +\etoc allows arbitrarily many \csa{tableofcontents} commands in +your document. The line styles and the toc display style may of +course be changed in-between. Furthermore +\csa{localtableofcontents} will print local tables of +contents: \emph{i.e.} all sections and sub-units inside a +given chapter, or all subsubsections and lower inside a given +subsection, etc . . . + +\etoc allows the labeling of a TOC with (for example) +\csa{label\{toc:A\}} and will redisplay it elsewhere when +told \csa{tableofcontents}\csa{ref\{toc:A\}}. The actual +layout (title inclusive) used for the cloned TOC will be +decided locally. The line styles and toc display style +(including the title) will be the current ones and the +current value of the |tocdepth| counter is obeyed. As an +example the table of contents of +\autoref{part:custom} is in a \hyperref[toc:d]{float} which appears +\vpageref{toc:d}. +\begin{figure}[ht!] + \centering + \begingroup + \etocstandardlines + \renewcommand{\etocbkgcolorcmd}{\color{green!5}} + \renewcommand{\etocbelowtocskip}{0pt\relax} + \fboxsep1ex + \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone + \hyperref[toc:c]{I am from far away}}}} + \tableofcontents \label{toc:d} \ref{toc:c} + \endgroup +%% \centeredline{The original is \hyperref[toc:c]{there}.} +\end{figure} + +We used this: +\begin{verbatim} +\begin{figure}[ht!] + \centering + \begingroup + \etocstandardlines + \renewcommand{\etocbkgcolorcmd}{\color{green!5}} + \renewcommand{\etocbelowtocskip}{0pt\relax} + \fboxsep1ex + \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone + \hyperref[toc:c]{I am from far away}}}} + \tableofcontents \label{toc:d} \ref{toc:c} + \endgroup +\end{figure} +\end{verbatim} +Important: one should not use elsewhere \toc|\ref{toc:d}|. To clone again, one +must use a reference to the original label: \toc|\ref{toc:c}|. + +\section{A powerful functionality of \etoc: the + re-assignment of levels with \csbhyp{etocsetlevel}} + +The intrinsic levels manipulated by \etoc are numeric: from +|-2| (which corresponds to |book| in the |memoir| class) +down (from the big to the small) +to |5| (|subparagraph|). But the assignment of a numeric level +to a given name can be modified at any time with the command +\csb{etocsetlevel}\marg{level\_name}\marg{number}. In conjunction +with the use of the \LaTeX{} |tocdepth| counter, this has +powerful applications: \meta{level\_name} does not have to +coincide with an actual document sectioning command, and \etoc +can be used to print arbitrary ``lists of things'', using no +other auxiliary file than the |.toc| file. This is +explained further in \autoref{part:surprising}. + +\begin{framed} + It is often said that in the standard classes, the sectioning + level of |\part| is |0| in the classes not having a |\chapter| + command, and |-1| in classes having a |\chapter| command. This + is \emph{correct} for what regards the \emph{automatic + numbering}, as is governed by the value of the |secnumdepth| + counter; but it is \emph{wrong} for what regards the effect of + the |tocdepth| counter: setting the |tocdepth| to |-1| in the + |article| class just before |\tableofcontents| does \emph{not} + prevent Parts from appearing in the Table of Contents. One has + to set it to |-2| for that, whether in the |article| or in the + |book| class. + + The canonical levels, a priori known to \etoc, are those of + relevance to the \textbf{|tocdepth|} counter in the standard + classes and are recapitulated in this table: \centeredline{ + \fbox{\begin{tabular}{rc} + (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\ + section&1\\ subsection&2 \\ + subsubsection&3 \\ paragraph&4 \\ subparagraph& 5 + \end{tabular}}} + +\smallskip With \etoc, the user can easily print a local table of +contents inside a given subsection, where subsubsections will be +printed in the style of sections, paragraphs in the style of +subsections, and subparagraphs in the style of subsubsections, if +so desired. One can also decide to set everything to be at the level +|6| (never displayed by \etoc), except for example +paragraphs, promoted to be at level |1|, and then one obtains a nice +table of contents of all the paragraphs from the document! +(|tocdepth| at least |1|)\footnotemark +\end{framed} + +\footnotetext{and one should naturally not print this TOC of paragraphs in + compatibility mode, which would insist on inserting a gigantic left + margin.} + +\section{The \csbhyp{etoc\-set\-toc\-depth} and + \csbhyp{etoc\-set\-next\-toc\-depth} commands} +\label{etocsettocdepth} +\label{etocsetnexttocdepth} + +The |tocdepth| counter has no bearing on what gets written to the |.toc| file; +its action is only on the actual typesetting of the table of contents: in the +standard classes there is only one |\tableofcontents| possible, whereas with +\etoc, arbitrarily many are allowed, so one may change |tocdepth| to the +appropriate value (which decides the finest sectioning level displayed) again +and again each time a table of contents needs to be typeset. + +\etoc provides \csb {etocsettocdepth}\marg{level} whose mandatory argument is +either +numeric (from |-3| to |5|) or a division name such as |subsection| or +|subsubsection| or any name previously declared to \etoc with +\csb{etocsetlevel} (the keywords |all| and |none| are recognized, although not +corresponding to a document division). +This does the appropriate |\setcounter{tocdepth}{numeric_level}|. + +As is explained in the next subsection, |tocdepth| is used by |hyperref|, and +one must take steps to prevent its changes from influencing the bookmarks, too. +So, \etoc has \csb {etocsetnexttocdepth}\marg{level} whose influence ceases +immediately after the next table of contents. Thus, |\invisibletableofcontents| +is essentially |\etocsetnexttocdepth{none}\tableofcontents|. + +The simplest course is thus to have after |\begin{document}| and before the + first |\tableofcontents| a single instance of the \csb{etocsettocdepth} + command, with argument the deepest level (or most commonly used deepest level) + among the tables of contents of the document, and to use locally, + where needed, \csb{etocsetnexttocdepth} before |\tableofcontents| or + |\localtableofcontents|. + +\subsection{The hyperref option \emph{bookmarksdepth}} +\label{ssec:bookmarksdepth} + +When modifying the counter |tocdepth| for the purposes of +multiple uses of \toc or \localtoc, one should be aware that +package |hyperref| by default takes into account the +\emph{current} value of the |tocdepth| counter to decide +whether the |pdf| file will contain a bookmark corresponding +to sectioning commands encountered in the source file. Thus, +one typically needs to reset |tocdepth| to its previous +value after having temporarily modified it for a given table of +contents. + +Or, there is the \emph{bookmarksdepth=n} option of package +|hyperref|, with \emph{n} the desired document bookmarks +maximal depth, which can be numeric or the name of a level known to +|hyperref|. This documentation previously passed |bookmarksdepth=3| as +option to |hyperref|, so even if |tocdepth| was left to |1| +by inadvertance after printing a certain table of contents +this did not modify the bookmark tree of the |pdf| file. Now that +\csb{etocsetnexttocdepth} has been added to the package, we have used it +systematically and there was no need for |bookmarksdepth=3| anymore. + +\section{The command \csbhyp{etoc\-set\-toc\-dep\-th.toc}} +\label{etocsettocdepth.toc} + +This command \csb{etocsettocdepth.toc} implements some functionality of +|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. I thank D.B. for drawing + my attention to the incompatibility of this package with \etoc.}, a package +which however was incompatible with \etoc (it can still be used for its +|secnumdepth|-related commands, but its |toc|-related activities will get +canceled by \etoc) and more-or-less designed for a single table of contents. + +The action of \csb{etocsettocdepth.toc} is totally different than the one of +\csb{etocsettocdepth}. Rather than modifying the |tocdepth| counter immediately, +it adds a line to the |.toc| file which, when executed inside a table of +contents will enact this change. + +The command \csb{etocsettocdepth.toc}, like +\csb{etocsettocdepth}, accepts both numeric and named +arguments. In the case of a named argument, the actual numeric +value to be used is not yet decided at the time the |.toc| +file is created; it will be the value currently specified for +the named level at the time each table of contents (not having +done |\etocignoretoctocdepth|) is typeset. + +The |tocdepth| counter will never be set to a value finer than its initial value +at the start of the table of contents: so adding commands +\csb{etocsettocdepth.toc} in the document is a way to \emph{restrict} locally +the depth of the table of contents. For example to prevent inclusion in the +tables of contents of the sub-sub-sections of a given chapter. + +This +{\fbox{gets executed in ALL tables of contents.}} + +\subsection{The commands \csbhyp{etocobeytoctocdepth} and \csbhyp{etocignoretoctocdepth}} +\label{etocobeytoctocdepth} +\label{etocignoretoctocdepth} + + +So \csb{etocignoretoctocdepth} is provided to cancel the +\csa{etocsettocdepth.toc} mechanism when +needed; and \csb{etocobeytoctocdepth} will +re-activate it. The package does initially \csb{etocobeytoctocdepth}. + + +\section{The commands \csbhyp{etoc\-depth\-tag.toc} and \csbhyp{etocsettagdepth}} +\label{etocdepthtag.toc} +\label{etocsettagdepth} + +As mentioned above, when the argument to \csb{etocsettocdepth.toc} isn't +numeric but a named level the actual numeric level used is decided at the time +the TOC gets typeset, thus with the \emph{shuffling abilities of \etoc}, one may +obtain a very flexible control in the following way: one first declares with +\csb{etocsetlevel} some +dummy named level, say |partIII|, assigning it the invisible numeric level |6|. +Then before the actual third |\part| command in the source one inserts +\csb{etocsettocdepth.toc}|{partIII}|. At the location where the effect should +cease one inserts in the source \csb{etocsettocdepth.toc}|{all}|. It is now +possible to specify, each time one wants to typeset a TOC, what will be the +finest level for the entries originating in the third part: one just has to do +\csa{etocsetlevel}|{partIII}{1}| for example. This will limit to sections +(if |tocdepth| was at least at that level at the time \toc is encountered). + +This method has some limitations: +\begin{enumerate*}[label={(\roman*)}] + \item the second argument to \csb{etocsetlevel} must be numeric, + \item it can not be set to |-3| (which would be necessary if one wanted to + exclude an entire Book from a TOC in a |memoir| document with multiple such + Books \dots admittedly a possibly rare case!), + \item it is a bit of a hack as |partIII| is not a real division unit, but just + a \emph{tag}. +\end{enumerate*} + +Release |1.07h| has a command \csb{etocdepthtag.toc} which +makes it easier to achieve this variable local control of the |tocdepth| at the +time of typesetting TOCs. + +It is used as \csb{etocdepthtag.toc}\marg{tag\_name}, where the \meta{tag\_name} +is anything, and this will put the tag in the |.toc| file. When typesetting a +TOC, one issues a series of commands +\csb{etocsettagdepth}\marg{tag\_name}\marg{level} where the \meta{level} may be +either numeric (from |-3| to |5|) or the name of a division unit known to \etoc, +or |none| or |all|. The effect of the tag inside the |.toc| file will then be to +set the |tocdepth| counter to the desired value, in real time (as mentioned +already, this can not get finer than the initial value of |tocdepth| at the +start of the TOC). + +The added flexibility is thus that \csb{etocsetlevel} has not been used in a +kind of hacky way, that one may use named level depths, and the +keywords |none| and |all|. + +As usual, once the tag depths have been set, they remain in effect until getting +redefined or seeing their scope expire via the closing of a group or of a +surrounding +environment. For an example, see \autoref{ssec:tocwithdepthtags}. + + +\subsection{The commands \csbhyp{etocobeydepthtags} and \csbhyp{etocignoredepthtags}} +\label{etocobeydepthtags} +\label{etocignoredepthtags} + + +After \csb{etocignoredepthtags}, the |.toc| depth tags are ignored (but +\csb{etocdepthtag.toc} still works). The package does initially +\csb{etocobeydepthtags} which makes \etoc react to the found tags in the +|.toc| file. + + + + + +\section{Adding commands to the \texorpdfstring{\texttt{.toc}}{.toc} file} +\label{sec:addingtotoc} + +We described above \csb{etocsettocdepth.toc} and \csb{etocdepthtag.toc} which +both insert commands inside the |.toc| file. An even more general mechanism of +adding ``action tags'' to the |.toc| file could be envisioned, but this would +just be a wrapper for direct use of |\addtocontents{toc}{\something}|. + +One should be cautious when adding in this way +things +to the |.toc| file. For example, inserting +\csa{addtocontents}|{toc}{\string\clearpage}| +just +before a \csa{part} to fix the problem when some part entry (in +the table of contents) is isolated at the bottom of one page, +will cause problems with multiple TOCs: this \csa{clearpage} +will be executed by \etoc each time a \toc or \localtoc +command is encountered! The more prudent thing is to do +rather: {\csa{addtocontents}|{toc}{\string\myclearpage}|,} +to have a |\let\myclearpage\relax| at the top level of the +document and to use where needed something like: +\begin{verbatim} +\let\myclearpage\clearpage +\tableofcontents +\let\myclearpage\relax +\end{verbatim} +The |memoir| class has the command \csa{settocdepth} which +writes a \csa{changetoc\-depth} command inside the |.toc| file. +This will impact the typesetting by \etoc of \emph{all} tables +of contents, with (possibly) unexpected results: imagine the +document has \csa{settocdepth}|{chapter}| at some point to +avoid having the sections from subsequent chapters be listed +in the main table of contents. Then a local table of contents +in one of these chapters will print a title but will be +without any entry. + +As the |memoir| class by itself allows multiple\toc + these issues already arise there, + independently of \etoc, see page 170 of the |memoir| + manual. + +For this specific issue, the commands \csb{etocsettocdepth.toc}, +\csb{etocignoretoctocdepth} and \csb{etocobeytoctocdepth} are the way to go; or +their variants \csb{etocdepthtag.toc} and \csb{etocsettagdepth}. + +As an aside, any |\setcounter{tocdepth}{n}| command added directly to the |.toc| +file sees its effect (since release |1.07g|) canceled at the end of each table +of contents, which automatically does a |\setcounter{tocdepth}{previous_value}| +with the value active on entering the table of contents. + +\subsection{The hyperref option \emph{hidelinks}}\label{ssec:hidelinks} + +The colored links (and also the rectangle links) are a bit +annoying when used in tables of contents, especially when +the document uses \etoc and has plenty of them! One may wish +for having colored links, \emph{except} for those within +table of contents! +Indeed, why would things in TOCs need to be either framed in +rectangles or colored, when the user \emph{already expects + them to be links}? + +I use the following trick: either in the preamble using +|\AtBeginDocument|, or right after |\begin{document}|, I + have the command + \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|} + + \begin{framed} + All TOCs typeset by \etoc have their contents done + within a group (as if enclosed in an environment). So + the command \csa{hypersetup}|{hidelinks}| will be + executed by \emph{each} TOC, but its effect will be + limited to that TOC. + \end{framed} + + I found out experimentally that the option |hidelinks| could + indeed be set many times with |\hypersetup| (this is not the + case of all |hyperref| options). + + + +\section{Two Examples} + +\subsection{A Beautiful Thesis example} + +Here is another relatively simple example of use of the package +functionalities. +Let us set up some line styles. We choose a style for sections and +sub-sections which would be suitable for, respectively, sections and +sub-sections in an average length memoir. The line style specifications have +some redundancy for clarity, and do not care about what to do at possible page +breaks. Also, they do not worry about potential multi-column use. + +\begin{verbatim} +\begingroup % we start a group to keep the style changes local +\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm} +\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm} + +\etocsetstyle{section} % will pretend to be a Chapter +{\addvspace{1ex}\parfillskip0pt + \leftskip\tocleftmargin % (already done in title) + \rightskip\the\tocrightmargin plus 1fil + \parindent0pt\color{cyan}} % (already done) +{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} +{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\etocsetstyle{subsection} % will pretend to be a Section +{} +{\mdseries\large\addvspace{.5ex}\leavevmode} +{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\def\tmptitle{My Beautiful Thesis} +\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin + \leavevmode\leaders\hrule height 1pt\hfill\ + \huge\textit{\tmptitle}\par}{\bigskip} + +\tableofcontents \ref{toc:overview} +\endgroup +\end{verbatim} + + +\begingroup +\newlength{\tocleftmargin} +\setlength{\tocleftmargin}{5cm} +\newlength{\tocrightmargin} +\setlength{\tocrightmargin}{1cm} + +\etocsetstyle{section} +{\addvspace{1ex}\parfillskip0pt + \leftskip\tocleftmargin + \rightskip\the\tocrightmargin plus 1fil + \parindent0pt\color{cyan}} +{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} +{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\etocsetstyle{subsection} +{} +{\mdseries\large\addvspace{.5ex}\leavevmode} +{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\def\tmptitle{My Beautiful Thesis} + +\etocsettocstyle{\color{cyan}\parindent0pt\leftskip\tocleftmargin + \leavevmode\leaders\hrule height 1pt\hfill\ + \huge\textit{\tmptitle}\par}{\bigskip} + +\tableofcontents \ref{toc:overview} +% And again, for the fun of it: +% \def\tmptitle{My Very Beautiful Thesis} +% \tableofcontents \ref{toc:c} +\endgroup + + +\subsection{A TOC with a background color}\label{ssec:again} + +Let us now try out some more sophisticated line styles. The +display will use the \csa{etocframedstyle} package command, which +requires that the produced table of contents fits on a single +page. +We wrap it up in a \hyperref[toc:floating]{figure environment} showing up +\vpageref{toc:floating}. + + +\begin{figure}[htbp!]\centering +\colorlet{subsecnum}{black} +\colorlet{secbackground}{green!30} +\colorlet{tocbackground}{red!20!green!20} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 3cm} +\renewcommand{\etocrightrule}{\vrule width 1cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip +\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} +{\shiftedwhiterule{\leftskip}{6pt}} +{\sffamily\footnotesize +\leftskip2.3cm\hangindent1cm\rightskip.5cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par +\nointerlineskip\vskip3pt} +{} + +\etocsetstyle{subsection}{\etocskipfirstprefix} +{\shiftedwhiterule{1.5cm}{6pt}} +{\sffamily\small +\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent +\hbox to .75cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par +\nointerlineskip\vskip3pt} +{} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +% v1.07l on the occasion of traduction into German documentation: + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{blue} + {\hfil \bfseries\large Contents of Part One\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{blue} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}% + \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}% + \vskip6pt} +{} + + +% attention car \ref{toc:floating} fera référence au compteur de +% toutes les toc, pas visibletoc. + +\etocframedstyle[1]{} +\tableofcontents \label{toc:floating} \ref{toc:overview} +\vspace{-\baselineskip} +\centeredline{|\tableofcontents \ref{toc:overview}| +(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})} +\end{figure} + +The actual design is not pre-built in \etoc; it uses its `framed' style with a +background color. The frame borders have been set to have the same color as the +one serving as background for the entire thing. This design (with other colors) +is in use also for \hyperref[toc:clone]{this other toc}, and the +reader is referred to its \hyperref[ssec:tocclone]{subsection} for the +coding used. + +% 11 octobre 2013 ceci était une section avant: +% (17 octobre, je m'aperçois qu'à cause des différents chgts, des +% sous-sections devenant des sections etc... \thisspecialstats ici ne +% faisait pas du tout des statistiques; vaut mieux supprimer et faire +% simplement \localtableofcontents pour maintenir le même layout.) + +% les \clearpage sont embêtants; surtout si je prétends qu'on peut +% recompiler facilement sous d'autres conditions... + +% on va plutôt faire un \vspace suffisant, cela sera un moindre mal + +%\vspace{1cm} + +\clearpage +\etocdepthtag.toc {surprising} +\part{Surprising uses of \etoc} +\label{part:surprising} + +\thispartstats %% (pas de sous-section) + +\etocstandardlines +\etocsettocstyle {}{} +\localtableofcontents + +\section{The TOC of TOCs} + +\begingroup % \endgroup just after the \tableofcontents command +\etocinline +\etocsetlevel{part}{1} +\etocsetlevel{visibletoc}{0} +\etocsetstyle{visibletoc} + {\etocskipfirstprefix} + {, } + {{\color{niceone}\etocname}} + {} +\etocsettocstyle{}{} +\etocsetnexttocdepth{visibletoc} + + +Here is the numbered and linked list of all tables of contents which are +displayed within this document:\footnote{The TOCs put in + floats may change the order: the numbers are listed + in the order the TOCs are typeset in the document; but the numbering + itself is from the order of the TOCs in the \emph{source} of + this document... } +\tableofcontents\endgroup. And to obtain +it here we just wrote:\par\smallskip +{\leftskip1cm\rightskip2cm + \ttfamily\small\baselineskip11pt \noindent Here is the + numbered and linked list of all tables of contents which are + displayed within this + document:~\string\tableofcontents.\par} + + The preparatory work was the following. First, we defined a + counter |visibletoc| whose vocation is to get incremented at + each displayed toc. \etoc has its own private counter but it + counts all TOCs, even those not displayed because the |tocdepth| + value was |-2| or |-3|. + + We could have added manually |\refstepcounter{visibletoc}| + and |\label| commands at all suitable locations in the + document source, and we would then have used here |\ref| + commands, but this imposes heavy manual editing of the source. + + There is a much better way: there is a hook + \csb{etocaftertitlehook} and we told it to increment the + |visibletoc| counter and to write a line to the |.toc| file, + in a manner analogous to what sectioning commands such as + |chapter|, |section|, or |subsection| do. As \etoc + increments its own private counter even before typesetting + the title of a table of contents, this provides (most of the + time) a better link destination than any counter manipulated + from inside \csa{etocaftertitlehook} (for which the link + would target the area just after the title). So, rather than + including |\refstepcounter{visibletoc}| inside + \csa{etocaftertitlehook}, we just put there + |\stepcounter{visibletoc}| followed by the command + \csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. This \etoc + command \csb{etoctoccontentsline}\marg{level\_name}\marg{name} has the same + effect as: + \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}} + but its usefulness is to circumvent\footnote{using \csa{addtocontents} rather + than \csa{addcontentsline}} the patching for automatic creation + of bookmarks done to \csa{addcontentsline} by the |hyperref| package, + as pdf bookmarks don't make + much sense here (and would elicit a complaint + of |hyperref| that the bookmark level is `unknown').\footnote{% + The package provides a starred variant + \staritb{etoctoccontentsline}, which does allow the creation + of bookmarks and has a third mandatory argument which is the + Level to be used by these bookmarks; depending on the context + the starred as well as the non-starred variants may be + profitably preceded by \csa{phantomsection}.} + + Finally, the preamble of the document did + |\etocsetlevel{visibletoc}{6}|. The level |6| (or anything + with a higher number) is ignored, even if |tocdepth| has + value |10| for example; this is independently of whether \etoc + uses the document class default line styles or its own line + styles, or the ones defined by the user with the + \csa{etocsetstyle} command. So there is no need to worry that + something could go wrong. + + Then, only here we have set |\etocsetlevel{visibletoc}{0}|. And to display + only this kind of entries we assign temporarily to |part| and |chapter| level + |1| (or anything higher than zero) and set |tocdepth| to the value |0|. We + also did \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{, + \}\{\string\etocname\}\{\}} which defines an inline display with the comma + as separator. Finally, as \etoc issues |\par| automatically by default just + before typesetting a table of contents, we used the command \csb{etocinline} + (also known as \cs{etocnopar}) which turns off this behavior. + +Here are the implementation details: + +\begingroup +\begin{verbatim} + < in the preamble > +\newcounter{visibletoc} +\renewcommand{\etocaftertitlehook} + {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}} +\etocsetlevel{visibletoc}{6} +\begin{document} + < document body > +\subsection{Surprising uses of etoc} +\begingroup + \etocinline + \etocsetlevel{part}{1} + % \etocsetlevel{chapter}{1} % (no chapters in scrartcl class) + \etocsetlevel{visibletoc}{0} + \etocsetstyle{visibletoc} + {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{} + \etocsettocstyle{}{} % don't set any title, rules or frame or multicol! + \etocsetnexttocdepth{visibletoc} % display only the `visibletoc' entries from .toc + +Here is the numbered and linked list of all tables of contents which are +displayed within this document: \tableofcontents. +\endgroup +\end{verbatim} + +\endgroup + +After |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, all future TOCs (not in +compatibility mode) will use the +defined style for level |0| (which is normally the level for +chapters). To keep these changes strictly local the simplest +manner is to put everything inside a group. + +The \autoref{subsec:interverting} gives another use of the +shuffling of levels. + + +\section{Arbitrary ``Lists Of...'', \csbhyp{etoctoccontentsline}} +\label{etoctoccontentsline} + +This idea of interverting the levels is very powerful and allows +to let \etoc display lists of arbitrary things contained in the +document. All of that still +using nothing else than the |.toc| file! +Example: imagine a document with dozens of +exercises, perhaps defined as |\newtheorem{exercise}{}[section]|. Let +us explain how to instruct \etoc to display an hyperlinked list +of all these exercises. For this we put in the preamble: +\begin{verbatim} + \newtheorem{exerci}{}[section] + % the exercice number will be recoverable via \etocname: v--here--v + \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}} + \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}} + \etocsetlevel{exercise}{6} +\end{verbatim} +In this way, \csa{etocname} will give the exercise number (but \csa{etocnumber} +will be empty). Had we used instead +\begin{verbatim} + \newcommand*{\exercisetotoc} + {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}} +\end{verbatim} +the exercise number would then have been available via \csa{etocnumber}, and +\csa{etocname} would have been empty. It doesn't matter which one of the two +methods is used. The \etoc command \csa{etoctoccontentsline}|{..}{..}| is +provided as a substitute to \csa{addcon\-tentsline}|{toc}{..}{..}|: this is to +avoid the patching which is done by |hyperref| to \csa{addcontentsline} in its +process of creation of bookmarks. If one wants to authorize |hyperref| to create +bookmarks at a specific level \meta{n}, one can use (here with \meta{n}$=$|2|) +the starred variant \starit{etoctoccontentsline} which has an additional +argument: +\begin{verbatim} +\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}} +\end{verbatim} + +The counter |exerci| is already +incremented by the |exerci| theorem environment, and +provides the correct destination for the link added by package +|hyperref|. The command \csa{exercisetotoc} adds for each exercise a line +to the |.toc| file, corresponding to a fictitious document +unit with name `|exercise|'. A +four-column list, including the sections, can then be +typeset with the following code: +\begin{verbatim} + \etocsetnexttocdepth{2} % sections are at level 1 and will show up +\begingroup + \etocsetlevel{exercise}{2} % but: + \etocsetlevel{chapter}{3} % no chapters + \etocsetlevel{subsection}{3} % no subsections + \etocsetlevel{part}{3} % no parts + \etocsetstyle{exercise}{}{} % \etocname = exercise number + {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par} + {\pagebreak[2]\vskip\baselineskip} + \etocsetstyle{section}{}{} + {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par + \nopagebreak[3]}{} + \etocruledstyle[4]{\Large\bfseries List of the exercises} + \setlength{\columnseprule}{.4pt} + \tableofcontents +\endgroup +\end{verbatim} + + +\section{A TOC with a fancy layout} + +Here is a table of contents where +the sections from a given chapter are to be represented by a number +range (like 18--22 for a given chapter, 42--49 for another one ... +of course to be inserted automatically in the TOC). + +This is not an image inclusion, the TOC is produced from its original +|tex| source inserted in this document after replacement of +|part|, |chapter| or |section| with |dummypart|, |dummychapter| and +|dummysection| (and there is also a dummy page count). We +copied the line styles used in the original and +displayed the table of contents following: +\begin{verbatim} + \etocsetlevel{dummypart} {-1} \etocsetlevel{part} {2} + \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2} + \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2} + \etocsetnexttocdepth{dummysection} +\end{verbatim} +Each chapter displays the numbers of only the first and the last sections it + contains. See the +source file |etoc.dtx| for the details of how this is done. + +Another technique for doing this kind of things is explained in + \autoref{ssec:statistics}. + +\begingroup + + \etocsetlevel{dummypart}{-1} + \etocsetlevel{dummychapter}{0} + \etocsetlevel{dummysection}{1} + \etocsetlevel{part}{2} + \etocsetlevel{chapter}{2} + \etocsetlevel{section}{2} + + \newif\ifextraidone + \newif\ifextraiidone + + \etocsetstyle{dummypart} + {} + {} + {\begin{center}\Large\bfseries PART \etocnumber + \ifextraiidone\\\etocname.\fi\end{center} + \ifextraidone\else + \noindent\hskip.7\linewidth + \hbox to .2\linewidth +% février (ou janvier?) 2013 +% je modifie ici en ajoutant un \hss, pour compenser la plus petite +% taille de txrm. Ok. + {\hss\small\textsc{\bfseries Sections.\hss Page.}}\par\fi + \extraidonetrue + } + {} + + \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}} + \etocsetstyle{dummychapter} + {} + {\par\noindent\etocifnumbered + {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}} + {\hspace*{.15\linewidth}}} + {\hbox to .65\linewidth + {\hspace{1em}\etocname\leaders\mytocleaders\hss}% + \hskip-.1\linewidth + \hbox to .2\linewidth{\hspace{1.5em}...\hss + \etocifnumbered + {\etocpage} + {\ifextraiidone\else\etocpage\fi}}% + \hskip-.2\linewidth + } + {} + + \newbox\forsectionnumbers + \makeatletter +% 21 février 2013: je rajoute \color@begingroup et \color@endgroup + \etocsetstyle{dummysection} + {\setbox\forsectionnumbers=\hbox to .1\linewidth + \bgroup\color@begingroup\hss\etocskipfirstprefix} + {\@gobble} + {\etocnumber---} + {\etocnumber\color@endgroup\egroup + % for reasons I do not quite understand, in some pdf viewers the dots + % do not completely disappear if here \fboxsep0pt is used. + % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) + % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais + % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à + % « effacer ») + \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par + \ifextraiidone\else + \begin{center}\bfseries Concord.\end{center} + \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Lesson.}}\par + \fi\extraiidonetrue + } + \makeatother + + \renewcommand{\etocinnertopsep}{0pt} + + \etocruledstyle[1]{% + \parbox{\linewidth}{% + \centering + \textsc{\bfseries\LARGE\MakeUppercase{Table of Contents}}\\ + \rule{.2\linewidth}{2pt}}% + } + + \etocsetnexttocdepth{dummysection} + + \tableofcontents + +\makeatletter + \def\adddummysection {\stepcounter{dummysection}% + \addtocontents {toc}{\protect\contentsline + {dummysection}{\protect\numberline{\thedummysection}}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummychapter #1{\stepcounter{dummychapter}% + \advance\dummypage2 + \addtocontents {toc}{\protect\contentsline + {dummychapter}{\protect\numberline{\thedummychapter}#1}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + + \def\adddummychapno #1{\advance\dummypage2 + \addtocontents {toc}{\protect\contentsline + {dummychapter}{#1}{\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummypart #1{\stepcounter{dummypart}% + \advance\dummypage4 + \addtocontents {toc}{\protect\contentsline + {dummypart}{\protect\numberline{\Roman{dummypart}}#1}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} +\makeatother + + \newcount\dummypage \dummypage-1 + + \adddummypart {} + + \adddummychapno {Introductory} + + \newcount\tempcount + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<8 + \repeat + + \adddummychapter {Concord of Subject and Verb} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<17 + \repeat + + \adddummychapter {Concord of Substantive and Adjective} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<22 + \repeat + + \adddummychapno {Concord of Relative and its Antecedent} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<25 + \repeat + + \adddummypart {Government} + + \adddummychapter {The Accusative Case} + + \adddummychapno {General uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<30 + \repeat + + \adddummychapno {Particular uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<37 + \repeat + + \adddummychapter {Verbs governing two Accusatives} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<41 + \repeat + + \adddummychapter {The Causal} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<49 + \repeat + + \adddummychapter {The Instrumental Case} + + \adddummychapno {General uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<54 + \repeat + + \adddummychapno {Particular uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<59 + \repeat + + \adddummychapter {The Dative Case} + + \adddummychapno {General uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<65 + \repeat + + \adddummychapno {Particular uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<71 + \repeat + + \adddummychapter {The Ablative Case} + + \adddummychapno {General uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<75 + \repeat + + \adddummychapno {Particular uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<86 + \repeat + + \adddummychapter {The Locative Case} + + \adddummychapno {General uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<92 + \repeat + + \adddummychapno {Particular uses} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<100 + \repeat +\endgroup + +\section{Another compatibility mode} + +As explained in \autoref{ssub:compat}, the commands +\csa{etocstandardlines} and \csa{etocstandarddisplaystyle} tell \etoc to, +essentially, act as an observer. The document class layout for the table of +contents is then perfectly obeyed. There is no way to customize this standard +layout (change fonts, margins, vertical spacings, etc...) from within the +package. For this, use some package dedicated to this task; because \etoc either +is (temporarily perhaps) in compatibility mode with no customization on its part +possible, or the user has specified the layout in \csa{etocsetstyle} commands +(and \csa{etocsettocstyle}) and is (supposedly...) in complete control. + +Well, there is actually an alternative. It is possible to use the +\csa{etocsetstyle} commands to recreate an artificial compatibility mode, in +order to achieve effects like the following, all things being otherwise equal to +the document class defaults: +\begin{enumerate}[noitemsep] +\item get the |hyperref| link to encapsulate only the names, but not the numbers + of each entry of the table of contents, +\item use the document class style for chapters and sections, but modify it only + for subsections, +\item do either of the above only for some portions of the table of contents. +\end{enumerate} + +Here is how to proceed. One puts in the preamble: +\begin{verbatim} +\makeatletter +\newcommand{\MyStandardTOC}{% + \begingroup + \let\savedpartline\l@part + \let\savedchapterline\l@chapter %% remove if article/scrartcl class + \let\savedsectionline\l@section + \let\savedsubsectionline\l@subsection + % and so on if \subsubsection, etc... is used + % + % for the book or article classes: + \etocsetstyle{part}{}{} + {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}% + % for the scrbook or scrartcl classes: + \etocsetstyle{part}{}{} + {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + % identical in book/article/scrbook/scrartcl classes: + \etocsetstyle{chapter}{}{} %%% only for book and scrbook + {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \etocsetstyle{section}{}{} + {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \etocsetstyle{subsection}{}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + % etc... if further sectioning units are used + % (see the text for what to do with the memoir class) + \etocstandarddisplaystyle % this is for the title, page-marks, etc... + \tableofcontents + \endgroup} +\makeatother +\end{verbatim} +Of course if the document has only one table of contents then there is no need +to put the commands inside a macro, or even inside a group.\footnote{and if +moreover one just wants to keep the same layout as in the default, one may +question why using \etoc... there is \emph{one} good reason: numbers and names +are separately \texttt{hyperref} links, whereas normally there is only one link +holding both the number and the name corresponding to one toc entry.} With these +commands +\etoc will construct a TOC completely identical to what would have been done by +one of the document class: |article|, |book|, |scrartcl|, |scrbook|. \footnote{For the +|memoir| class, one needs a bit more: each of the command \csa{booknumberline}, +\csa{partnumberline} and \csa{chapternumberline} will have to be saved with a +\csa{let}, and, one then specifies: +\centeredline{% +\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{% +\string\savedchapternumberline}} +\hbox to \linewidth{\hfil\hfil \ttfamily + \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} +(and analogously for |part|, respectively |book|).} +The number and the name of each entry are each separately an |hyperref| link, as +is always the case with \etoc, when not in compatibility mode. Replacing +\csa{etocnumber} with \csa{etocthenumber} will give a TOC where the numbers are +not links anymore, but the names still are. Or one may decide to use \csa{etocthename} +and keep an hyperlinked number with +\csa{etocnumber}. + +Here is a subtler example where one only marginally modifies the +sections (adding color to the number and removing the |hyperref| link) and keeps +the subsections as in the default, \emph{except} for those of one specific +section, for which the layout is completely modified: +\MyQuasiStandardTOC{\ref{toc:overview}} +\bigskip +This example only has sections and subsections, and the code used in \csa{MyStandardTOC} was: +\begin{verbatim} +\etocsetstyle{section}{} + {\ifnum\etocthenumber=3 + \etocsetstyle{subsection} + {\par\nopagebreak\begingroup + \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue + \parindent 0pt \normalfont\normalsize\rmfamily\itshape + % \columnsep1em + % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}% + % \begin{multicols}{2}% + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname\ \textup{(\etocnumber)}} + {.\par\endgroup}% + % {.\par\end{multicols}\end{minipage}\par\endgroup}% + \else + \etocsetstyle{subsection} + {}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}} + {}% + \fi} + {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} + {}% +\end{verbatim} + +Notice the page head-mark added by this standard TOC. Sections and subsections +are printed exactly as in the default (except for the subsections of one +specific user-chosen section and except for the color of the section numbers), +with no need to specify explicitely any length, font or other formatting +instructions. But we had to examine the |scrartcl| sources to determine what to +use for \csa{leftskip} and \csa{rightskip} for our customized section +entries. + + +\section{The TOC as a tree}\label{tocastree} + +Using |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} and the package +|forest|\footnote{\url{http://ctan.org/pkg/forest}} we shall display the table +of contents of this part as a tree. The technique is to +use the \etoc modified command \csa{tableofcontents} not for typesetting, but to +prepare a macro, or rather here a \emph{token list} variable, with all the +instructions to be executed later. \textsc{Leslie Lamport}'s book has no mention +whatsoever of token lists, and \LaTeX{} gives the impression to not really +expect the general user to ever hear about them (or delimited macros); this +whole section and the next are thus for +advanced users. + +Putting the \csa{etocnumber} and \csa{etocname} +commands in \csa{treetok} would be of no use: to which number or name would they +then refer to, in a delayed execution? + +We need to store, not the macro names, but the macro contents. And also we wish +to maintain the correct |hyperref| hyperlinks.\footnote{This manual up to the +version of May 14, 2013 used package |tikz-qtree| but there were problems with +hyperlinks. No such problem arises either when using |forest| or the native +|tikz| syntax for trees (which will be illustrated in the next section).} The +commands \csa{etocname}, etc\dots, are robust, it is easier to work with +\csa{etocthelinkednumber}, \csa{etocthelinkedname}, and \csa{etocthelinkedpage} +which contain the same information in an easier accessible form. + +For this |forest| tree we have designed very special \etoc styles for sections +and subsections. They use a token list register called |\treetok| and a +macro |\appendtotok| whose r\^ole is to append to a given token list variable +the contents of a macro given as second argument. All this will happen in +reaction to a |\tableofcontents| command, but \emph{nothing} has yet been +printed in the process.\footnote{There is always a \csa{par}, which here is not +a problem, but can be suppressed if need be via the command \csb{etocinline} or +its synonym \csb{etocnopar}.} This is the later job of a |forest| environment +which will be given the contents of |\treetok|. + + +% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f +% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de +% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre +% TikZ natif. + +% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème +% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu +% de sa syntaxe et de celle de TikZ). + +\newcommand*\PrepareSectionNode{% + \tmptok {\centering\bfseries}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% +} + +% 7 mars: j'utilise maintenant \etocthelinkedname +\newcommand*{\PrepareSubsectionNode}{% + \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsettocstyle + {\treetok{[{\hyperref[part:overview]{Overview}}}} + {\global\appendtotok\treetok{ ]}} + + +% 11 octobre +% forest ne veut pas @\the\treetok avec un \treetok vide, donc +% il faut lui donner une valeur par défaut. +\treetok{[{run latex again}]} + +% 12 octobre +% pour que varioref fonctionne bien, je dois mettre la \tableofcontents +% au plus près de l'environnement forest + +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:forest}\ref{toc:overview} + \hypersetup{hidelinks}% + \bracketset{action character=@} + \begin{forest} + for tree={anchor=center,child anchor=west, + grow'=east,draw,thick, + edge={draw,thick,dashed,color=teal}}, + where={level()==1}{circle,thick,fill=blue!5, + before computing xy={l=3cm}}{}, + where={level()==2}{fill=red!5, + before computing xy={l=6cm}}{}, + % je trouve ce truc pour une position absolue. OK! + rectangle, thick, fill=cyan!5, inner sep=6pt, + @\the\treetok + \end{forest} + \centeredline{A table of contents displayed as a |forest| tree.} +\end{figure} + + +The resulting tree has been put in a \hyperref[toc:forest]{float}, which +appears \vpageref[above]{toc:forest}. Here is the +code used for its production: +\begin{verbatim} +\newtoks\treetok +\newtoks\tmptok + +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter + {\expandafter\the\expandafter #1#2}} + +\newcommand*\PrepareSectionNode{% + \tmptok {\centering\bfseries}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% +} + +\newcommand*{\PrepareSubsectionNode}{% + \tmptok {\raggedright}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsettocstyle + {\treetok{[{\hyperref[part:overview]{Overview}}}} + {\global\appendtotok\treetok{ ]}} + +% forest does not like @\the\treetok if \treetok is empty. On first latex +% run, this will be the case because the TOC style defined above will not +% have been executed, as the label {toc:overview} does not refer to a valid +% TOC yet. So we must give a safe default value to \treetok +\treetok{[{run latex again}]} + +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:forest}\ref{toc:overview} + \hypersetup{hidelinks}% + \bracketset{action character=@} + \begin{forest} + for tree={anchor=center,child anchor=west, + grow'=east,draw,thick, + edge={draw,thick,dashed,color=teal}}, + where={level()==1}{circle,thick,fill=blue!5, + before computing xy={l=3cm}}{}, + where={level()==2}{fill=red!5, + before computing xy={l=6cm}}{}, + rectangle, thick, fill=cyan!5, inner sep=6pt, + @\the\treetok + \end{forest} +\end{figure} +\end{verbatim} + +Why |\hypersetup{hidelinks}|? as explained in +\autoref{ssec:hidelinks}, I prefer the links in TOCs not to be +colorized, nor framed, so this document inserts a command +%\csa{hypersetup}\texttt{\{hidelinks\}} % ok pour hyphénation +%\csa{hypersetup}|{hidelinks}| % pas ok +|\hypersetup{hidelinks}| % ok maintenant 12 octobre 2013 + in the |.toc| file. But at the time the +|\treetok| contents are unpacked the |\hyperlink| commands +originating in +|\etocthelinkedname|, etc\dots{} will be executed in the normal +environment for links (which, in this document, is to colorize +them). Rather than having \etoc's code try to guess what the current ``style'' +for links is (a concept not really provided by |hyperref| it +seems) and store it in |\etocthelinkedname|, etc\dots, I opted for +the simpler solution to leave it up to the user to recreate +whatever conditions are desired. So here it is necessary to re-issue +|\hypersetup{hidelinks}| in the |figure| environment. + +There are some other examples in this documentation where +|\tableofcontents| is used to prepare material for later +typesetting: +\begin{itemize} +\item printing the statistics at the start of each Part (see + \autoref{ssec:statistics}) is done using save boxes (so the problem of the + appearance of the links does not arise then). +\item the typesetting of the TOC as a table in the pre-|1.08| way (see + \autoref{ssec:tocastableold}); there we also have to issue + |\hypersetup{hidelinks}| after having collected the names, numbers and + page numbers in a token list register. +\item and the two additional tree examples in the next section. +\end{itemize} + + +\section{The TOC as a molecule}\label{sec:molecule} + +It is also possible to construct a TOC tree obeying the TikZ +syntax for trees: but this is a more complicated task for the +\etoc line styles for reasons related to the way braces are +handled by \TeX{} (they need, when filling up the token list to be +always balanced at each step, else complicated tricks must be +employed.) + +The simplest strategy is to allocate a token list (or use a macro) for each +level used: we may need a \csa{parttok}, a \csa{chaptertok}, a +\csa{sectiontok} and a \csa{subsectiontok}, to help in the task of filling +up the total \csa{treetok}. As we are interested here in the table of +contents of this (or another) document part, only a \csa{sectiontok} and a +\csa{subsectiontok} will be needed. + + +\begin{verbatim} +% \newtoks\treetok % already done earlier +\newtoks\sectiontok \newtoks\subsectiontok \newcommand*{\treenode}{} + +\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} + \edef\tmp{\the#1 child {\the#2}}% + #1\expandafter{\tmp}% +} +\newcommand*{\preparetreenode}{% + \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory) + \edef\treenode{node {\the\tmptok}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendchildtree\treetok\sectiontok} + {\preparetreenode \sectiontok\expandafter{\treenode}} + {\appendchildtree\treetok\sectiontok} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendchildtree\sectiontok\subsectiontok} + {\preparetreenode \subsectiontok\expandafter{\treenode}} + {\appendchildtree\sectiontok\subsectiontok} + +\etocsettocstyle + {\treetok{\node {\hyperref[part:overview]{Overview}}}} + {\global\appendtotok\treetok{ ;}} + +% moved to the inside of the figure environment for correct \pageref{toc:molecule} +% \etocsetnexttocdepth{subsection} +% \tableofcontents \label{toc:molecule} \ref{toc:overview} +\end{verbatim} + +% \newtoks\sectiontok +% \newtoks\subsectiontok +\newcommand*\treenode {} + +\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} + \edef\tmp{\the#1 child {\the#2}}% + #1\expandafter{\tmp}% +} + +\newcommand*{\preparetreenode}{% + \tmptok\expandafter{\etocthelinkednumber}% + \edef\treenode{node {\the\tmptok}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendchildtree\treetok\sectiontok} + {\preparetreenode + \sectiontok\expandafter{\treenode}} + {\appendchildtree\treetok\sectiontok} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendchildtree\sectiontok\subsectiontok} + {\preparetreenode + \subsectiontok\expandafter{\treenode}} + {\appendchildtree\sectiontok\subsectiontok} + +\etocsettocstyle + {\treetok{\node {\hyperref[part:overview]{Overview}}}} + {\global\appendtotok\treetok{ ;}} + +\begin{figure}[th!]\centering +\etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:molecule}\ref{toc:overview} + \hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=4cm,sibling angle=72}, + level 2/.style={level distance=2cm,sibling angle=60}, + every node/.style={ball color=red,circle,text=SkyBlue}, + edge from parent path={[dashed,very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture} + \centeredline{A table of contents as a ``molecule.''} +\end{figure} + +% Pour que \pageref fonctionne correctement, je dois mettre +% le \tableofcontents dans la figure. + +The |\tableofcontents| command appears just above the +|tikzpicture| environment in a figure float (for the label of the +table of contents to certainly +refer to the same page as the one where the picture will actually be printed). +We thus get the table of contents as a ``\hyperref[toc:molecule]{molecule}'', +which +appears \vpageref[above]{toc:molecule}. Here is the code actually +producing it: +\begin{verbatim} +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:molecule} \ref{toc:overview} + \hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=4cm,sibling angle=72}, + level 2/.style={level distance=2cm,sibling angle=60}, + every node/.style={ball color=red,circle,text=SkyBlue}, + edge from parent path={[dashed,very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture} +\end{figure} +\end{verbatim} + +This \hyperref[toc:molecule]{TikZ TOC} is fully hyperlinked, like the +previous +\hyperref[toc:forest]{Forest TOC}. + +\etocsettocstyle + {\treetok{\node {\autoref{part:globalcmds}}}} + {\global\appendtotok\treetok{ ;}} + +\etocsetnexttocdepth {subsection} +\tableofcontents \ref{toc:globalcmds} + +\noindent +\parbox{4cm}{\hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=60}, + level 2/.style={level distance=1cm,sibling angle=45}, + every node/.style={ball color=red!50,circle,text=black}, + edge from parent path={[very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture}}% +\begin{minipage}{\dimexpr\linewidth-4cm\relax} + On the side, the (fully hyperlinked) table of contents of + \autoref{part:globalcmds}. + \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}% +\begin{verbatim} +\etocsettocstyle + {\treetok{\node {\autoref{part:globalcmds}}}} + {\global\appendtotok\treetok{ ;}} +\etocsetnexttocdepth {subsection} +\tableofcontents \ref{toc:globalcmds} +\noindent +\parbox{4cm}{\hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=60}, + level 2/.style={level distance=1cm,sibling angle=45}, + every node/.style={ball color=red!50,circle,text=black}, + edge from parent path={[very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture}}% +... +\end{verbatim} +\end{minipage} + +\section{The TOC as a TikZ mind map} +\label{sec:mindmap} + +This is in the same spirit as the ``molecule'' example. The use of the \eTeX{} +primitive \csa{unexpanded} will simplify the code.\footnote{The ``molecule'' +example was added to this documentation on |2013/03/03|. The ``mindmap'' +example was motivated on |2015/03/11| by +\url{http://tex.stackexchange.com/a/232584/4686}. Further help was then obtained via +\url{http://tex.stackexchange.com/q/232816/4686} and this led to the +\hyperref[toc:mindmaptitlepage]{title page} which is a further example.} + + +\begingroup +%\newtoks\treetok +%\newtoks\parttok + +\newcommand*\partnode {} % just to check we don't overwrite something +%\newcommand*\childnode {} + +\newcommand*\tmprotate {} % just to check we don't overwrite something +\newcommand*\tmpoption {} % just to check we don't overwrite something +\newcommand*\tmpstuff {} % just to check we don't overwrite something + +% \newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 +% #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}} + +\renewcommand*{\appendchildtree}[3]{% +% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2 +% t1 and t2 are two toks variable (not macros) +% #3 = for example teal!60 + \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}% + #1\expandafter {\tmpstuff }% +} + +% \newcounter{partco} + +% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 +% \def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} + +\etocsetstyle{part} + {\etocskipfirstprefix} +% This updates the global tree with the data from the previous +% part and all its children sections. Moved here because for some parts the +% sections are not displayed due to depth tags. + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + {\stepcounter{partco}% +% customize manually some TikZ set-up (should be done inside the TikZ thing I guess) + \def\tmpoption {}% + \def\tmprotate {}% first + \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi + \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi +% define the part node + \edef\partnode{node \tmpoption + {\unexpanded\expandafter{\etocthelinkednumber}. + \unexpanded\expandafter{\etocthelinkedname}}\tmprotate }% +% this is a starting point which will be filled it by the section children + \parttok\expandafter{\partnode}} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + +\etocsetstyle{section} + {} + {} + {% define the section node + \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} + \unexpanded\expandafter{\etocthelinkedname}}}}% + % append it to the current \parttok + \appendtotok\parttok\childnode + } + {} + +\etocsettocstyle + {\setcounter{partco}{0}% + \treetok{\node [root concept]{\textbf{The \etoc documentation}}}} + {\global\appendtotok\treetok{ ;}} +% The \global above is mandatory because etoc always typesets TOC inside a group + +\etocsetnexttocdepth{section} +% use of depth tags to cut out some sections. +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {section} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {section} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {section} +\etocsettagdepth {custom} {section} +\etocsettagdepth {tips} {section} +\etocsettagdepth {code} {section} + +\tikzset{ + branch color/.style={ + concept color=#1!white, + every child/.append style={concept color=#1!white!30!white, font=\normalsize}, + } +}% + +\begin{figure}[th!] +\tableofcontents\label{toc:mindmap}% +\centeredline{\resizebox{.85\paperwidth}{!}% +{\begin{tikzpicture}[mindmap, + grow cyclic, + text width=2cm, + align=flush center, + nodes={concept}, + concept color=orange!60, + root concept/.append style={text width=4cm, font=\Large}, + level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm}, + level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm}, + level 1 concept/.append style={font=\normalsize}, + ] +\the\treetok +\end{tikzpicture}}} +\end{figure} +\endgroup + +It is difficult to get everything to fit on one page. However \csa{resizebox} +comes to the rescue. And it preserves hyperlinks. Nevertheless for this +example I excluded some sections from the display, using the technique of the +\etoc \hyperref[etocdepthtag.toc]{depth tags}. The fully hyperlinked TOC +appears \vpageref{toc:mindmap}. + +\begin{verbatim} +\begingroup +\newtoks\treetok +\newtoks\parttok + +\newcommand*\partnode {} % just to check we don't overwrite something +\newcommand*\childnode {} + +\newcommand*\tmprotate {} % just to check we don't overwrite something +\newcommand*\tmpoption {} % just to check we don't overwrite something +\newcommand*\tmpstuff {} % just to check we don't overwrite something + +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}} + +\renewcommand*{\appendchildtree}[3]{% +% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2 +% t1 and t2 are two toks variable (not macros) +% #3 = for example teal!60 + \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}% + #1\expandafter {\tmpstuff }% +} + +\newcounter{partco} + +% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 +\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} + +\etocsetstyle{part} + {\etocskipfirstprefix} +% This updates the global tree with the data from the previous +% part and all its children sections. Moved here because for some parts the +% sections are not displayed due to depth tags. + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + {\stepcounter{partco}% +% customize manually some TikZ set-up (should be done inside the TikZ thing I guess) + \def\tmpoption {}% + \def\tmprotate {}% first + \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi + \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi +% define the part node + \edef\partnode{node \tmpoption + {\unexpanded\expandafter{\etocthelinkednumber}. + \unexpanded\expandafter{\etocthelinkedname}}\tmprotate }% +% this is a starting point which will be filled it by the section children + \parttok\expandafter{\partnode}} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + +\etocsetstyle{section} + {} + {} + {% define the section node + \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} + \unexpanded\expandafter{\etocthelinkedname}}}}% + % append it to the current \parttok + \appendtotok\parttok\childnode + } + {} + +\etocsettocstyle + {\setcounter{partco}{0}% + \treetok{\node [root concept]{\textbf{The \etoc documentation}}}} + {\global\appendtotok\treetok{ ;}} +% The \global above is mandatory because etoc always typesets TOC inside a group + +\etocsetnexttocdepth{section} +% use of depth tags to cut out some sections. +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {section} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {section} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {section} +\etocsettagdepth {custom} {section} +\etocsettagdepth {tips} {section} +\etocsettagdepth {code} {section} + +\tikzset{ + branch color/.style={ + concept color=#1!white, + every child/.append style={concept color=#1!white!30!white, font=\normalsize}, + } +}% + +\begin{figure}[th!] +\tableofcontents\label{toc:mindmap}% +\centeredline{\resizebox{.85\paperwidth}{!}% +{\begin{tikzpicture}[mindmap, + grow cyclic, + text width=2cm, + align=flush center, + nodes={concept}, + concept color=orange!60, + root concept/.append style={text width=4cm, font=\Large}, + level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm}, + level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm}, + level 1 concept/.append style={font=\normalsize}, + ] +\the\treetok +\end{tikzpicture}}} +\end{figure} +\endgroup +\end{verbatim} + +An interesting alternative is to use \etoc rather to convert the entire TOC +into a TikZ tree (perhaps excluding some parts) and print it out to a file +from which it can be recovered and manipulated directly by the author of the +document. Things written to the |.log| file get broken into lines. Here is a +technique to get non-broken output. Once the \csa{treetok} has been computed +by \etoc (as in the \hyperref[toc:molecule]{molecule} example, or the current +example), this code snippet will write it out to file with extension +|.toctree|: +\begin{verbatim} + \newwrite\TOCasTree + \immediate\openout\TOCasTree=\jobname.toctree + \immediate\write\TOCasTree{\the\treetok}% +\end{verbatim} +The author can then copy it from there and customize it manually to get a +suitable tikz picture. + + +\section{The TOC as a table} +\label{sec:tocastable} + +With release |1.08| it is easier to typeset a TOC as a table. It is +possible to open a tabular in the title part of the TOC (first argument +to \csb{etocsettocstyle}) and then close it after the contents (second +argument to \csb{etocsettocstyle}), and specify in the line styles how +to use the tabulation |&| and tabular end of row |\\|. There are some +conditions and a few caveats: + +\begin{enumerate} +\item it is mandatory to issue \csb{etocglobaldefs} for \etoc's + definitions to have global scope, +\item it is impossible to start one of the \meta{start}, \meta{prefix}, + \meta{contents} or \meta{finish} specification with a sole |\hline|, + \emph{i.e.} one not preceded by a |\\| (it is however possible to put + |\\| at the end of \meta{prefix} and the |\hline| at the start of + \meta{contents}). +\item as is explained next, it is recommended to use the |\\| at + the start of the \meta{prefix} or \meta{contents} + specifications to close the \emph{previous} row, not at the end + to close the \emph{current} row; when the TOC is a partial one (a + \csa{localtableofcontents}) this advice becomes (in almost all + situations) mandatory. +\end{enumerate} + +Here is an example of a TOC as a |longtable|, as is possible relatively +simply now with |1.08|. The code follows. + +\begingroup +\etocglobaldefs % necessary for \etocthename etc... to survive & + +% observe the locations of the \\ +\etocsetstyle{part} + {} + {\\\hline} + {\strut\etocnumber &\bfseries\etocname &\etocpage } + {} + +\etocsetstyle{section} + {} + {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} + {\etocnumber&\etocname &\etocpage } + {} + +\etocsetstyle{subsection} + {} + {\\} + {&\makebox[1cm][c]{\etocnumber}% + \parbox[t]{\dimexpr6cm-\tabcolsep\relax}{\sloppy\itshape\etocname\strut}% + &\itshape\etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}% + \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} + \hline + \multicolumn{3}{|c|}{\Large\bfseries\strut\MakeUppercase{\contentsname}}% + } + {\\\hline\end{longtable}} + +\etocsetnexttocdepth {subsection} + +\tableofcontents +\endgroup + +\begin{verbatim} +\begingroup +\etocglobaldefs % necessary for \etocname etc... to survive & + +% observe the locations of the \\ +\etocsetstyle{part} + {} + {\\\hline} + {\strut\etocnumber &\bfseries\etocname&\etocpage } + {} + +\etocsetstyle{section} + {} + {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} + {\etocnumber&\etocname &\etocpage } + {} + +\etocsetstyle{subsection} + {} + {\\} + {&\makebox[1cm][c]{\etocnumber}% + \parbox[t]{\dimexpr6cm-\tabcolsep\relax}{\sloppy\itshape\etocname\strut}% + &\itshape\etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}% + \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} + \hline + \multicolumn{3}{|c|}{\Large\bfseries\strut\strut TABLE OF CONTENTS}% + } + {\\\hline\end{longtable}} + +\etocsetnexttocdepth {subsection} + +\tableofcontents +\endgroup +\end{verbatim} + +Examining the code above the reader will wonder why the |\\| are +always given first in \meta{prefix+contents} and not, as is more +intuitive, rather last. In many cases one may indeed construct +TOC-as-tables with the |\\| located at the end of the style +specifications (but almost never for a \csa{localtableofcontents}). +The problem in the previous example was with the positioning of the +|\hline|'s. + +Due to technical aspects of how \TeX{} constructs alignments any +definition or assignment done after an |\\| starts a new row, and +thus makes |\hline| an illegal token (this shows as a |misplaced +\noalign| error.) Not only does \etoc have to do such definitions +to construct \csb{etocname} etc..., it is furthermore the case that +some packages put things in the |.toc| file and as a result there +is never any guarantee that between two \csa{contentsline} there +will not be such a token like |\relax| which in the contexts of +alignments forces \TeX{} to start a cell and thus makes it +impossible then to insert an |\hline|. + +The safest way is to start with an |\\| each line style +specification. We had a little problem with the fact that we wanted +parts not only to have a rule above them (easy, they do |\\\hline|) +but also below them: after each part there is a section, thus the +section which are first of their kind used the \csb{etociffirst} +conditional branching. The attentive reader will notice one last +subtlety: the title was supposed to be followed not by one, but by +two |\hline|'s. + +To solve this we could have used a one-time macro redefining itself, but +we noticed that the title was followed by the unnumbered Abstract, thus +the \csb{etocifnumbered} switch came to the rescue. + +Last technical note: because we put the |\\| inside the branches, there +was no need to employ the expandable variants \csb{etocxiffirst} and +\csb{etocxifnumbered}. + +For the hardliner's old way of obtaining the exact same result, see +\autoref{ssec:tocastableold}. + +Here is also a much simpler example. It is a local table of +contents. + +\begin{center} +\etocsetstyle{section} + {} + {\etociffirst{\\\hline\hline}{\\\hline}} + {\etocname& + \etocnumber& + \etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline + \multicolumn{1}{|c|}{\bfseries Section}& + \bfseries number& + \bfseries page} + {\\\hline\end{tabular}} + +\etocglobaldefs % MANDATORY !! +\etocsetnexttocdepth{1} + +\tableofcontents\ref{toc:overview} +\end{center} + +\begin{verbatim} +\begin{center} +\etocsetstyle{section} + {} + {\etociffirst{\\\hline\hline}{\\\hline}} + {\etocname & \etocnumber & \etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline + \multicolumn{1}{|c|}{\bfseries Section}& + \bfseries number& + \bfseries page} + {\\\hline\end{tabular}} + +\etocglobaldefs % MANDATORY !! +\etocsetnexttocdepth{1} + +\tableofcontents\ref{toc:overview} +\end{center} +\end{verbatim} + +\subsection{The commands \csbhyp{etocglobaldefs} and \csbhyp{etoclocaldefs}} +\label{etocglobaldefs} +\label{etoclocaldefs} + +In \LaTeX{} the meaning of a command defined via |\newcommand\foo{...}| inside +an environment (or group) vanishes from \TeX's memory on exit from this +environment (or group). At times however it is needed to make definitions with +global scope, for this \TeX{} has the primitive prefix |\global|. + +By default \etoc's definitions of \csb{etocname} etc... are local. This causes +problems in certain contexts such as seen here with TOC as tables, but also +with |enumitem| \emph{inline} variants of its standard environments, because +the command |\item| then closes a group. + +After \csb{etocglobaldefs}, \etoc will make its definitions of \csb{etocname} +etc... have global scope. For normal use this is not necessary. It does not hurt +either to activate it systematically. + +To return to the default, use \csb{etoclocaldefs}. Note that both +\csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the +environment or group where they are used. + + +\clearpage +\etocdepthtag.toc {linestyles} + +\part{Commands for the toc line styles} +\label{part:linestyles} + +\thispartstats + +\etocsetstyle{section} +{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered + {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} +% Dec 7, 2012. I hit upon a problem whose origin I found was +% with xcolor, as xcolor modifies \fbox +% (try \section{\fbox{A}} with and without xcolor). The fix +% was to \protect the \fbox used in the |enumitem| label. +% Strangely enough, with |hyperref| active, the problem did +% not show up. Anyhow I now use \fcolorbox rather than \fbox +% and there is no problem anymore. Also I don't have now to +% use \normalcolor which already needed protection. +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} +{\normalfont \item} +{\etocname{} (p.~\etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsubsection} +{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix} +{\allowbreak\,--\,} +{\etocname} +{.\hfil\par\endgroup\pagebreak[3]} + +% 27 janvier 2013 22:30 +% je définis les macros (non protégées) +% \etocthename, \etocthenumber, \etocthepage + +\etocruledstyle[1]{\etocfontminusone\color{green}% + \fboxrule1pt\fboxsep1ex + \framebox[\linewidth] + {\normalcolor\hss Contents of \autoref{part:linestyles}\hss}} + +\localtableofcontents \label{toc:a} + +\section{The \csbhyp{etocsetstyle} command} +\label{etocsetstyle} + +\subsection{The \csbhyp{etocname} and \csbhyp{etocpage} commands} +\label{etocname} +\label{etocpage} + +Let us explain how \etoc was used to produce the table of +contents displayed at the beginning of this second part. +This +is a local table of contents, and we used the command \localtoc. + + +We shall distinguish between the \emph{line styles} and the +\emph{toc display style}. The line styles were (essentially) +obtained in the following manner:% +\footnote{the present document has + {\ttfamily\string\renewcommand\string{% + \string\familydefault\string}\string{\string\sfdefault\string}} + in its preamble, hence \csa{normalfont} switches to the + |sans| typeface; so in the section line-style, I wrote + \csa{rmfamily} instead.} + +\begingroup\small +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}} +{\normalfont\item} +{\etocname{} (p.~\etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsubsection} +{\par\nobreak\begingroup\normalfont + \footnotesize\itshape\etocskipfirstprefix} +{\allowbreak\,--\,} +{\etocname} +{.\hfil\par\endgroup\pagebreak[3]} +\end{verbatim} +\endgroup + +These provisory style definitions rely on the automatic +numbering generated by the |enumerate| environments but it is +much better to use the further command \csb{etocnumber} inside +the item label, which gives the real thing. The improved +definitions will thus be explained later. + +With this style, one would have +to be imaginative to design something then for paragraph and +subparagraph entries! perhaps as superscripts? Well, usually +one does not need paragraphs and subparagraphs numbered and +listed in the TOC, so our putative user here chose a design +where no provision is made for them and added the definitive: +\begin{verbatim} +\etocsetstyle{paragraph}{}{}{}{} +\etocsetstyle{subparagraph}{}{}{}{} +\end{verbatim} +This is also the situation with the default package line styles! + +Each \csb{etocsetstyle} command has five mandatory arguments:\\ +\hbox to \linewidth +{\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}% + \marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil} +The initially recognized \meta{levelname}'s are the sectioning +levels of the standard document classes: from \emph{part} (or +\emph{book} which is used by the |memoir| class) down to +\emph{subparagraph}. + +The \meta{start} code is executed when a toc entry of that level is +encountered and the previous one was at a higher level. The +\meta{finish} code is executed when one again encounters a higher +level toc entry. In the mean-time all entries for that level are +typeset by executing first the \meta{prefix} code and then the +\meta{contents} code. + +The (robust) commands \csb{etocname}, \csb{etocnumber} and \csb{etocpage} are +provided for use inside the \meta{prefix} and \meta{contents} parts of the +\csa{etocsetstyle} specification. They represent of course, the name, number, +and page number of the corresponding toc entry. If package |hyperref| is +active in the document and has added hyperlinks to the TOC data, then these +links are kept in the commands \csa{etocname}, \csa{etocnumber} and +\csa{etocpage} (this last one will have a link only if |hyperref| was passed +option \emph{linktoc=all}.) + +\subsection{The \csbhyp{etocskipfirstprefix} and \csbhyp{etociffirst} commands} +\label{etocskipfirstprefix} +\label{etociffirst} +\label{etocxiffirst} + +The chosen |subsubsection| style made use of the command +\csb{etocskipfirstprefix}, which instructs \etoc to \emph{not} use +for the first item the specified \meta{prefix} code.\footnote{With +versions earlier than |1.08| it had to be the very last token in +the \meta{start} code. It may now appear anywhere therein.} + +The command \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (new +with |1.08|) is a more flexible way to customize the \meta{prefix} +(and \meta{contents}) specifications. It executes the \meta{YES +CODE} branch if this is the first unit at that level (inside a +lower level) and the \meta{NO CODE} if not. This is a robust +command which survives to expansion (for example in an |enumitem| label). + +The variant \csb{etocxiffirst} does the same, but is expandable. + + +\subsection{The \csbhyp{etocnumber} command} +\label{etocnumber} + +So far, our specifications would use the numbering generated +by the |enumerate| environments, but of course we generally want +the actual numbers as found in the |.toc| file. This is +available via the \csb{etocnumber} command. To get the labels +in the |enumerate| list to use it we can proceed with the +syntax {\ttfamily label=\char32} from the package |enumitem|: +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}[label=\etocnumber]} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} +\end{verbatim} +Rather than just \csa{etocnumber} we then used something like +|\fbox{\etocnumber}|. Note that \csa{etocnumber} is a robust +command which explains why it can be used inside the label specification +without needing an added |\protect|. + + +\subsection{The \csbhyp{etocifnumbered} switch} +\label{etocifnumbered} +\label{etocxifnumbered} + +The \csa{fbox} would give an unaesthetic result in the case of +an unnumbered section (which ended up in the table of +contents via an \csa{addcontentsline} command).\footnote{as + seen we use \csa{fcolorbox} rather than \csa{fbox}. Due + to some redefinition made by package |xcolor|, had we used + \csa{fbox} (and not used |hyperref|) we would have needed + \csa{protect}\csa{fbox}.} + +The \csb{etocifnumbered}\marg{A}\marg{B} command executes +\meta{A} if the number exists, and \meta{B} if not. So we use +it in the code which was finally chosen for the |section| level: +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered + {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} +{\normalfont \item} +{\etocname{} (p.~\etocpage)} +{\end{enumerate}} +\end{verbatim} + +If we had changed only the |section| level, and not the +|subsection| level, an error on compilation would have occurred +because the package style for subsections expects to start `in +vertical mode'. An additional \csa{par} token in the +\meta{contents} part of the |section| level would have fixed +this: |{...(page \etocpage)\par}|. + +The command \csb{etocifnumbered} is robust; \csb{etocxifnumbered} +(new with |1.08|) has the same effect but is expandable. + + +\subsection{The \csbhyp{etocthename}, \csbhyp{etocthenumber}, and +\csbhyp{etocthepage} commands} +\label{etocthename} +\label{etocthenumber} +\label{etocthepage} + +It is sometimes desirable to have access to the name, number and page +number without the hyperref link data: something similar to the starred +variant of the \csa{ref} command, when package |hyperref| is used. For +example one may wish to use the unit or page number in some kind of +numeric context, or change its formatting. This is provided by +\csb{etocthename}, \csb{etocthenumber}, and \csb{etocthepage}. + + +These commands are not protected, so in moving argument +contexts (for example in a label specification) they should be +preceded by |\protect|. + +\subsection{The \csbhyp{etoclink} command} +\label{etoclink} + +The command \csb{etoclink}\marg{linkname} can be used in the line style +specifications in a manner analogous to the argument-less +commands \csa{etocname}, \csa{etocnumber} and \csa{etocpage}. It +creates a link (if such a link was added by |hyperref| to the +|.toc| file entry) whose destination is the corresponding document +unit and whose name is the given argument. +Hence |\etoclink{\etocthename}| is like the original +|\etocname|. +Notice that if |hyperref| was not instructed to put a link in the page number +(via +its option \emph{linktoc=all}) then \etoc's \csa{etocpage} contains no link +either, but |\etoclink{\etocthepage}| does. + + +The command \csa{etoclink} is robust. + +\subsection{The \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber}, +\csbhyp{etocthelinkedpage} and \csbhyp{etocthelink} commands} +\label{etocthelinkedname} +\label{etocthelinkednumber} +\label{etocthelinkedpage} +\label{etocthelink} + + +This is for advanced uses by advanced users. +The \csa{etocthename} macro has +been mentioned before; using it in instructions such as +|\global\let\lastone\etocthename| in an \etoc line style will +define the macro |\lastone| to expand to the last name seen at the +corresponding level. But no facilities was previously available to +do the same with the link data. + +The package provides since |1.07f 2013/03/07| \csa{etocthelinkedname} to do +the similar thing, with the link data included. It was used in this +documentation when doing the \hyperref[tocastree]{examples with trees}. + +Also provided with the similar goal: \csa{etocthelinkednumber}, +\csa{etocthelinkedpage} (which contains a link only if |hyperref| +added one to the page number) and \csa{etocthelink}\marg{linkname} +which allows to make a link with an arbitrary name. + +All these commands are fragile. In fact starting with |1.08a|, \csa{etocname} +is exactly the robust variant of \csa{etocthelinkedname} + +Obsolete example of \begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{p. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {a table of contents done as an inline + \texttt{enumitem} environment: }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup + +\begin{verbatim} +Obsolete example of \begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } +% (the above needed as \item closes a group in enumitem inline environments) + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{p. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {a table of contents done as an inline + \texttt{enumitem} environment: }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup +\end{verbatim} + +\etoc |1.08a| offers a simpler way to the same result. And there is no need +anymore here for \csa{etocthelinkedname}, \csa{etocname} works. +\begin{verbatim} +Example of +\begingroup\etocglobaldefs % <-- NEW mit etoc 1.08. + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {} + {\item [{\bfseries\etocnumber.}] \etocname\ (\emph{p. \etocpage })} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {a table of contents done as an inline + \texttt{enumitem} environment: }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup +\end{verbatim} +Example of +\begingroup\etocglobaldefs % <-- NEW mit etoc 1.08. + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {} + {\item [{\bfseries\etocnumber.}] + \etocname\ (\emph{p. \etocpage })} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {a table of contents done as an inline + \texttt{enumitem} environment: }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup + +\section{The \csbhyp{etocsetlevel} command} +\label{etocsetlevel} + +As already explained in \autoref{part:surprising}, one +can inform \etoc of a level to associate to a given sectioning +command with \csa{etocsetlevel}. For example: +\begin{verbatim} +\etocsetlevel{cell}{0} +\etocsetlevel{molecule}{1} +\etocsetlevel{atom}{2} +\etocsetlevel{nucleus}{3} +\end{verbatim} +In compatibility mode, it will be assumed that the macros |\l@cell|, +|\l@molecule|, ..., have been defined somewhere either by the user or a class: +doing only |\etocsetlevel| is not enough for the corresponding level to work +out-of-the-box in compatibility mode. + +However, if no table of contents is typeset in compatibility mode, then all that +matters is that the various line styles have been set. If, for example +|section| is at level |1|, then there is no need to do some +\csa{etocsetstyle}|{molecule}{..}{..}{..}{..}| after +\csa{etocsetlevel}|{molecule}{1}| if +\csa{etocsetstyle}|{section}{..}{..}{..}{..}| has already been done (and it has +been done by the package itself in its definition of its own line styles). + +The accepted levels run from |-2| to |6| inclusive. Anything else is +mapped to |6|, which is a dummy level, never displayed. The package +does: +\begin{verbatim} +\etocsetlevel{book}{-2} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\end{verbatim} +\etoc own custom styles are activated by \csa{etocdefaultlines}. They +are illustrated by the main table of contents of this +document. + +These level assignments can be modified at anytime: see +\autoref{part:surprising} for various applications of this +technique. As one +further example, let's mention here that the \hyperref[toc:main]{main table of +contents} of this document was typeset following these instructions: +\begin{verbatim} +\etocsettocdepth {subsubsection} % set the initial tocdepth +\etocdefaultlines % use the package default line styles. At this early stage in + % the document they had not yet been modified by \etocsetstyle + % commands, so \etoctoclines could have been used, too. +\etocmarkboth\contentsname +\etocmulticolstyle[1] % one-column display + {\pdfbookmark[1]{Table of contents}{MAINTOC}% create a bookmark in the pdf + \noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} +\begingroup % use a group to limit the scope of the + \etocsetlevel{subsection}{3} % subsection level change. + \etocsetlevel{subsubsection}{4} % anything > tocdepth=3. + \tableofcontents \label{toc:main} +\endgroup +\end{verbatim} +In this way, the subsections used the style originally designed for +subsubsections, the subsubsections were not printed. Without this modification, +the appearance would have been very different: the package line styles were +targeted to be employed in documents with many many sub-sub-sections, in a +two-column layout, giving thus a more compact output that what is achieved by +the default \LaTeX{} table of contents. But here, we have few sub-sub-sections +and it is more interesting to drop them and print in a visually different manner +sections and subsections. + + +\section{Scope of commands added to + the \texorpdfstring{\texttt{.toc}}{.toc} file} + +\begingroup % pour \small et \MacroFont en particulier. +\small + +\subsection{Testing the scope} + +Let us switch to the color red, and also add this command to the |.toc| file: + +\color{red!50} +\addtocontents{toc}{\string\color{red!50}} + +\def\MacroFont{\ttfamily \footnotesize\hyphenchar\font45 } +\begin{verbatim} + \color{red!50} % changing text color + \addtocontents{toc}{\string\color{red!50}} % and also in the .toc file +\end{verbatim} + + +\subsection{This is a (pale) red subsection for illustrative purposes} + +Actually, this title here was printed black, due to the way the |scrartcl| class +works (it would have been red in the |article| class), but we are more +interested in how it looks in the tables of contents: it does appear red in the +\hyperref[toc:main]{main table of contents} at the beginning of +this document, and also in the \hyperref[toc:a]{table of +contents for this part}. Both entries obey as expected the +|\color{red!50}| command inserted in the |.toc| file. + +But let us now close this subsection and start a section. + + +\section{Am I also red?} + +The question is about how it appears in the tables of contents: the answer is +that, yes it is red in the \hyperref[toc:main]{main TOC}, and no +it is not red in the \hyperref[toc:a]{local TOC for this part}. +The reason is that the \meta{finish} code for the subsection level closed a +group, as it used |\end{enumerate}|. + +This illustrates the discussion from \autoref{ssec:limitations}. + +The default package line styles do not contain group opening and closing +instructions: the influence of a command added to the |.toc| file will propagate +until cancelled by another explicit such command inserted in the |.toc| +file. + +\begin{verbatim} + \normalcolor + \addtocontents{toc}{\string\normalcolor} +\end{verbatim} +\endgroup + +\normalcolor +\addtocontents{toc}{\string\normalcolor} + +Back to black. Note that this scope problem arises in real life in a +multi-lingual document, as the |babel| package writes to the |.toc| file the +language changes occurring in the document. + + +\clearpage +\etocdepthtag.toc {globalcmds} + +\part{Commands for the toc display style} +\label{part:globalcmds} + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents \label{toc:globalcmds} + + +\section{Specifying the toc display style} + + +The \emph{toc display} style says whether the TOC appears with +multiple columns or just one, whether the title is typeset as +in the |article| or |book| class, or should be centered above +the entries, with rules on its sides, or if the entire TOC +should be put in a frame. For example, to opt for a ruled +heading and single column layout, one issues commands of the +following type: +\begin{verbatim} +\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents) +shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title}) +\end{verbatim} + +\subsection{The command \csbhyp{etocsettocstyle}} +\label{etocsettocstyle} + +This is a command with two mandatory arguments:\\ +\centerline{\csb{etocsettocstyle}\marg{before\_toc}% +\marg{after\_toc}} +The \marg{before\_toc} part is responsible for typesetting the +heading, for example it can be something like +\starit{section}|{\contentsname}|. + +Generally speaking this heading +should leave \TeX{} in ``vertical mode'' when the actual +typesetting of the contents will start: the line styles (either +from the standard classes or the package default line styles) +all expect to get started in `vertical mode'. + +The first argument to \csb{etocsettocstyle} can also contain +instructions to mark the page headings. Or +it could check (book class) to see if two-column mode is on, +and switch to one-column style, and the \meta{after\_toc} part +would then reenact the two-column mode. + +The commands to be described next \csb{etocmulticolstyle}, +\csb{etocruledstyle}, and \csb{etocframedstyle} all call +\csa{etocsettocstyle} as a lower-level routine, to start a +\texttt{multi\-cols} environment in \marg{before\_toc} and close it in +\marg{after\_toc}. + +\subsection{The commands \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol}, and \csbhyp{etoclocalmulticol}} +\label{etocmulticolstyle} +\label{etocmulticol} +\label{etoclocalmulticol} + +This is a command with one optional and one mandatory argument:\\ +\centerline{\csb{etocmulticolstyle}% + \oarg{number\_of\_columns}\marg{heading}} The +\meta{number\_of\_columns} can go from 1 to 10 (it defaults to 2; if its +value is 1, naturally no |multicols| environment is then created). The +\meta{heading} will typically be some `vertical' material like: + \meta{heading} = |\section*|\marg{title} +but one may also have horizontal material like |\fbox{Hello World}| (\etoc +adds automatically a |\par| at the end of this ``heading'' argument to +\csb{etocmulticolstyle}). Here is for example +how the main table of contents of this document was +configured: +\begin{verbatim} +\etocmulticolstyle{\noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} +\end{verbatim} +After \csa{etocmulticolstyle} all future \csa{tableofcontents} will use the +specified style, if it does not get changed in-between. A shortcut for +just one table of contents and +no impact on the styles of later TOCs is:\\ +\centerline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} +And there is also +\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}. + +\subsubsection{The command \csbhyp{etoctocstyle}} +\label{etoctocstyle} + +\centeredline{\csb{etoctocstyle}\oarg{kind}% +\marg{number\_of\_columns}\marg{title}} +\centeredline{= +\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% +|{\kind*{|\itshape title\upshape|}}|} +where |kind| is one of |chapter|, |section|, . . . and defaults +to |chapter| or |section| depending on the document class. + +\paragraph{\texorpdfstring{\csbhyp{etoc\-toc\-style\-with\-marks}}{etoctocstylewithmarks}}% +\leavevmode\unskip{\color{blue}\oarg{kind}\marg{number\_of\_columns}\marg{title}\marg{mark}} +\label{etoctocstylewithmarks} +\label{etoctocstylewithmarksnouc} + +\centeredline +{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% +|{\kind*{|\itshape title \ttfamily\upshape\string\markboth% +|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|} +where |kind| is one of |chapter|, |section|, ... The +actual display of the marks depends on the settings of the +page style. There is variant \csb{etoctocstylewithmarksnouc} +which does not uppercase. + + +\paragraph{Do we really want paragraph entries in the TOC?} + +\paragraph{really?} + +\subsection{The commands \csbhyp{etocruledstyle}, \csbhyp{etocruled} and \csbhyp{etoclocal\-ruled}} +\label{etocruledstyle} +\label{etocruled} +\label{etoclocalruled} + +The general format of \csa{etocruledstyle} is:\\ +\centerline{\csb{etocruledstyle}% +\oarg{number of columns}\marg{title of the toc}} +\noindent +The title is horizontal material (the |LR| mode of +\emph{\LaTeX{}, a document preparation system}): if it +does not fit on one line it should be put in a \csa{parbox} of +a given width. +The green frame for the heading of the table of contents at +the \hyperref[toc:a]{start of the second part of this + document} was obtained with: +\begin{verbatim} +\etocruledstyle[1]{\etocfontminusone\color{green}% + \fboxrule1pt\fboxsep1ex + \framebox[\linewidth] + {\normalcolor\hss Contents of this part\hss}} +\end{verbatim} + + +As a shortcut to set the style with \csb{etocruledstyle} and +then issue a +\csa{tableofcontents}, all inside a group +so that future table of contents will not be +affected, there is:\\ +\centerline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}} +And the local form will be \csb{etoclocalruled}. + +\subsection{The commands \csbhyp{etocframedstyle}, \csbhyp{etocframed}, and \csbhyp{etoclocal\-framed}} +\label{etocframedstyle} +\label{etocframed} +\label{etoclocalframed} + +Same mechanism:\\ +\centerline{\csb{etocframedstyle}% + \oarg{number\_of\_columns}\marg{title}} +and the accompanying shortcut:\\ +\centerline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} The +shortcut is used if one does not want to modify the style of the next +TOCs (the other way is to put the whole thing inside braces or a +|\begingroup...\endgroup|; there is also \csa{etoclocalframed} for a +local table of contents). + +The entire table of contents is framed. The title itself is not framed: +if one wants a frame one should set it up inside the \meta{title} +argument to \csa{etocframedstyle} or \csa{etocframed}. The colors for +the background and for the components (top, left, right, bottom) of the +border are specified via suitable |\renewcommand|'s (see +\autoref{ssec:customdisplay}). + +A |minipage| is used, hence the produced table of contents isn't +compatible with a page break. For allowing page breaks, use of +the commands of +\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}} +or +\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}} +in the arguments of \csb{etocsettocstyle} +is recommended. + +Examples in this document are on pages \pageref{toc:d}, +\pageref{toc:floating}, \pageref{toc:b}, and \pageref{toc:clone}. + + +\subsection{Headings, titles, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}} +\label{etocinnertopsep} +\label{etocoldpar} + +For \csb{etocmulticolstyle} the mandatory \meta{heading} argument can be +either +vertical mode material like |\section*{\emph{Table of Contents}}| or +horizontal mode material like in the simple |\etocmulticolstyle{Hello World}|. + +No explicit |\par| or empty line can be inserted in the mandatory +argument of \csb{etocmulticolstyle}, but \etoc provides \csb{etocoldpar} +as a substitute: it does |\let\etocoldpar\par| before the |multicols| +environment and inserts this |\etocoldpar|\footnote{this command + \csa{etocoldpar} (= working \csa{par} in the argument to + \csa{etocmulticolstyle}) is not related to the switch \csb{etocinline} + whose purpose is to tell \etoc not to do a \csa{par} before the table + of contents.} at the end of the heading, then does a vertical skip of +value \csa{etocinnertopsep}. The command \csb{etocoldpar} can also be +used explicitely if needed in the mandatory argument to +\csa{etocmulticolstyle} (it is not allowed to insert an empty line +in this argument). + +On the other hand the commands \csb{etocruledstyle} and +\csb{etocframedstyle} expect an argument ``in LR mode'' (to use the +terminology from \emph{LaTeX, a document preparation system}). This +means that multiline titles are only possible if enclosing +them inside something like a \csa{parbox}. + + + +An important dimension used by all three of \csb{etocmulticolstyle}, +\csb{etocruledstyle} and \csb{etocframedstyle} is +\csb{etocinnertopsep}. It gives the amount of separation +between the heading and the start of the contents. Its default +value is |2ex| and it is changed with +|\renewcommand*{\etocinnertopsep}|\marg{new\_value}, not with +|\setlength|. + + + +\subsection{The compatibility mode \csbhyp{etocstandarddisplaystyle}} +\label{etocstandarddisplaystyle} + +\etoc will then emulate what the document class would have +done regarding the global display style of the table of +contents, in its absence. All customizing from inside the +class should be obeyed, too. + +\subsection{The command \csbhyp{etoc\-inline}} +\label{etocinline} +\label{etocnopar} +\label{etocdisplay} + +With \csb{etocinline}, or its synonym |\etocnopar|, the +|\tableofcontents| command and its variants do \emph{not} first issue a +|\par| to close the previous paragraph. Hence, the table of contents can +be printed in an inline style; or, if used only for preparing some token +list or macro, it will leave nothing in the token stream on execution. + +Issue \csb{etocdisplay} to return to the default situation that +|\tableofcontents| and variants issue a |\par| to switch to vertical +mode before typesetting the TOC title and contents. + +\section{Starred variants of the \csbhyp{tableofcontents} etc... commands} +\label{tableofcontents*} +\label{localtableofcontents*} +\label{etocbeforetitlehook} +\label{etocaftertitlehook} +\label{etocaftercontentshook} +\label{etocmemoirtoctotocfmt} + +The \toc, \localtoc, \csa{etocmulticol}, and all their cousins and +variants have starred variants (the star must be before the other +arguments). For all but the |memoir| class, they are like the original. +For the |memoir| class, the original prints an entry in the |.toc| file, +as is the usage for the original \toc command in that class, whereas the +starred variants do not, as is the habit in that class. + +As soon as one starts using local table of contents one +discovers that the default |memoir| thing which is to create a +|chapter| entry for each TOC is not convenient. The command +\csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name} will change +the format (\meta{kind} is |chapter|, |section|, |subsection|... and +\meta{name} can be for example \csa{contentsname}.) The initial set-up +is with |chapter| and |\contentsname|. + +The format of the actual heading of the TOC should also be set +appropriately (for example with \csa{etoctocstyle}), to use the +identical division unit as in the first argument to +\csa{etocmemoirtoctotocfmt}. + +A weird situation arises when one has two successive +\csa{localtableofcontents} (obviously this is not a truly real +life situation), just after a \csa{part} for example. The first +one creates (if the default has not been modified as indicated +above) a Chapter heading which is +written to the |.toc|. Then the second one thinks to be local +to this chapter . . . and as a result it displays nothing. The +fix is to define the second one to be a clone of the first +one. + +Independently of the situation with the |memoir| class there is +generally speaking a hook macro called +\csb{etocaftertitlehook} which is inhibited by using the +starred variants of the displaying commands. Except for the +|memoir| class, this hook is initially defined to do nothing. + +There is \csb{etocaftercontentshook}, similarly defined to do +nothing. And \csb{etocbeforetitlehook} is also initially defined to do +nothing. They can be used for some special effects. + +\section{Table of contents for this part} + + +\subsection{Testing the compatibility mode} + +As a third example we now print the local table of contents +for this part. First we will test the compatibility mode.\footnote{the +present document uses the |scrartcl| class, and we check here that +the \etoc compatibility mode does respect the customizing done via the +class commands.} The original was invisibly defined with a label at the +beginning of this \autoref{part:globalcmds}. +\begin{verbatim} +\KOMAoptions{toc=left} +\etocstandarddisplaystyle % necessary for the display to obey toc=left +\etocstandardlines +\tableofcontents \ref{toc:globalcmds} +\end{verbatim} +\KOMAoptions{toc=left} +\etocstandarddisplaystyle +\etocstandardlines +\tableofcontents \ref{toc:globalcmds} + +\subsection{A framed display} + +We now opt for a ``framed'' style, using the package default +line styles and some colors added (it has been put in a float which appears +\vpageref{toc:b}).\footnote{inside the |figure| environment and before the + framed toc, which uses |multicols|, we added \csa{normalcolor} as work-around + to an interaction bug (related to the \csa{color\{red\}} command we added to + the |.toc| file) between |multicols|, |color| and the |figure| + environment. This bug has nothing to do with \etoc.} + +\begin{verbatim} +\etocdefaultlines +\begingroup +\renewcommand{\etoccolumnsep}{2em} +\renewcommand{\etocinnerleftsep}{1.5em} +\renewcommand{\etocinnerrightsep}{1.5em} +% specify a background color for the toc contents +\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} +% set up the top and bottom rules +\renewcommand{\etoctoprule}{\hrule height 1pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} +\renewcommand{\etocbottomrule}{\hrule height 1pt} +\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} +% set up the left and right rules +\renewcommand{\etocleftrule}{\vrule width 5pt} +\renewcommand{\etocrightrule}{\vrule width 5pt} +\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} +\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} +% use \fcolorbox to set up a colored frame for the title +\fboxrule1pt +\renewcommand{\etocbelowtocskip}{0pt\relax} +\etocframedstyle {\normalsize\rmfamily\itshape + \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering + This is a table of contents \`a la \etoc, but just for + the sections and subsections in this part. As it is put + in a frame, it has to be small enough to fit on + one page. It has the label |toc:b|.}}} +\begin{figure}[ht!] + \centering +\normalcolor % work-around to a bug involving color and multicols (and figure) +\tableofcontents \label{toc:b} \ref{toc:globalcmds} +\end{figure} +\endgroup +\end{verbatim} + + +\etocdefaultlines +\begingroup +\renewcommand{\etoccolumnsep}{2em} +\renewcommand{\etocinnerleftsep}{1.5em} +\renewcommand{\etocinnerrightsep}{1.5em} +% specify a background color for the toc contents +\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} +% set up the top and bottom rules +\renewcommand{\etoctoprule}{\hrule height 1pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} +\renewcommand{\etocbottomrule}{\hrule height 1pt} +\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} +% set up the left and right rules +\renewcommand{\etocleftrule}{\vrule width 5pt} +\renewcommand{\etocrightrule}{\vrule width 5pt} +\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} +\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} +% use \fcolorbox to set up a colored frame for the title +\fboxrule1pt +\renewcommand{\etocbelowtocskip}{-.5\baselineskip\relax} +\etocframedstyle {\normalsize\rmfamily\itshape + \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering + This is a table of contents \`a la \etoc, but just for + the sections and subsections in this part. As it is put + in a frame, it has to be small enough to fit on + one page. It has the label |toc:b|.}}} +\begin{figure}[ht!] + \centering +\normalcolor % work-around to a bug involving color and multicols (and figure) +\tableofcontents \label{toc:b} \ref{toc:globalcmds} +\end{figure} +\endgroup + +% Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le +% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder +% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle +% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie +% donc un problème d'interaction avec multicol là. à voir. Pas le temps +% maintenant. + +% 2013/10/14 +% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec +% etoc: +% http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure +% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor +% _avant_ le multicols à l'intérieur de figure + +\subsection{A (crazy) inline display} + +Let us finally make some crazy inline display of the table of +contents of this entire document. We will typeset the subsections as +footnotes... This kind of style is suitable for a hyperlinked +document, probably not for print! (although I like it, but my personal taste in +many matters does not seem to be widely shared). + +%%%% Note: 27 april 2014 + +%%%% except for a miraculous situation depending from the quantity of previous +%%%% material this TOC will have links extending accross pagebreaks, which +%%%% dvipdfmx does not know how to handle completely. Apart from that the output +%%%% is ok, thus no need to try seriously to avoid them. + +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; } + {\etocname} + {\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} + {, }{\etocname}{\/\upshape)} +\etocsettocstyle{Here is the inline table of contents. }{.\par} +\tableofcontents \label{toc:crazyinline} +\endgroup + +The code used: +\begin{verbatim} +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape} + {\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, } + {\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; }{\etocname}{\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection} + { (\itshape\etocskipfirstprefix}{, }{\etocname}{\/\upshape)} +\etocsettocstyle{Here is the inline table of contents. }{.\par} +\tableofcontents +\endgroup +\end{verbatim} + + +\clearpage +\etocdepthtag.toc {custom} + +\part{Using and customizing \etoc} +\label{part:custom} + +\thispartstats + +\etocdefaultlines +\renewcommand{\etoctoprule}{\hrule height2pt depth0pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red}} + +\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}% + \fbox{\parbox{.8\linewidth}{\centering\normalcolor This is a table of + contents for the sections and + subsections in this part. It carries the label |toc:c|}}} + +\localtableofcontents \label{toc:c} + + +\section{Summary of the main style commands} + +\subsection{Setting up local styles} + +\hbox{\color{green}\fboxrule1pt\fboxsep1em +\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname}}% +\framebox[\linewidth][c] +{\vbox{\hsize\wd0\normalcolor\noindent +\csa{etocsetstyle}\marg{levelname}% + \marg{start}\marg{prefix}\marg{contents}\marg{finish}\\ +\csa{etocname}, \csa{etocnumber}, \csa{etocpage}, +\csa{etocifnumbered}\marg{A}\marg{B}\\ +\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname} +}}} + +\subsection{Setting up toc display styles} + +\medskip +\hbox{\color{green}\fboxrule1pt\fboxsep1em +\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{kind}% +\marg{number\_of\_columns}\marg{title}\marg{mark}}% +\framebox[\linewidth][c] +{\vbox{\hsize\wd0 +\normalcolor\noindent +\csa{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}\\ +\csa{etoctocstyle}\oarg{kind}\marg{number\_of\_columns}\marg{title}\\ +\csa{etoctocstylewithmarks}\oarg{kind}\marg{number\_of\_columns}% +\marg{title}\marg{mark}\\ +\csa{etoctocstylewithmarksnouc}\oarg{kind}\marg{number\_of\_columns}% +\marg{title}\marg{mark}\\ +\csa{etocruledstyle}\oarg{number\_of\_columns}\marg{title}\\ +\csa{etocframedstyle}\oarg{number\_of\_columns}\marg{title}\\ +\csa{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}}} + +\subsection{Displaying tables of contents} + + +\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em + \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, + \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \framebox[\linewidth][c] + {\vbox{\hsize\wd0\normalcolor\noindent + \toc\\ + \localtoc\\ + \csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}\\ + \csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}\\ + \csa{etocruled}\oarg{number\_of\_columns}\marg{title}\\ + \csa{etoclocalruled}\oarg{number\_of\_columns}\marg{title}\\ + \csa{etocframed}\oarg{number\_of\_columns}\marg{title}\\ + \csa{etoclocalframed}\oarg{number\_of\_columns}\marg{title}\\ + \hbox{}{\itshape\ttfamily\ \ \ \ and their starred variants} + }}} + +\subsection{Labels and references} + +The commands (starred or not) to actually display the table of contents +can be followed with optional labels or references:\par + +\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em + \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, + \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \framebox[\linewidth][c] + {\vbox{\hsize\wd0\normalcolor\noindent + \toc \csa{label}|\{toc:here\}|\\ + \toc \csa{ref}|\{toc:far\}| \\ + \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ + \localtoc \csa{label}|\{toc:here\}|\\ + \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }% + \csa{etocmulticol}{\itshape\ttfamily\ etc . . . } + }}} + + +\medskip The commands for local tables of +contents do \emph{not} react to a \csa{ref} following them. + +When re-displaying another toc, only its contents are transferred: +both the line styles and the toc display style are the ones +currently defined, not the ones from the cloned toc. + + +\section{The package default line styles: \csbhyp{etocdefaultlines}} +\label{etocdefaultlines} + +These line styles were written at an early stage in the +development of the package; although the next section explains how +to customize the font choicess or vertical spaces, etc\dots, used +by these line styles, most other changes would require copying +them from the sources and modify them directly. Admittedly they +have been written at a rather scary low-\TeX{} level, and will not +serve as a very friendly starting point. + +Activating their use is done via \csa{etocdefaultlines}, or +\csa{etoctoclines} if the line styles have not been modified with +\csa{etocsetstyle}. Sections and sub-sections are printed in +essentially the same manner, except that the leading for +sub-sections is a bit smaller (with document classes lacking a +\csa{chapter} command, the sections are printed in bold typeface; +this is the case in the present document). Sub-sub-sections are +printed inline, in one paragraph, with no numbers or page numbers. +This style was designed and tested with documents having lots of +sub-sub-sections, and should be used on a two-column layout: it +provides (only in that situation with many sub-sub-sections) a +more compact presentation than what is achieved by the \LaTeX{} +default.\footnote{and there will never be a Part or Chapter entry + alone at the bottom of a column or page (except if it has no + sub-unit).} On the other hand, used with a one-column layout, +and with few sub-sub-sections, the style is a bit more spread out +vertically than the \LaTeX{} default, sub-sections are not +visually much different from sections (especially for document +classes with a \csa{chapter} command), so the result is less +hierarchical in appearance than in the \LaTeX{} default. + +In this document, for the \hyperref[toc:main]{main table of contents}, we did +|\etocsetlevel{subsection}{3}| hence the sub-sections were printed with the +sub-sub-section inline style. + +Let us, to the contrary, typeset now this main table of contents as if the +document had been done with a class having the \csa{chapter} command: we will +print sections as chapters, and subsections as sections. We use +\csa{etocsetlevel} for that, and also we need to change the font style of +``sections'' (which in truth are our subsections) to use not the bold but the +medium series; we modify the \csa{etocfontone} command for that. Also we use dot +leaders which are less spread out than in the package default. + + +\begin{verbatim} +\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape + \fbox{\parbox{.6\linewidth}{ + \leftskip 0pt plus .5fil + \rightskip 0pt plus -.5fil + \parfillskip 0pt plus 1fil This is the global table of + contents on two columns, using \etoc default line styles, but with + sections as chapters, and subsections as sections. + }}} +\etocdefaultlines +\etocsetnexttocdepth{1} +\begingroup +\etocsetlevel{section}{0} +\etocsetlevel{subsection}{1} +\renewcommand*{\etocfontone}{\normalfont \normalsize} +\renewcommand*{\etoctoclineleaders} + {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} +\sloppy +\tableofcontents +\endgroup +\end{verbatim} + +\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape + \fbox{\parbox{.6\linewidth}{ + \leftskip 0pt plus .5fil + \rightskip 0pt plus -.5fil + \parfillskip 0pt plus 1fil This is the global table of + contents on two columns, using \etoc default line styles, but with + sections as chapters, and subsections as sections. + }}} + +\etocdefaultlines +\etocsetnexttocdepth{1} + +\begingroup +\etocsetlevel{section}{0} +\etocsetlevel{subsection}{1} +\renewcommand*{\etocfontone}{\normalfont \normalsize} +\renewcommand*{\etoctoclineleaders} + {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} +\sloppy +\tableofcontents +\endgroup + +\section{Customizing \etoc} + +\subsection{Customizing the \etoc pre-defined line styles} + +We will simply list the relevant commands as defined in the +package. Customizing them goes through suitable +\csa{renewcommand}s: +\begin{verbatim} +\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries} +\newcommand*\etocfontminusone{\normalfont \large \bfseries} +\newcommand*\etocfontzero{\normalfont \large \bfseries} +\newcommand*\etocfontone{\normalfont \normalsize \bfseries} +\newcommand*\etocfonttwo{\normalfont \normalsize} +\newcommand*\etocfontthree{\normalfont \footnotesize} + +\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex} +\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} +\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} +\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} +\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} +\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} + +\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil} +\newcommand*\etocminustworightmargin{1.5em plus -0.5fil} +\newcommand*\etocminusoneleftmargin{1em} +\newcommand*\etocminusonerightmargin{1em} + +\newcommand*\etocbaselinespreadminustwo{1} +\newcommand*\etocbaselinespreadminusone{1} +\newcommand*\etocbaselinespreadzero{1} +\newcommand*\etocbaselinespreadone{1} +\newcommand*\etocbaselinespreadtwo{1} +\newcommand*\etocbaselinespreadthree{.9} +\newcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} +\newcommand*\etocabbrevpagename{p.~} % initial of "page" +\newcommand*\etocpartname{\partname} % utilisateurs de frenchb: attention + % car donne "partie" sans majuscule. +\newcommand*\etocbookname{Book} % to be modified according to language +\end{verbatim} + +No customizing of the standard line styles is possible from +within \etoc. As already explained, when +\csa{etocstandardlines} has been issued, the package just makes +itself very discrete and acts only at the global level, and +the TOC entries are (hopefully) formatted as would have +happened in the absence of \etoc.\footnote{with the + KOMA-script classes, we noticed that + \csa{etocstandarddisplaystyle} was apparently needed for the + KOMA options |toc=left| to be active at the level of the line entries.} + + +The \csa{etocstandardlines} compatibility mode will work also with +sectioning commands made known to \etoc via \csa{etocsetlevel}, +under the condition of course that these sectioning commands +are accompanied with all the relevant definitions for +typesetting toc entries in the \LaTeX{} default manner +(existence of the macros \csa{l@something} . . .). + +Using the command \csa{etocsetstyle}, be it in the preamble or +in the body of the document, has the secondary effect of +switching off the compatibility mode. + +\subsection{Customizing the toc display styles} +\label{ssec:customdisplay} + +Again we list the relevant macros, what they do should be +legible from their names. Note that \csa{renewcommand}'s and +not \csa{setlength}'s have to be used for what appear to be +lengths, and that color commands are not just color +specifications, they must include \csa{color}, and are canceled +by re-defining them to do \csa{relax}. +\begin{verbatim} +\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex} +\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex} + +\newcommand*\etoccolumnsep{2em} +\newcommand*\etocmulticolsep{0ex} +\newcommand*\etocmulticolpretolerance{-1} +\newcommand*\etocmulticoltolerance{200} +\newcommand*\etocdefaultnbcol{2} +\newcommand*\etocinnertopsep{2ex} +\newcommand*\etoctoprule{\hrule} +\newcommand*\etoctoprulecolorcmd{\relax} + +% for the framed style only: +\newcommand*\etocinnerleftsep{2em} +\newcommand*\etocinnerrightsep{2em} +\newcommand*\etocinnerbottomsep{3.5ex} + +\newcommand*\etocleftrule{\vrule} +\newcommand*\etocrightrule{\vrule} +\newcommand*\etocbottomrule{\hrule} +\newcommand*\etocleftrulecolorcmd{\relax} +\newcommand*\etocrightrulecolorcmd{\relax} +\newcommand*\etocbottomrulecolorcmd{\relax} + +\newcommand*\etocbkgcolorcmd{\relax} + +% hooks +\newcommand\etocframedmphook{\relax} +\end{verbatim} + +The \csa{etocframedmphook} is positioned immediately +after the beginning of a minipage environment where the +contents of the framed TOC are typeset. + +The \csa{...colorcmd} commands are initially set to expand to +\csa{relax} (hence do not require package |color| or |xcolor| +to be loaded). If one has modified a command such as +\csa{etocbkgcolorcmd} to expand to a color command and wants +to reset it to do nothing, one \emph{must} use +|\renewcommand{\etocbkgcolorcmd}{\relax}| and not +\csa{let}\csa{etocbkgcolorcmd}\csa{relax}. + +Regarding the dimensions of the top rule they can be specified +in |ex|'s or |em|'s as in this example: +\centeredline{|\renewcommand{\etoctoprule}{\hrule height 1ex}|} +The package code is done in such a manner +that it is the font size in instance at the end of typesetting +the title argument to \csa{etocruledtoc} or +\csa{etocframedtoc} which will be used for the meaning of the +`1ex'. Of course also the other rule commands can have their +dimensions in font relative units, but their values are +decided on the basis of the font in effect just before the +table of contents. + +The top and bottom rules do not have to be rules and can be +horizontal \emph{leaders} (of a specified height) in the general +\TeX{} sense. However the left and right rules are not +used as (horizontal) leaders but as objects of a given specified +width. Note that \emph{only} the Plain \TeX{} syntax for rules is +accepted here. + +\section{One more example of colored TOC layout} +\label{ssec:tocclone} + +The command \csa{etocframedstyle} puts the title on the top +rule in a centered position. This is not very convenient for +this example so we included the title as part of the +\meta{start} code at section level, to get it \emph{inside} +the frame. + +\begin{verbatim} +\begingroup +\definecolor{subsecnum}{RGB}{13,151,225} +\definecolor{secbackground}{RGB}{0,177,235} +\definecolor{tocbackground}{RGB}{212,237,252} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 1cm} +\renewcommand{\etocrightrule}{\vrule width .5cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} + {\shiftedwhiterule{\leftskip}{6pt}} + {\sffamily\footnotesize + \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent + \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% + \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill + \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par + \nointerlineskip\vskip3pt} + {} + +\etocsetstyle{subsection}{\etocskipfirstprefix} + {\shiftedwhiterule{1.5cm}{6pt}} + {\sffamily\small + \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent + \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% + \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill + \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par + \nointerlineskip\vskip6pt} + {} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +\etocsetstyle{section} +{\coloredstuff{white} + {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of + that other TOC (click me!)}\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} + +\etocframedstyle[1]{} +\tableofcontents \label{toc:clone} \ref{toc:globalcmds} +\endgroup +\end{verbatim} + +\begingroup +\definecolor{subsecnum}{RGB}{13,151,225} +\definecolor{secbackground}{RGB}{0,177,235} +\definecolor{tocbackground}{RGB}{212,237,252} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 1cm} +\renewcommand{\etocrightrule}{\vrule width .5cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip +\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} +{\shiftedwhiterule{\leftskip}{6pt}} +{\sffamily\footnotesize +\leftskip2.5cm\hangindent1cm\rightskip1cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par +\nointerlineskip\vskip3pt} +{} + +\etocsetstyle{subsection}{\etocskipfirstprefix} +{\shiftedwhiterule{1.5cm}{6pt}} +{\sffamily\small +\leftskip1.5cm\hangindent1cm\rightskip1cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par +\nointerlineskip\vskip6pt} +{} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +% v1.07l on the occasion of traduction into German documentation + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{white} + {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of + that other TOC (click me!)}\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} + +\etocframedstyle[1]{} + +\begin{figure}[ht!]\centering + \tableofcontents \label{toc:clone} \ref{toc:globalcmds} +\end{figure} +\endgroup + +The TOC has been put in a \hyperref[toc:clone]{float} which appears +\vpageref{toc:clone}. The coding is a bit involved\footnote{and reveals the + author's preference for the \TeX{} syntax...} as it does not use any +additional package. Also, it was written at some early stage and I have not +revised it since. + +A better solution would be to use some package to set +up a background color possibly extending accross pages, as the +framed style (which we used to get this background +color) can only deal with material short enough to fit on one +page. + +Regarding colors, generally speaking all color commands inside +\etoc are initially defined to do nothing, and the choice to +use or not colors is left to the user. + +\clearpage +\etocdepthtag.toc {tips} + +\part{Tips} +\label{part:tipsandtricks} + +\thispartstats + +%%%% \invisiblelocaltableofcontents \label{toc:tipsandtricks} + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents + +\section{... and tricks} + +\subsection{Hacking framed parboxes} + + +\begin{verbatim} +\etocdefaultlines +\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} +\etocruled{\color{green}\fboxrule2pt\fboxsep1ex + \fbox{\raisebox{-\fontdimen22\textfont2} + {\color{blue}\parbox{.5\linewidth} + {\normalfont This text is perfectly centered + vertically with respect to the + surrounding horizontal rules.}}}} +\ref{toc:globalcmds} +\end{verbatim} + +\etocdefaultlines + +\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} + +\etocruled{\color{green}\fboxrule2pt\fboxsep1ex + \fbox{\raisebox{-\fontdimen22\textfont2} + {\color{blue}\parbox{.5\linewidth} + {\normalfont This text is perfectly centered + vertically with respect to the + surrounding horizontal rules.}}}} + \ref{toc:globalcmds} + + +\subsection{Interverting the levels} +\label{subsec:interverting} + +Let us display and count all subsections occurring in this +document (see \autoref{part:surprising} for other uses of +this technique): +\begin{verbatim} +\etocsetnexttocdepth{2} +\begingroup +\etocsetlevel{part}{3} +\etocsetlevel{section}{3} +\etocsetstyle{subsection} + {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} + {\normalfont\bfseries\item} + {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} + {\end{enumerate}} +\renewcommand{\etoccolumnsep}{2.75em} +\renewcommand{\columnseprule}{1pt} +\etocmulticol[3]{\subsection{All subsections of this document}} +\endgroup +\end{verbatim} + +\etocsetnexttocdepth{2} + +\begingroup +\etocdefaultlines +\etocstandarddisplaystyle +\etocsetlevel{book}{3} +\etocsetlevel{part}{3} +\etocsetlevel{chapter}{3} +\etocsetlevel{section}{3} +\etocsetstyle{subsection}{\small +\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} +{\normalfont\bfseries\item} +{\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} +{\end{enumerate}} + +\renewcommand{\etoccolumnsep}{2.75em} +\renewcommand{\columnseprule}{1pt} + +%%\etocmarkbothnouc{List of all subsections} +%% le mark (\markright) est fait par \subsection + +\etocmulticol[3]{\subsection{All subsections of this document}\label{toc:allsubsections}} + + +\endgroup + +\subsection{Displaying statistics}\label{ssec:statistics} + +Each part of this document starts with a paragraph telling how many +sections and subsections it has. Well, each one of this paragraph is a +table of contents! We designed a macro \csa{thispartstats} to do that. +It uses ``storage'' boxes to keep the information about the first and +last section or subsection. Using boxes is the simplest manner to +encapsulate the |hyperref| link for later use (whether there is one or +none). However, one cannot modify then the font or the color (using the +\TeX{} primitive \csa{setbox} rather than the \LaTeX{} \csa{sbox} would +allow to change the color of the un-boxed saved box). If such a need +arises, one must switch from using boxes to using macros, and store the +|hyperref| data for later use as was done in the code presented in +\autoref{sec:molecule}. We present also this second method. + +But first, the code of \csa{thispartstats}:\par +\begin{verbatim} +\newsavebox\firstnamei \newsavebox\firstnumberi +\newsavebox\lastnamei \newsavebox\lastnumberi +\newsavebox\firstnameii \newsavebox\firstnumberii +\newsavebox\lastnameii \newsavebox\lastnumberii +\newcounter{mycounti} \newcounter{mycountii} +\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{} +\newcommand*{\oldtocdepth}{} +\newcommand*{\thispartstats}{% + \setcounter{mycounti}{0}% + \setcounter{mycountii}{0}% + \def\thispartstatsauxi{% + \sbox{\firstnamei}{\etocname}% + \sbox{\firstnumberi}{\etocnumber}% + \def\thispartstatsauxi{}}% + \def\thispartstatsauxii{% + \sbox{\firstnameii}{\etocname}% + \sbox{\firstnumberii}{\etocnumber}% + \def\thispartstatsauxii{}}% + \begingroup + \etocsetstyle{subsection} {} {} + {\thispartstatsauxii + \stepcounter{mycountii}% + \sbox{\lastnameii}{\etocname}% + \sbox{\lastnumberii}{\etocnumber}} {}% + \etocsetstyle{section} {} {} + {\thispartstatsauxi + \stepcounter{mycounti}% + \sbox{\lastnamei}{\etocname}% + \sbox{\lastnumberi}{\etocnumber}} + {Here are some statistics for this part: it contains \arabic{mycounti} + section\ifnum\value{mycounti}>1 s\fi{} and \arabic{mycountii} + subsection\ifnum\value{mycountii}>1 s\fi. The name of the first section is + \unhbox\firstnamei{} and the corresponding number is \unhbox\firstnumberi. + The name of the last section is \unhbox\lastnamei{} and its number is + \unhbox\lastnumberi. The name of the first subsection is \unhbox\firstnameii{} + and the corresponding number is \unhbox\firstnumberii. The name of the last + subsection is \unhbox\lastnameii{} and its number is \unhbox\lastnumberii.}% + \etocinline % cancels the automatic \par automatically before the TOC + \etocsettocstyle {}{} + \etocsetnexttocdepth{2}% + \localtableofcontents % to be used at the top level of a Part. + \endgroup +} +\end{verbatim} + +And now, the variant with macros rather than boxes (this variant as it +stands here is for using within a section). +\begin{verbatim} +\makeatletter +\newcommand*\firstsubname {} \newcommand*\lastsubname {} +\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {} +\newcommand*\thisspecialstatsaux{} +\newcommand*{\thisspecialstats}{% + \setcounter{mycounti}{0}% + \def\thisspecialstatsaux{% + \let\firstsubname\etocthelinkedname + \let\firstsubnumber\etocthelinkednumber + \def\thisspecialstatsaux{}} + \begingroup + \etocsetstyle{subsection} {} {} + {\thisspecialstatsaux + \stepcounter{mycounti}% + \let\lastsubname\etocthelinkedname + \let\lastsubnumber\etocthelinkednumber } + {Here are some statistics for this section. It contains \arabic{mycounti} + subsections. The name of its first is \emph{\firstsubname{}} and the + corresponding number is {\firstsubnumber}. The name of the last + subsection is \emph{\lastsubname{}} and its number is {\lastsubnumber}.}% + \etocsettocstyle {}{} + \etocinline + \etocsetnexttocdepth {1}% + \localtableofcontents % to be used within a section + \endgroup +} +\makeatother +\end{verbatim} + +\subsection{Using depth tags} +\label{ssec:tocwithdepthtags} + +We want a TOC which will have a heading for each |\part| (except +the last part with the code source, which we decide not to +include), and will additionally open up \autoref{part:globalcmds} +up to paragraphs. To achieve this we added to this source various +\csb{etocdepthtag.toc} commands, and it remains now to set the +levels for each tag using \csb{etocsettagdepth} (this was used +earlier in this document, in \autoref{sec:secondexample}, within a +group hence it did not affect the other tables of contents). + +However, the package line styles do not display paragraphs, and the +standard line styles of the document class give too much vertical +spacing (in this context) when displaying a Part heading in the TOC. So +we cook up our own, quickly designed line styles, in the style of +\autoref{sec:firstexample} (but with a way to put page numbers on the +right which is more like the method used by \LaTeX2e's +|\@dottedtocline|; and multi-line headings now leave empty the area +underneath the numbers contrarily to the code from +\autoref{sec:firstexample}). And after a few minutes for choosing +lengths (now that this has been done once, it can be recycled easily) we +get: + +\etocsetnexttocdepth {all} +\begingroup +\parindent 0pt +\leftskip 0cm +\rightskip 0.75cm +\parfillskip -\rightskip +\newcommand*{\EndParWithPagenoInMargin} + {\nobreak\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par} +\renewcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} +\newcommand*{\EndParWithPagenoInMarginAndLeaders} + {\nobreak\leaders\etoctoclineleaders\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par } +\etocsetstyle {part} + {} + {\leavevmode\leftskip 1cm\relax} + {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% + \etocname\EndParWithPagenoInMargin\smallskip} + {} +\etocsetstyle {section} + {} + {\leavevmode\leftskip 1.75cm\relax} + {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip 2.75cm\relax } + {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 4cm\relax } + {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {paragraph} + {} + {\leavevmode\leftskip 5.5cm\relax } + {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {part} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {part} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {paragraph} +\etocsettagdepth {custom} {part} +\etocsettagdepth {tips} {part} +\etocsettagdepth {code} {none} +\renewcommand\etoctoprule {\hrule height 3pt\relax } +\renewcommand\etoctoprulecolorcmd {\color{blue}} +\renewcommand\etocaftercontentshook + {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } +\etocruledstyle [1]{\Large\bfseries + \fbox{\makebox[8cm]{A TOC using depth tags}}} +\sloppy +\tableofcontents + +\begin{verbatim} +\etocsetnexttocdepth {all} +\begingroup +\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip +\newcommand*{\EndParWithPagenoInMargin} + {\nobreak\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par} +\renewcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} +\newcommand*{\EndParWithPagenoInMarginAndLeaders} + {\nobreak\leaders\etoctoclineleaders\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par } +\etocsetstyle {part} + {} + {\leavevmode\leftskip 1cm\relax} + {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% + \etocname\EndParWithPagenoInMargin\smallskip} + {} +\etocsetstyle {section} + {} + {\leavevmode\leftskip 1.75cm\relax} + {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip 2.75cm\relax } + {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 4cm\relax } + {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {paragraph} + {} + {\leavevmode\leftskip 5.5cm\relax } + {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {part} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {part} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {paragraph} +\etocsettagdepth {custom} {part} +\etocsettagdepth {tips} {part} +\etocsettagdepth {code} {none} +\renewcommand\etoctoprule {\hrule height 3pt\relax } +\renewcommand\etoctoprulecolorcmd {\color{blue}} +\renewcommand\etocaftercontentshook + {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } +\etocruledstyle [1]{\Large\bfseries + \fbox{\makebox[8cm]{A TOC using depth tags}}} +\sloppy +\tableofcontents +\endgroup +\end{verbatim} +\endgroup + +\subsection{Typesetting the TOC as a table (the old way)} +\label{ssec:tocastableold} + +Due to, among other things, the fact that alignment cells create and close +groups, and that by default definitions of \csb{etocname}, \csb{etocnumber}, +\csb{etocpage} made by \etoc are local, it was not easy to typeset a TOC as +table with \etoc, prior to release |1.08|. + +Not only \csb{etocname} etc... caused a problem, but also the basic +redefinition of \csa{contentsline} was made by \etoc only after the +first argument to \csb{etocsettocstyle} had been executed, hence if this +argument were to open a tabular, the \etoc redefinition of +\csa{contentsline} would be done in the first cell of the first row and +get lost thereafter. + +Thus one had to resort to the technique explained in \autoref{tocastree} +of using the execution of \csa{tableofcontents} as a way to store data +which was then displayed later. + +For the record, here is how the TOC from \autoref{sec:tocastable} was +coded in the old days. We don't have here the problems with the +positioning of |\hline|'s we face with the newer method; on the other +hand we must manipulate token registers which are not familiar to most +\LaTeX{} users (macros could be used, but would be more cumbersome, +except perhaps if using the \eTeX{} \csa{unexpanded}). + +The method here is the most powerful because it filters out of the +|.toc| file only the data we want (the other things are not ignored, +they are executed but hopefully do not create havoc; typically they are +language changing instructions, or updates to certain counters, etc...), +and we are less susceptible to fall potential victims of various +external macros inserted in the |.toc| file by other packages. + +Note: rather than |\toks| registers it would be easier here to use \eTeX{} +\csa{unexpanded} primitive. See for example \autoref{sec:mindmap}. + +\begin{verbatim} +\newtoks\toctabletok +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} + +\newcommand*\PreparePart{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\etocthelinkedname}% + \toks4 \expandafter{\etocthelinkedpage}% + \edef\toctablepiece {\noexpand\hline + \noexpand\strut\the\toks0 &\noexpand\bfseries\the\toks2 + &\the\toks4 \noexpand\\\noexpand\hline}% +} +\newcommand*\PrepareSection{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\etocthelinkedname}% + \toks4 \expandafter{\etocthelinkedpage}% + \edef\toctablepiece {\the\toks0 &\the\toks2 &\the\toks4 \noexpand\\}% +} +% new version for 1.07k, 2014/03/06 +\newcommand*{\PrepareSubsection}{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\expandafter\itshape\etocthelinkedname\strut}% + \toks4 \expandafter{\expandafter\itshape\etocthelinkedpage}% + \edef\toctablepiece{&\noexpand\makebox[1cm][c]{\the\toks0}% + \noexpand\parbox[t]{\dimexpr6cm-\tabcolsep\relax} + {\noexpand\sloppy\the\toks2}% + &\the\toks4 \noexpand\\}% +} + +\begingroup +\etocsetstyle{part}{}{}{\PreparePart \appendtotok\toctabletok\toctablepiece}{} + +\etocsetstyle{section}{}{}{\PrepareSection \appendtotok\toctabletok\toctablepiece}{} + +\etocsetstyle{subsection}{}{}{\PrepareSubsection\appendtotok\toctabletok\toctablepiece}{} + +\etocsettocstyle + {\toctabletok{\hypersetup{hidelinks}% + \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}\hline + \multicolumn{3}{|c|}{\Large\bfseries\strut TABLE OF CONTENTS}% + \\\hline\hline}} + {\global\toctabletok\expandafter{\the\toctabletok\hline\end{longtable}}} +\etocsettocdepth {subsection} +\tableofcontents +\the\toctabletok +\endgroup +\end{verbatim} + +\subsection{Compatibility with other packages} +\label{etocaftertochook} + +The contents of the |.toc| file (if it already exists) are read into memory by +\etoc once, at the time of |\begin{document}|.\footnote{New with |1.07m|. + Earlier versions read the |.toc| file at the time of + \csa{usepackage\{etoc\}}. Thanks to Denis Bitouzé who signaled a Babel + related problem, which turned out to be caused by this.} + +\begin{framed} + One should load \etoc \emph{after} \texttt{babel}. This is in order for + |babel|'s shorthands to be active at the time when \etoc loads the |.toc| + file. +\end{framed} + +The |.toc| file remains available + to other packages for read operations until the location of the first table + of contents at which time a write stream is opened by \etoc and from that + point the file is erased until its contents are again written to the disk by + \LaTeX{} at the end of the compilation. + +\etoc loads the package |multicol|. + +\etoc requires the |.toc| file to use the |\contentsline| macro (possibly +patched by other packages). It is thus incompatible with the |beamer| class. +However, if |beamer| is used in an article mode, i.e., with the article class +in conjunction with the |beamerarticle| package, then \etoc should work. + +\etoc is |hyperref| aware and hopefully |hyperref| compatible: the macros +\csa{etocname}, \csa{etocnumber}, and \csa{etocpage} contain the |hyperref| +links, if present (note that the \emph{linktoc=all} option of |hyperref| tells +it to put a link also in the page number corresponding to a given toc entry). +For example, the tables of contents of the present document are all fully +linked. It doesn't matter whether \etoc or |hyperref| is loaded first. + +Release |1.07k| adds compatibility with package +|tocloft|:\footnote{\url{http://ctan.org/pkg/tocloft}} steps are +taken to prevent the redefinition of |\tableofcontents| done by +|tocloft| at |\begin{document}|. +% +As long as \etoc is left in compatibility mode the customization done by +|tocloft| will be obeyed, for both the line styles and the TOC title. +One may still benefit from the \emph{depth tags} management by \etoc, +from its |\localtableofcontents|, from its |\label+\ref| mechanism. One +may use |\etocsetstyle| to define via \etoc the layout for one TOC and +then use rather |tocloft| for another one, if |\tableofcontents| follows +\csb{etocstandardlines} and \csb{etocstandarddisplaystyle}. In this +compatibility mode |\etocsetlevel{division unit}{6}| will render +invisible the chosen division level, but exchanging levels is otherwise +not possible. + +\begin{framed} + One should load \etoc \emph{after} \texttt{tocloft}. A warning is + issued if otherwise. +\end{framed} + +Release |1.07l| has also improved the compatibility with the |memoir| class: its +|appendix| level has been made known to \etoc. It is at the same level as +|chapter|, thus the chapter line style should possibly do a test for some user +defined boolean whose activation may be added to the |.toc| file at the suitable +location via |\addtocontents{toc}{..}|, if one needs to distinguish the two +kinds of divisions. + +\etoc can not really cohabit with packages modifying the \csa{tableofcontents} + command: some sort of truce can be achieved if \etoc is loaded last, hence is + the winner. + + \begin{framed} + Do not modify the |\tableofcontents| command like this: + \centeredline{|\let\oldtableofcontents\tableofcontents|} + \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents\mystuff}|} + as this will make the |\label/\ref| mechanism impossible. Rather you may do + \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} and there is + also \csb{etocaftercontentshook} which is executed a bit + earlier\footnotemark{} + just before + the + closing part of the toc display style (and thus still within a group.) + \end{framed} +\footnotetext{contrarily to \csa{etocaftertochook}, + \csa{etocaftercontentshook} is not executed if the |tocdepth| did not + allow the printing of the TOC.} + + \etoc used to be incompatible with package + |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; it now cohabits, sort + of, as it deactivates |tocvsec2|'s modification of |\tableofcontents| (done in + the style above) and also cancels its other |toc|-related macros, but + reimplements partially their functionality with \csb{etocsettocdepth.toc}. By + the way, at least two latex runs are necessary for new uses of this command in + a document to have an effect in tables of contents. + +When a \localtoc is inserted by the user in the document, a +line containing an \etoc inner command and an identification +number is added to the |.toc| file. The correct local table of +contents will be displayed only on the next |latex| run. + +It is possible to customize (using package |tocloft| for +example) throughout the document the macros \csa{l@section}, +\csa{l@subsection} ... and the effect will be seen in the next +table of contents typeset by \etoc in compatibility mode. + +It is possible to use simultaneously \etoc and +{\color{niceone}|tableof|}\footnote{\url{http://ctan.org/pkg/tableof}}. Release +|1.08| of \etoc requires at least version |1.4a| of |tableof|. If +\csb{etocglobaldefs} is put in the preamble, this must be after the loading of +package |tableof|. {\color{niceone}|tableof|} command \csa{nexttocwithtags} +should work as expected. + +{\color{niceone}|tableof|} commands \csa{tableof}, \csa{tablenotof}, ... will +typeset the (a priori global) table of contents according to the document +class defaults, obeying the \etoc depth tags; as explained in the |tableof| +documentation they do not typeset a TOC title. They should \emph{not} be used +in case \csb{etocglobaldefs} was issued before, except if its scope has been +terminated since then, or \csb{etoclocaldefs} has cancelled its influence. + +\subsection{\TeX nical matters} + +The \csb{etocname}, \csb{etocnumber}, \csb{etocpage} commands are protected +against premature expansion. They contain suitable |hyperref| links if package +|hyperref| is loaded and active for the TOC. The commands \csb{etoclink} and +\csb{etocifnumbered} are also protected against premature expansion. Also +\csb{etociffirst} and \csb{etoctoccontentsline}. + +On the other hand \csb{etocthename}, \csb{etocthenumber}, \csb{etocthepage} +are \emph{not} protected against expansion. And neither are +\csb{etocthelinkedname}, \csb{etocthelinkednumber}, \csb{etocthelinkedpage}. +The latter contain hyperlink data, if present in the |.toc| file. + +The commands such as \csb{etocsetstyle}, \csb{etocsetlevel}, +\csb{etocsettocstyle}, \csb{etocmulticolstyle}, +\csb{etocruledstyle}, \csb{etocframedstyle} obey \LaTeX{}'s +groups. All TOCs are typeset inside groups. + +\subsection{Errors and catastrophes} + + After using \csa{etocsetstyle} for one level, the remaining + uncustomized levels use the \etoc default styles (those + which are activated by \csa{etocdefaultlines}). One has to + make sure that all levels needed for the next table of + contents are mutually compatible: in particular the \etoc + default line styles expect each to be started in ``vertical mode''. + + When using multiple \toc commands in a document, one should beware from adding + typesetting instructions directly in the |.toc| file, as they will be executed + by \etoc for all TOCs: even for a \localtoc it doesn't matter if that + instruction seems to concern material outside of its scope, it will get + executed nevertheless. If absolutely necessary (but this should never be) + these instructions should be done in such a way that they can be activated or + deactivated easily from the document source, as need be. + + As is usual with toc and labels, after each change, one has + to run latex a certain number of times to let the produced + document get its final appearance (at least twice).\par + +\clearpage +\etocdepthtag.toc {code} + +\part{The code} + +\section{Timestamp} + +This is the documentation as of \texttt{\etocdocdate}, printed from the +source file with the time stamp \texttt{\etocdtxtimestamp}. The package +version is \texttt{\etocpkgversion}, of \texttt{\etocpkgdate}. + +% STOP ENGLISH VERSION +^^Afi + +^^Acatcode92 12 + +^^Aifnum^^AForDeutsch=1 + + ^^Acatcode92 0 + + +% START GERMAN (DEUTSCH) VERSION +\bookmark[named=FirstPage,level=1]{Titelseite}% 10 octobre 2013. + +\begingroup + +\etocsetstyle{part} + {\etocskipfirstprefix} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendpart\treetok\parttok {teal!60}% first + \or \appendpart\treetok\parttok {yellow!80}% second + \else\appendpart\treetok\parttok {green!50}% third and next ... + \fi + } + {\stepcounter{partco}% + \edef\treenode{node + {\unexpanded\expandafter{\etocthelinkednumber}. + \unexpanded\expandafter{\etocthelinkedname}}}% +% grosse astuce: la première Partie ne sera pas embêtée par les trois sections +% avant car ce qu'elles auront mis dans \parttok va être effacé. + \parttok\expandafter{\treenode}} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendpart\treetok\parttok {teal!60}% first + \or \appendpart\treetok\parttok {yellow!80}% second + \else\appendpart\treetok\parttok {green!50}% third and next ... + \fi + } + +\etocsetstyle{section} + {} + {} + {% define the section node + \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} + \unexpanded\expandafter{\etocthelinkedname}}}}% + \appendtotok\parttok\childnode } + {} + +\etocsetnexttocdepth{section} + +\etocsettocstyle + {\setcounter{partco}{0}% + \treetok{\node [root concept]{\normalfont{Das \etoc-Paket}\par {\normalsize\textsc + {Jean-François Burnol}\par \ttfamily jfbu (at) free (dot) fr}\par + {\normalsize Paketversion:\par \etocDEpkgversion{} (\etocDEpkgdate )\par}}}} + {\global\appendtotok\treetok{ ;}} + +\etocinline\tableofcontents\label{toc:mindmaptitlepage} + +% \immediate\openout\TOCasTree=\jobname.toctree +% \immediate\write\TOCasTree{\the\treetok}% + +\tikzset{ + branch color/.style={ + concept color=#1!white, + every child/.append style={concept color=#1!white!30!white}, + } +}% + +\global\setbox\TitlePageMindmapTOC\hbox{% +\resizebox{.9\paperwidth}{!}{% +\begin{tikzpicture}[mindmap, + text width=2cm, + align = flush center, + growth function=\tikzmycustomgrowth, + nodes={concept}, + concept color=orange!60, + root concept/.append style={font=\huge, text width = 6cm}, + level 1/.append style={level distance=7cm, sibling angle=360/8},% 8 hard-coded mais je pourrais aussi le calculer + level 1 concept/.append style={font=\Large, text width = 3cm}, + level 2/.append style={level distance=12.5cm, sibling angle=360/35},% 35 hard coded mais je pourrais aussi le calculer + % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment) + ] +\the\treetok +\end{tikzpicture}}} +\endgroup + +\indent\null +\begingroup + \let\thefootnote\empty +\footnote{Original Dokumentationzeitstempel: ``\etocDEdocdate''.\par + Übersetzt ins Deutsche von Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel + Büttner, Claudia Dahl, Christian Otto und Christine Römer (FSU Jena). + Hinweise zur Übersetzung an Christine\_Roemer at t-online dot de.} +\endgroup +\setcounter{footnote}{0} + +\AddToShipoutPictureFG*{% + \put(10.5cm,16.85cm) + {\makebox(0,0){\box\TitlePageMindmapTOC}}} + +\clearpage + + +\etocdepthtag.toc {preamble} +%---- +% MAIN TOC +% +\etocsettocdepth {subsubsection} +\etoctoclines +\etocmarkboth\contentsname +\etocmulticolstyle[1] + {\pdfbookmark[1]{Inhaltsverzeichnis}{MAINTOC}% + \noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Inhaltsverzeichnis}} +\begingroup + \etocsetlevel{subsection}{3} + \etocsetlevel{subsubsection}{6} +\tableofcontents \label{toc:main} +\endgroup + +\phantomsection\addcontentsline{toc}{section}{\abstractname} +\begin{abstract} + Das \etoc-Paket gibt dem Nutzer lückenlose Möglichkeiten, die Einträge des + Inhaltsverzeichnis individuell über \emph{Name}, \emph{Nummer}, und + \emph{Seitenzahl} für jede gliedernde Einheit zu setzen. Dieses wird durch die + Definition von \emph{Zeilenstilen (line-styles)} für jede Unterteilungsstufe + des Dokuments realisiert. Das Paket bietet darüber hinaus seinen eigenen + Zeilenstile. Einfachere werden als Beispiele in dieser Dokumentation + angeboten. Die einfachste Nutzung wird durch die Verwendung der + Layout-Hilfsmittel, von Paketen die sich mit Listen-Umgebungen beschäftigen, + gewährt. + + In Hinsicht auf das \emph{globale Inhaltsverzeichnis} bietet \etoc\ + vordefinierte Stile, die auf der Mehrspaltenansicht mit optionalen, + unterstrichenen Titeln oder eingerahmten Inhalten basieren. + + Der \csa{tableofcontents}-Befehl kann beliebig mehrfach benutzt werden. Er hat + die Variante \csa{localtableofcontents}, welche die Inhaltsangabe 'local' zur + aktuellen Dokumenten-Sektion ausgibt. Eine Erweiterung der + \csa{label}/\csa{ref}-Syntax erlaubt die Reproduktion (mit anderem Layout) + einer lokalen Inhaltsangabe, die irgendwo anders im Dokument definiert wurde. + + Mit "`tiefen Tags"' erhält man noch feinere Kontrolle über jede Inhaltsangabe + und darüber, welche unterteilende Einheit angezeigt werden soll, oder nicht. + + Mit \emph{Kompatibilismus} wird die Formatierung der Dokumentklasse geerbt + (die womöglich von anderen Paketen verändert wurde); und die Formatierung, die + von der Dokumentklasse (die womöglich von anderen Paketen verändert wurde) + geerbt wird. + + Die Zuweisung von Ebenen zu den unterteilenden Einheiten kann zu jeder Zeit + geändert werden und \etoc kann dadurch in einer ziemlich generellen Weise + genutzt werden, um selbsterstellte 'Listen von' zu erzeugen. Keine + Zusatzdateien werden zusätzlich zu der Standard-|.toc|-Datei benutzt. +\end{abstract} + +\section{Vorwort} + +Andere populäre Pakete, die sich mit Inhaltsangaben befassen, sind +|tocloft|, |titletoc| und |minitoc|. Warum also ein anderes? +Ich habe \etoc erst für mich selbst entwickelt und +später von den anderen Paketen erfahren. + +Wie es auch in der |tocloft|-Dokumentation erklärt wird, ist das +Standard-\LaTeX -Layout für Inhaltsangaben in den Klassen-Definitionen +begraben. Im Besonderen sind die meisten Längen hart codiert und der +einzige Weg für den Benutzer, sie zu ändern, ist, die Klasse in den +Dokumenten-Ordner zu kopieren und dann die Längen zu ändern. +Die vernünftigere Alternative ist die Benutzung eines auf das Veränderungsziel +gerichteten Pakets, wie |tocloft| oder eine andere flexible Dokumentklasse. + +Freilich, obwohl jetzt hoffentlich nichts mehr hart codiert ist, +muss man noch immer das Paket oder die Klassen-Definitionen durchgehen. +Das bedeutet, dass man sich viele (vermutlich große) Menge an Makros +merken muss, die nur dieser Aufgabe dienen. Und man wird immer +auf die Anpassung eines zu Anfang gegebenen Layouts eingeschränkt sein. + +Der Sinn von \etoc ist ein anderer. Der Nutzer wird sich mit +\emph{Name}, \emph{Nummer} und der \emph{Seitenzahl} beschäftigen. +Diese korresponieren mit jeder Dokumenten-Unterteilung (und können in +einer Zeile der |.toc|-Datei gefunden werden). Sie können, wenn gewünscht, +durch die Befehle \csb{etocname}, \csb{etocnumber} und \csb{etocpage} +abgerufen werden. + +\etoc scheint (mindestens teilweise) mit den Dokument-Klassen |article|, +|book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir| +kompatibel zu sein. Seit der Version |1.07k| ist es möglich \etoc +gleichzeitig mit |tocloft| zu benutzen. + +\section{Lizenz} + +\begingroup\ttfamily\small\hyphenchar\font -1 + \parindent0pt + \obeyspaces\obeylines +\etocLicense\endgroup + + +\clearpage +\etocsettocdepth {subsection} + +\etocdepthtag.toc{overview} + +\part{Überblick}\label{part:overview} + +\thispartstats + +\invisiblelocaltableofcontents \label{toc:overview} + +\section{Muss ich Computerfreak sein, um \etoc benutzen zu können?} + +Nicht wirklich. Der einfachste Weg ist die Benutzung von +|enumerate|-Umgebungen mit den Anpassungsmöglichkeiten von +Paketen wie |enumitem|, \footnote{\url{http://ctan.org/pkg/enumitem}} +um von \etoc aus der |.toc|-Datei die abgerufenen Daten anzuzeigen. +Die Daten bestehen aus \emph{Name} (\csb{etocname}), \emph{Gliederungsnummer} +(\csb{etocnumber}) und \emph{Seitenzahl} (\csb{etocpage}). + +Dieses wird \hyperref[toc:a]{zu Beginn} von \autoref{part:linestyles} +gezeigt. Anspruchsvollere Beispiele würden anspruchsvollere +|enumitem|-Optionen benutzen. Man könnte nun sagen, dass der Nutzer +sich einige Anpassungen merken muss. Und das ist auch so, aber die +Syntax und Optionsbezeichnungen, die es zu behalten gilt, sind +in keinster Weise ähnlich. + +Die Methode wird \hyperref[sec:firstexample]{später} +(\autoref{sec:firstexample}) erklärt. Dafür ist ein wenig Wissen über +|\leftskip|, |\rightskip| usw. notwendig. Und eine Ausarbeitung , deren +Code kann man hier (\autoref{ssec:tocwithdepthtags}) finden, die Nachahmung des +Standardaussehens einer Inhaltsangabe. + +Wie Sie beim Lesen dieser Anleitung noch sehen werden, ist \etoc +ziemlich vielfältig (ganz besonders, weil es erlaubt, die Hierarchie jeder +unterteilenden Einheit des Dokuments zu re-definieren) und man kann damit +überraschende Effekte erreichen: \autoref{part:surprising} handelt davon. Mehr +davon gibt es noch in \autoref{part:tipsandtricks}. + +\begin{framed} +\setcounter{mycounti}{0}% + \etocinline +\etocsetlevel{part}{1} +\etocsetlevel{chapter}{1} +\etocsetlevel{visibletoc}{0} +\etocsetstyle{visibletoc} + {} + {\stepcounter{mycounti}} + {} + {} +\etocsettocstyle{}{} +\etocsetnexttocdepth{0} +\tableofcontents +Ein ganz besonders wichtiger Aspekt von \etoc ist, dass es darauf ausgelegt ist, +viele Inhaltsangaben in dem selben Dokument zu erzeugen, \emph{Mit nur einer + |.toc|-Datei.} Die gegenwärtige Dokumentation enthält \arabic{mycounti} +sichtbare Inhaltsangaben (und ein paar unsichtbare). Sie benutzt dabei nur eine +|.toc|-Datei!\footnotemark{} Darum sollte man zweimal nachdenken, bevor man +manuell extra Befehle zu der |.toc|-Datei hinzufügt (siehe +\autoref{sec:addingtotoc}). +\end{framed} + +\footnotetext{Das Selbstzählen wurde durch eine Inhaltsangabe erreicht, die +in einen gerahmten Paragraphen eingesetzt wurde! \dots Die Technik für diese Art +von Effekt wird später erklärt.} + + +\subsection{Beschränkungen in der Benutzung von Listen-Umgebungen für +Inhalsangaben} +\label{ssec:limitations} + +Es gibt ein paar Einschränkungen für das Nutzen von Listen-Umgebungen +beim Setzen der TOCs. Eine davon liegt dem +Geltungsbereichsbeschränkungen der Umgebungen inne. Die |.toc|-Datei +könnte neben den Informationen zum Stil einige andere Befehle +beinhalten, die Probleme hervorrufen können +(\LaTeX -Umgebungen schaffen Gruppen.). + +Darum machen die eingebauten "`Zeilenstile"' (line styles), wie sie von \etoc +vorgeschlagen werden (die durch die \hyperref[toc:main]{Hauptinhaltsangabe} in +diesem Dokument gezeigt werden) keinen Gebrauch von Umgebungen. Tatsächlich +nutzt in dieser Gebrauchsanweisung nur die \hyperref[toc:a]{Inhaltsangabe} zu +Beginn von \autoref{part:linestyles} und in \autoref{toc:allsubsections} +e\texttt{numerate}-Umgebungen, um Zeilenstile anzugeben. + +\section{Zeilenstile und Stile der Inhaltsangabe (toc display style)} + +Eine Unterscheidung muss zwischen den \emph{Zeilenstilen}, +\emph{z.\,B.} der Art und Weise wie Namen, Kapitelnummern und +Seitenzahlen auf jedem Level angezeigt werden und dem +\emph{Inhaltsangabenstil} (mangels einer besseren Bezeichnung) +gemacht werden. Dieser sagt, wie die Titel gesetzt werden sollen, +ob oder nicht ein Eintrag in die |.toc|-Datei gemacht werden soll, +ob oder nicht der Inhalt mit mehreren Spalten gesetzt werden soll, +usw..., der letztere wird von \csa{etocsettocstyle} (oder einem +höherrangigen Befehl) geregelt. Das erste wird von +\csa{etocsetstyle} initialisiert. + +\subsection{\csbhyp{etocsetstyle} für den Zeilenstil} + +Das ist der Befehl, der \etoc sagt, was es mit \csa{etocname}, \csa{etocnumber}, +und \csa{etocpage} machen soll. Er hat fünf Pflichtargumente: Das erste ist der +Name der unterteilenden Einheit: Im Vorhinein bekannte Namen sind |book|, +|part|, |chapter|, |section|, |subsection|, |subsubsection|, |paragraph|, +|subparagraph| und viele weitere können anhand dem \csb{etocsetlevel}-Befehl +einem (numerischen) Level zugewiesen werden.\footnote{Mit der + \texttt{memoir}-Dokumentklasse kennt \etoc \texttt{Appendix} als + Kapitelüberschrift.} + + +%% Änderungen zur Übersetzung ins Deutsche: +%% jf b has added here forgotten emphasized text for 2)&3) and +%% removed various \newline. +Die vier anderen Argumente von \csb{etocsetstyle} +spezifizieren: +1) \emph{Was zu tun ist, wenn dieses Level zuerst nach einem höheren + auftritt,} +2) \& 3) (Zwei Argumente, ein 'Präfix' und ein 'Inhalt') +\emph{Was zu tun ist, wenn ein neuer Eintrag dieses Typs gefunden wird,} +und 4) \emph{Das letzte Argument ist der Code, der ausgeführt + wird, wenn eine unterteilende Einheit von höherer Wichtigkeit wieder von oben + getroffen wird.} + + +\subsection{\csbhyp{etocsettocstyle} für den Stil der Inhaltsangabe} + +Der \csb{etocsettocstyle}-Befehl erlaubt es festzulegen, +was vor und nach den Zeileneinträgen eines Inhaltsverzeichnis +passieren soll, und im Speziellen wie die Titel ausgegeben +werden sollen. Er hat zwei Argumente. Das erste wird vor +der Inhaltsangabe ausgeführt (typischerweise wird es Inhalte +ausgeben und definiert passende Markierungen für die +Seitenüberschriften). Der Zweite wird nach der Inhaltsangabe +ausgeführt. + +\etoc bietet vier (anpassbare) höhere Inhaltsabgabenstile: +\csb{etocmulticolstyle}, \csb{etoctocstyle}, +\csb{etocruledstyle} und \csb{etocframedstyle}. +Alle nutzen das |multicol|-Paket mit standardmäßig zwei +Spalten (Einspaltenmodus kann durch das optionale Argument + |[1]| erreicht werden). + +Diese Befehle müssen entweder von \toc oder \localtoc gefolgt sein. + +\subsection{Kompatibilismus}\label{ssub:compat} +\label{etoctoclines} +\label{etocstandardlines} + +Vor den "`Zeilenstilen"' und den "`Inhaltsangabenstilen"' besteht +die Möglichkeit in den Kompabilitätsmodus zu wechseln, der die +Standardeinstellungen der Dokumentenklasse nimmt. +\footnote{Für den "`Inhaltsangabenstil"' überprüft \etoc, ob +es die Klassen kennt, wenn nicht, fällt es zur |article|-Klasse +zurück. Es wird auch überprüfen, ob \texttt{tocloft} die +Inhaltsangaben-Datei verändert hat.} +Dieses wir wie folgt aktiviert:\\ +\makebox[5.2cm][l]{\csb{etocstandardlines}} + |% `Zeileneinträge' wie ohne \usepackage{etoc}|\\ +\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}} + |% `Inhaltsstil' wie ohne \usepackage{etoc}| + +Wenn der Befehl \csa{etocsetstyle} \emph{noch nicht in der Präambel benutzt +worden ist}, wird das Paket in |\begin{document}| sitzen (in diesem +Kompatibilismus). Folglich sollte \csa{usepackage\{etoc\}} hoffentlich +nichts am Aussehen eines im Vorhinein vorhandenen Dokuments der Klassen +|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir| +ändern. + +Jede Benutzung von \csa{etocsetstyle} in der \emph(Präambel des Textkörpers) des +Dokuments schaltet den Kompabilitäsmodus für Zeilenstile aus, behält ihn aber +für den Inhaltsabgabenstil. + +Man kann ihn für Zeilenstile anhand von \csb{etocstandardlines} +wieder aktivieren. \csb{etoctoclines} reaktiviert Zeilenstile wie +Sie mit der Hilfe von \csa{etocsetstyle} definiert wurden, wenn deren +Gültigkeitsbereich nicht auf eine Gruppe oder eine Umgebung beschränkt +war. + +Der Befehl \csb{etocdefaultlines} setzt den Zeilenstil darauf zurück, +wie er intern von \etoc in \autoref{etocdefaultlines} beschrieben wurde. + +Sogar wenn \csb{etocsetstyle} benutzt wurde, bleibt der globale Stil +zu Beginn, wie er in der Dokumentenklasse definiert wurde (oder von dem +|tocloft| Paket). Man muss den Befehl \csb{etocsettocstyle} oder seine +Varianten setzen, um diesem Kompatibilitätsmodus auf dem +"`Inhaltsangebenstil"'-Level zu beenden. Er wird reaktiviert, +wenn \csb{etocstandarddisplaystyle} benutzt wird. + +\section{Ein erstes Beispiel} +\label{sec:firstexample} + +Hier sehen sie ein erstes Beispiel zur Beschreibung der Zeilenform. +Wir fügen die Quelldatei direkt nach dem Start von \autoref{part:overview} ein: + +\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|} +% +Dieses erstellt ein Label |toc:overview|, das wir von jeder Stelle im Dokument +benutzen können: +% +\centeredline{|\tableofcontents \ref{toc:overview}|} +% +Und da wir |\invisible...|,\footnote{Das ist eine Abkürzung, um die |tocdepth| + temporär auf |-3| zu setzen. Dieses sagt \etoc, die Inhaltsangabe und die + Überschrift nicht auszugeben.} benutzt haben, existiert die lokale +Inhaltsangabe nur durch seine Klone anderswo im Dokument. + +Anhand von \csb{etocdefaultlines} oder dem Stil der Standard-Dokumentklasse, +anhand von \csb{etocstandardlines}, könnten wir auch die Zeilenform benutzen, +die von \etoc definiert wird. Hier waren wir jedoch ein wenig ehrgeiziger und +wollten unser eigenen Stil anlegen. Die Technik ist einfach: Jede Überschrift +ist an sich ein eigener Paragraph, der sich über mehrere Zeilen erstrecken kann; +es ist für seinen |\leftskip| selbst verantwortlich. + +\begingroup +\parindent 0pt +\parfillskip 0pt +\leftskip 0cm +\rightskip 1cm +\etocsetstyle {section} + {} + {\leavevmode\leftskip 0cm\relax} + {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip .5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 1.5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocruledstyle[1]{\bfseries \Large Mein erstes \etoc: TOC von + \autoref{part:overview} (\nameref{part:overview})} +\tableofcontents \ref {toc:overview} +\endgroup + +Dieses ist ein einfaches Design, das keine Maßnahmen zum Zeilenumbruch +bereitstellt. Diese sollten zwischen Abschnitten und Unterabschnitten, etc. +unterbunden werden, da wir es nur für die Inhaltsangabe von diesem Abschnitt +nutzen. Durch die Abschnitte als höchste Ebene entstand keine Notwendigkeit, +einen Stil für den ganze Teil zu erstellen. (Wir definierten einen +Unterabschnitt-Zeilenstil, aber wie sich herausstellt, gibt es keine +Unterabschnitte in diesem Teil). Die zwei Befehle, die benutzt wurden, +spezifizieren den Zeilen-Stil (\csb{etocsetstyle}) und den globalen +Inhaltsausgabestil (\csb{etocruledstyle}). + +Das |\rightskip| wird von allen angewandt und schafft Platz, wo die Seitenzahlen +gedruckt werden. Einzelheiten dieser Technik werden in dem +\autoref{sec:secondexample} und \autoref{ssec:tocwithdepthtags} benutzt. Hier +wird eine Inhaltsangabe mit Abschnitten und Paragraphen verwendet. Beide +erlauben mehrzeilige Überschriften und nutzen einer Technik, die Seitenzahlen +mit dem richtigen Seitenabstand auszugeben. Dieses wurde von der Funktionsweise +von Makros aus \LaTeX2e's |\@dottedtocline| inspiriert. + +\begin{verbatim} +\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm +\etocsetstyle {section} + {} + {\leavevmode\leftskip 0cm\relax} + {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip .5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 1.5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC von + \autoref{part:overview} (\nameref{part:overview})} +\tableofcontents \ref {toc:overview} +\endgroup +\end{verbatim} + +\section{Ein zweites Beispiel} +\label{sec:secondexample} + +Dieses zweite Beispiel zeigt nur den Inhalt von \autoref{part:linestyles} und +\autoref{part:globalcmds}. Diese Auswahl wird durch die Technik von \emph{depth + tags} realisiert, die in \autoref{etocsettagdepth} und +\autoref{ssec:tocwithdepthtags} beschrieben wird. Dessen Layout ist in etwa wie +das von der \hyperref[toc:main]{Hauptinhaltsangabe}, obwohl die Zeilenstile ganz +anders programmiert sind. + +\begingroup +\newcommand*{\DotsAndPage} +{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% + \hfill\nobreak + \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} + +\etocsetstyle {part} +{\parindent 0pt + \nobreak + \etocskipfirstprefix} +{\pagebreak[3]\bigskip} +{\large\rmfamily\bfseries\scshape\centering + \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} +{} + +\etocsetstyle {section} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \nobreak\medskip + \etocskipfirstprefix} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \pagebreak[1]\smallskip} +{\normalsize\rmfamily\bfseries\scshape + \etocnumber. \etocname\DotsAndPage } +{\parfillskip 0pt plus 1fil\relax } + +\etocsetstyle {subsection} +{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax + \nobreak\smallskip} +{} +{\footnotesize\sffamily\mdseries\itshape + \etocname{} (\etocnumber, p. \etocpage). } +{\par\medskip} + +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {none} +\etocsettagdepth {arbitrarily}{none} +\etocsettagdepth {surprising} {none} +\etocsettagdepth {linestyles} {subsection} +\etocsettagdepth {globalcmds} {subsection} +\etocsettagdepth {custom} {none} +\etocsettagdepth {tips} {none} +\etocsettagdepth {code} {none} + +\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup + +Der Code: +\begin{verbatim} +\begingroup +\newcommand*{\DotsAndPage} +{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% + \hfill\nobreak + \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} + +\etocsetstyle {part} +{\parindent 0pt + \nobreak + \etocskipfirstprefix} +{\pagebreak[3]\bigskip} +{\large\rmfamily\bfseries\scshape\centering + \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} +{} + +\etocsetstyle {section} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \nobreak\medskip + \etocskipfirstprefix} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \pagebreak[1]\smallskip} +{\normalsize\rmfamily\bfseries\scshape + \etocnumber. \etocname\DotsAndPage } +{\parfillskip 0pt plus 1fil\relax } + +\etocsetstyle {subsection} +{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax + \nobreak\smallskip} +{} +{\footnotesize\sffamily\mdseries\itshape + \etocname{} (\etocnumber, p. \etocpage). } +{\par\medskip} + +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {none} +\etocsettagdepth {arbitrarily}{none} +\etocsettagdepth {surprising} {none} +\etocsettagdepth {linestyles} {subsection} +\etocsettagdepth {globalcmds} {subsection} +\etocsettagdepth {custom} {none} +\etocsettagdepth {tips} {none} +\etocsettagdepth {code} {none} + +\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup +\end{verbatim} + +\section{Verlinkte Liste der Hauptbefehle} +% 16 octobre + +\begingroup\raggedcolumns +\advance\linewidth18pt +\begin{multicols}{3}\parindent0pt\relax + \csb{etocaftercontentshook}\par + \csb{etocaftertitlehook}\par + \csb{etocaftertochook}\par + \csb{etocbeforetitlehook}\par + \csb{etocdefaultlines}\par + \csb{etocdepthtag.toc}\par + \csb{etocdisplay}\par + \csb{etocframedstyle}\par + \csb{etocframed}\par + \csb{etociffirst}\par + \csb{etocifnumbered}\par + \csb{etocignoredepthtags}\par + \csb{etocignoretoctocdepth}\par + \csb{etocinline}\par + \csb{etoclink}\par + \csb{etoclocalframed}\par + \csb{etoclocalmulticol}\par + \csb{etoclocalruled}\par + \csb{etocmulticolstyle}\par + \csb{etocmulticol}\par + \csb{etocname}\par + \csb{etocnumber}\par + \csb{etocobeydepthtags}\par + \csb{etocobeytoctocdepth}\par + \csb{etocpage}\par + \csb{etocruledstyle}\par + \csb{etocruled}\par + \csb{etocsetlevel}\par + \csb{etocsetnexttocdepth}\par + \csb{etocsetstyle}\par + \csb{etocsettagdepth}\par + \csb{etocsettocdepth.toc}\par + \csb{etocsettocdepth}\par + \csb{etocsettocstyle}\par + \csb{etocskipfirstprefix}\par + \csb{etocstandarddisplaystyle}\par + \csb{etocstandardlines}\par + \csb{etocthelinkedname}\par + \csb{etocthelinkednumber}\par + \csb{etocthelinkedpage}\par + \csb{etocthelink}\par + \csb{etocthename}\par + \csb{etocthenumber}\par + \csb{etocthepage}\par + \csb{etoctoccontentsline}\par + \csb{etoctoclines}\par +%\vspace{5\baselineskip}\hrule height 0pt +\end{multicols} +\endgroup + + +\clearpage +% 15 octobre, je teste les tags +\etocdepthtag.toc {arbitrarily} + +\part{Beliebig viele TOCs und lokale Versionen davon} +% 13 octobre, ceci était une section avant + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents + +\section{Beschriften und anderswo wieder benutzen} + +\etoc erlaubt beliebig viele \csa{tableofcontents}-Befehle in +ihrem Dokument. Die Zeilen- und Inhaltsangabenstile können +natürlich dazwischen geändert werden. Außerdem setzt +\csa{localtableofcontents} lokale Inhaltsangaben: \emph{z.\,B.} alle +Abschnitte und Unterabschnitte innerhalb eines bestimmten +Kapitels oder alle Unterabschnitte und tiefer innerhalb eines gegebenen +Unterabschnitt usw. + +\etoc erlaubt das Labeln von Inhaltsangaben, beispielsweise mit +\csa{label\{toc:A\}}, und wird es woanders +\csa{tableofcontents}\csa{ref\{toc:A\}}, wenn gewollt, wieder anzeigen. Das +eigentliche Layout (inklusive Titel) wird lokal bestimmt. Die Zeilen- und +Inhaltsangabenstile (inklusive Titel) sind die aktuellen und der Wert von +|tocdepth| leistet Folge. Hier ein Beispiel: Die Inhaltsangabe von +\autoref{part:custom} ist innerhalb eines \hyperref[toc:d]{float}, der auf +dieser Seite erscheint: \vpageref{toc:d}. +\begin{figure}[ht!] + \centering + \begingroup + \etocstandardlines + \renewcommand{\etocbkgcolorcmd}{\color{green!5}} + \renewcommand{\etocbelowtocskip}{0pt\relax} + \fboxsep1ex + \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone + \hyperref[toc:c]{Ich bin von weit her}}}} + \tableofcontents \label{toc:d} \ref{toc:c} + \endgroup +\end{figure} + +Wir benutzen dies: +\begin{verbatim} +\begin{figure}[ht!] + \centering + \begingroup + \etocstandardlines + \renewcommand{\etocbkgcolorcmd}{\color{green!5}} + \renewcommand{\etocbelowtocskip}{0pt\relax} + \fboxsep1ex + \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone + \hyperref[toc:c]{I am from far away}}}} + \tableofcontents \label{toc:d} \ref{toc:c} + \endgroup +\end{figure} +\end{verbatim} +Wichtig: Man sollte \toc|\ref{toc:d}| nicht woanders benutzen. Um wieder zu +Klonen, muss man eine Refernz zum Original-Label benutzen: \toc|\ref{toc:c}|. + +\section{Eine mächtige Funktionsweise von \etoc: Die Wieder\-zuweisung von +Levels mit von \csbhyp{etocsetlevel}} + +Die intrinsischen Level, die durch \etoc manipuliert wurden, sind numerisch: von +|-2| (welches |book| aus der |memoir|-Klasse entspricht) bis hinab zu |5| +(|subparagraph|). Jedoch kann die Zuweisung eines numerischen Level zu einem +gegebenen Namen zu jeder Zeit mit de Befehl +\csb{etocsetlevel}\marg{level\_name}\marg{number} abgeändert werden. Daraus und +aus der Benutzung des \LaTeX -|tocdepth|-Zählers resultieren mächtige +Anwendungszwecke: \meta{level\_name} muss sich nicht mit dem eigentlichen +Unterteilungsbefehls des Dokuments überschneiden. Außerdem kann \etoc genutzt +werden, um beliebige "`Listen von Dingen"' ohne weitere Hilfsdateien, außer der +|.toc|-Datei, zu erstellen. Dieses wird in \autoref{part:surprising} weiter +erklärt. + +\begin{framed} + Es wird oft gesagt, dass Unterteilungslevel von |\part| in den + Standardklassen, die keinen |\chapter|-Befehl haben, gleich |0| sind, und in + denen mit |\chapter|-Befehl gleich |-1| ist. Das ist auch \emph{richtig}, wenn + man die \emph{automatische Nummerierung}, gesteuert durch den Wert des + |secnumdepth|-Zählers, betrachtet. Aber es ist \emph{falsch}, wenn man den + Effekt des |tocdepth|-Zählers sieht. Setzt man |tocdepth| in der |article| + -Klasse direkt vor |\tableofcontents| auf |-1|, verhindert das \emph{nicht}, + dass Abschnitte in der Inhaltsangabe aufzutauchen. Man muss es dafür auf |-2| + stellen, ganz egal ob in der |article|- oder der |book|-Klasse. + + Die kanonischen Level, grundsätzlich bekannt aus \etoc, sind + von Relevanz für den \textbf{|tocdepth|}-Zähler in den Standardklassen + und werden in der folgenden Tabelle rekapituliert: + + \centeredline{ + \fbox{\begin{tabular}{rc} + (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\ + section&1\\ subsection&2 \\ + subsubsection&3 \\ paragraph&4 \\ subparagraph& 5 + \end{tabular}}} + +\smallskip Mit \etoc kann der Nutzer innerhalb einem gegebenen Unterabschnitt +einfach lokale Inhaltsangaben ausgeben. Darin werden, wenn gewollt, +Unterabschnitte in dem Stil von Abschnitten, Paragraphen in dem Stil von +Unterabschnitten und Unterparagraphen im Stil von Unter-Unterabschnitten +gedruckt. Demnach kann man entscheiden alles auf das Level |6| zu setzen (wird +von \etoc nie angezeigt), außer z.\,B. Paragraphen, die auf Level |1| befördert +werden. So erstellt man eine schöne Inhaltsangabe aller Paragraphen eines +Dokuments. (|tocdepth| mindestens |1|)\footnotemark +\end{framed} + +\footnotetext{Normalerweise sollte man diese Inhaltsangabe der Paragraphen +nicht im Kompabtibilitätsmodus ausgeben. Der würde darauf bestehen, einen +gigantischen Abstand nach rechts einzufügen.} + +\section{Die \csbhyp{etoc\-set\-toc\-depth}- und + \csbhyp{etoc\-set\-next\-toc\-depth}-Befehle} +\label{etocsettocdepth} +\label{etocsetnexttocdepth} + +Der |tocdepth|-Zähler hat keinen Einfluss darauf, was in die |.toc|-Datei +geschrieben wird; dessen Einfluss ist ausschließlich auf das Setzen der +Inhaltsangabe gerichtet. In der Standardklasse ist nur ein |\tableofcontents| +möglich, wobei mit \etoc beliebig viele erlaubt sind. Dadurch könnte man +|tocdepth| immer und immer wieder auf einen passenden Wert ändern (der +entscheidet, wie tief die Abschnitte angezeigt werden sollen) bis die +Inhaltsangabe gesetzt werden muss. + +\etoc bietet \csb {etocsettocdepth}\marg{level} an, wessen verpflichtendes +Argument entweder (von |-3| bis |5|) oder einen Unterteilungstyp wie +|subsection| oder |subsubsection| oder alle anderen, die davor in \etoc mit +\csb{etocsetlevel} (die Schlüsselworte |all| und |none| erkannt werden, +allerdings nicht in Zusammenhang mit der Dokumentenunterteilung) deklariert +wurden. Das tut das passende |\setcounter{tocdepth}{numeric_level}|. + +Wie in dem nächsten Unterabschnitt erklärt wird, wird |tocdepth| von |hyperref| +benutzt. Man muss die folgenden Schritte befolgen, um den Einfluss von +|hyperref|`s Änderungen auf die Lesezeichen zu verhindern. \etoc hat \csb +{etocsetnexttocdepth}\marg{level}. Dessen Einfluss endet direkt nach der +nächsten Inhaltsangabe. Daraus folgt, dass +\texttt{\textbackslash\foreignlanguage{english}{invisibletableofcontents}} +essenziell für |\etocsetnexttocdepth{none}\tableofcontents| ist. + +Der einfachste Weg ist also, eine einfache Instanz des +\csb{etocsettocdepth}-Befehl nach |\begin{document}| und vor dem ersten + |\tableofcontents| mit dem tiefsten Level als Argument zu setzen. -- Dieses + dann lokal zu benutzen, wo es gebraucht wird, anhand von + \csb{etocsetnexttocdepth} vor |\tableofcontents| oder |\localtableofcontents|. + +\subsection{Die hyperref-Option \emph{bookmarksdepth}} +\label{ssec:bookmarksdepth} + +Wenn man den Zähler |tocdepth| verändert, um \toc oder \localtoc +mehrfach zu benutzen, sollte man gewahr sein, dass das Paket +|hyperref| standardmäßig den Wert des \emph{aktuellen} Wertes +der |tocdepth|-Zählers berücksichtigt, um zu entscheiden, ob die |pdf|-Datei +Lesezeichen, korrespondierend mit den Unterteilungsbefehlen, die in der +Quelldatei vorgefunden wurde, anzeigt. Dadurch muss man typischer Weise +den |tocdepth|-Zähler auf seinen vorigen Wert zurücksetzen, nachdem man +ihn temporär für eine gegebene Inhaltsangabe modifiziert hat. + +Alternativ gibt es die \emph{bookmarksdepth=n}-Option des |hyperref|-Pakets. +Dabei ist \emph{n} die gewünschte maximale Lesezeichen-Tiefe. Diese kann +numerisch sein oder der Name eines Levels, das |hyperref| bekannt ist. + +Wir sind in dieser Dokumentation schon an |bookmarksdepth=3| vorbeigekommen. Es +war eine Option von |hyperref|. Auch wenn |tocdepth| nach dem Ausgeben einer +Inhaltsangabe aus Nachlässigkeit auf |1| stehen gelassen wurde, so wurden der +Lesezeichenbaum der |pdf|-Datei nicht verändert. Da \csb{etocsetnexttocdepth} +jetzt zu dem Paket hinzugefügt wurde, ist keine Verwendung mehr für +|bookmarksdepth=3|. + +\section{Der Befehl \csbhyp{etoc\-set\-toc\-dep\-th.toc}} +\label{etocsettocdepth.toc} + +Dieser Befehl \csb{etocsettocdepth.toc} implementiert einige Funktionalitäten +von Paket |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. Ich danke D.B. + meine Aufmerksamkeit auf die Inkompatibilität dieses Pakets mit \etoc + gerichtet zu haben.}. Dieses Paket war inkompatibel mit \etoc. Es kann nun +noch für seine mit |secnumdepth| in Verbindung stehenden Befehle genutzt werden, +alle mit |toc| in Verbindung stehenden Aktivitäten werden jedoch durch \etoc +abgebrochen. + +Das Handeln von \csb{etocsettocdepth.toc} ist grundlegend verschieden zu +\csb{etocsettocdepth}. Anstatt den |tocdepth|-Zähler direkt zu verändern, +fügt es der |.toc|-Datei eine Linie an, die, wenn ausgeführt, in einer +Inhaltsangabe diese Veränderung ausführen wird. + +Der Befehl \csb{etocsettocdepth.toc} akzeptiert, wie +\csb{etocsettocdepth}, Namen und numerische Argumente. +In dem Fall eines Namen als Argument ist der tatsächliche numerische +Wert noch nicht festgelegt, wenn |.toc|-Datei erstellt wird. Es wird +der Wert sein, der aktuell für das benannte Level der Inhaltsangabe +(ohne |\etocignoretoctocdepth| gemacht zu haben) bei +jeder Erstellung einer Inhaltsangabe spezifiziert wird. + +Der |tocdepth|-Zähler wird niemals auf einen Wert gesetzt, der feiner +als der ist, mit dem er zu Beginn der Inhaltsangabe initialisiert wurde. +Also ist das Hinzufügen von \csb{etocsettocdepth.toc} im Dokument ein Weg +die Tiefe einer lokalen Inhaltsangabe einzugrenzen. Zum Beispiel, +um die Einfügung von Unter-unter-Abschnitten oder eines gegebenen +Kapitels zu unterbinden. + + +Dieses +{\fbox{wird in allen Inhaltsangaben ausgeführt.}} + +\subsection{Die Befehle \csbhyp{etocobeytoctocdepth} und \csbhyp{etocignoretoctocdepth}} +\label{etocobeytoctocdepth} +\label{etocignoretoctocdepth} + + +Also wird \csb{etocignoretoctocdepth} gesetzt, um den +\csa{etocsettocdepth.toc}-Mecha\-nismus abzubrechen, wenn +benötigt; und \csb{etocobeytoctocdepth} wird es +reaktivieren. Das Paket führt \csb{etocobeytoctocdepth} zu Beginn aus. + + +\section{Die Befehle \csbhyp{etoc\-depth\-tag.toc} und \csbhyp{etocsettagdepth}} +\label{etocdepthtag.toc} +\label{etocsettagdepth} + +Wie oben erwähnt, wenn das Argument für \csb{etocsettocdepth.toc} kein +numerisches sondern ein Namen-Level ist, wird durch die tatsächliche Nummer bei +der Erstellung der Inhaltsangabe entschieden. Dadurch und anhand der +\emph{Schiebe-Mechanismen von \etoc} kann man einen sehr flexiblen Aufbau +erreichen: Man erklärt mit \csb{etocsetlevel} zuerst ein paar Platzhaltelevel, +z.\,B. |partIII|, und weist ihm das unsichtbare Level |6| zu. Dann, vor dem +dritten |\part| Befehl, fügt man \csb{etocsettocdepth.toc}|{partIII}| ein. An +dem Ort, an dem der Effekt enden soll, setzt man +\csb{etocsettocdepth.toc}|{all}| ein. Es ist nun möglich, jedes Mal, wenn man +eine Inhaltsangabe setzen will, das feinste Level der Einträge aus dem dritten +Teil zu spezifizieren. Man muss z.\,B. nur \csa{etocsetlevel}|{partIII}{1}| +schreiben. Es wird die Abschnitte limitieren (sofern |tocdepth| mindestens auf +diesem Level war, wenn die Inhaltsangabe ausgegeben wurde). + +Die Methode hat ein paar Beschränkungen: +\begin{enumerate*}[label={(\roman*)}] + \item Das zweite Argument von \csb{etocsetlevel} muss numerisch sein; + \item es kann nicht auf |-3| gesetzt werden (was nötig wäre, wenn man ganze + Bücher aus der Inhaltsangabe streichen wöllte in den Klasse |memoir|); + \item es ist ein bisschen getrickst, seit |partIII| kein richtiger unterteilender + Abschnitt ist sondern nur ein \emph{tag}. +\end{enumerate*} + +Version |1.07h| enthält den Befehl \csb{etocdepthtag.toc}, der +es einfacher macht, diese variable lokale Kontrolle des |tocdepth| zu erreichen, +wenn die Inhaltsangabe erstellt wird. + + +Es wird als \csb{etocdepthtag.toc}\marg{tag\_name} genutzt, wo der +\meta{tag\_name} irgendetwas ist, das wird den Tag in die |.toc|-Datei setzen. +Wenn die Inhaltsangabe erstellt wird, initiiert das eine Reihe von Befehlen +\csb{etocsettagdepth}\marg{tag\_name}\marg{level}, wo das \meta{level} entweder +numerisch (von |-3| bis |5|) oder ein Name einer unterteilenden Einheit, die +\etoc bekannt ist, oder |none| oder |all|. Der Effekt von den Tags innerhalb der +|.toc|-Datei ist es, den |tocdepth|-Zählers auf den gewünschten Wert zu setzen +(das kann wie schon erwähnt, nicht feiner sein als der initiale Wert des +|tocdepth|-Zählers). + +Die hinzugefügte Flexibilität wirkt sich insofern aus, dass \csb{etocsetlevel} +nicht mehr mit dieser getricksten Methode, bei der man Level-Tiefen und |none| +und |all| benutzt hat. + +Wie immer, wenn die Tag-Tiefen gesetzt wurden, bleiben sie wirkend, bis sie +wieder definiert werden oder ihr Wirkungsgebiet beendet wird, indem die +umschließende Gruppe geschlossen wird. Für ein Beispiel, siehe hier: +\autoref{ssec:tocwithdepthtags}. + + +\subsection{Die Befehle \csbhyp{etocobeydepthtags} und \csbhyp{etocignoredepthtags}} +\label{etocobeydepthtags} +\label{etocignoredepthtags} + + +Nach \csb{etocignoredepthtags} werden die |.toc|-Tiefentags ignoriert +(nach \csb{etocdepthtag.toc} funktionieren sie jedoch noch). Das Paket +führt zu Beginn \csb{etocobeydepthtags} aus. Dieses befielt \etoc auf die +gefundenen Tags in der |.toc|-Datei zu reagieren. + +\section{Befehle zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei hinzufügen} +\label{sec:addingtotoc} + +Wir beschrieben oben die Befehle \csb{etocsettocdepth.toc} und +\csb{etocdepthtag.toc}, welche beide Befehle in die |.toc|-Datei einfügen. Ein +noch allgemeinerer Weg, um "`action tags"' in die |.toc|-Datei einzufügen, wäre +vorstellbar, allerdings würde auch nur indirekt +|\addtocontents{toc}{\something}| benutzt werden. + +Man sollte vorsichtig sein, wenn man auf diesem Weg Dinge zur |.toc|-Datei +hinzufügt. Zum Beispiel das Einfügen von +\csa{addtocontents}|{toc}{\string\clearpage}| direkt vor einem \csa{part} behebt +den Fehler, dass Teileinträge in Inhaltsangaben vom Rest getrennt am Ende der +Seite auftauchen, kann aber auch Probleme mit mehreren Inhaltsangaben haben: +\csa{clearpage} wird jedes Mal ausgeführt, wenn \etoc über ein \toc oder +\localtoc stolpert. Die schlauere Methode wäre es: +{\csa{addtocontents}|{toc}{\string\myclearpage}|,} den |\let\myclearpage\relax|, +man hätte den Befehl |\let\myclearpage\relax| zu Beginn des Dokuments und wenn +benötigt, benutzt man etwas wie: +\begin{verbatim} +\let\myclearpage\clearpage +\tableofcontents +\let\myclearpage\relax +\end{verbatim} +Die |memoir|-Klasse besitzt den Befehl \csa{settocdepth}, der einen +\csa{changetoc\-depth}-Befehl in die |.toc|-Datei setzt. Dieses +beeinflusst die Schriftsetzung von \etoc bei \emph{allen} Inhaltsangaben mit +möglichen unvorhersehbaren Ergebnissen: Stellen Sie sich vor, irgendwo im Dokument +stünde \csa{settocdepth}|{chapter}|, um die Abschnitte von Unterabschnitten +nicht in der Hauptinhaltsangabe aufzulisten. In diesem Fall würde eine +lokale Inhaltsangabe in einem dieser Kapitel einen Titel ohne jeden Eintrag ausgeben. + +Da die |memoir|-Klasse von Haus aus schon mehrfache \toc erlaubt, tritt dieser +Fehler schon viel früher, und unabhängig von \etoc, auf. Siehe Seite 170 der +|memoir|-Anleitung. + +Für diesen Spezialfall gibt es folgende Befehle: \csb{etocsettocdepth.toc}, +\csb{etocignoretoctocdepth}, \csb{etocobeytoctocdepth} oder deren +Varianten \csb{etocdepthtag.toc} und \csb{etocsettagdepth}. + +Nebenbei, jeder |\setcounter{tocdepth}{n}|-Befehl fügt direkt in die +|.toc|-Datei hinzu. Es scheint so, dass seine Wirkung ist (seit der Version +|1.07g|), beendet den Abschluss jedes Inhaltsverzeichnis zu beenden, automatisch +wird ein |\setcounter{tocdepth}{previous_value}| genommen, mit dem Wert, aktiv +ein Inhaltsverzeichnis zu nehmen. + +\subsection{Die hyperref-Option \emph{hidelinks}}\label{ssec:hidelinks} + +Die farbigen Links (und auch die Kastenlinks) sind einwenig ärgerlich, wenn in +Inhaltsverzeichnissen verwendet, insbesonders, wenn das Dokument \etoc verwendet +und viele von ihnen beinhaltet! Man kann sich wünschen, farbige Links +\emph{ausschließlich} für Inhaltsverzeichnisse! In der Tat, warum sollten in +TOCs diese Dinge gerahmt oder farbig sein müssen, wenn der Benutzer +\emph{bereits erwartet, dass dort Links sind}? + +Ich nehme den folgenden Trick: Entweder in der Präambel zu nehmen +|\AtBeginDocument| oder danach |\begin{document}|, ich habe den Befehl \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|} + + \begin{framed} + Alle TOCs, die von \etoc gesetzt sind, haben ihre Inhalte in eine + Gruppierung getan, (wie in einer Umgebung eingeschlossen). So wird der + Befehl \csa{hypersetup}|{hidelinks}| ausgeführt von \emph{jedem} TOC, aber + sein Effekt wird limitiert zu dem TOC. + \end{framed} + +Experimentell habe ich herausgefunden, dass die Option |hidelinks| oftmals mit +|\hypersetup| eingestellt werden kann (Dies ist nicht bei allen +|hyperref|-Optionen der Fall). + + + +\section{Zwei Beispiele} + +\subsection{Eine wunderschöne Beispielthese} + +Hier ist noch ein relativ einfaches Beispiel für die Verwendung der +Paket-Funktionsweisen. Lassen Sie uns einige Linienstile einrichten. Wir wählen +einen Stil für Abschnitte und Unterabschnitte, welche für die Abschnitte und +Unterabschnitte in einem durchschnittlichen Memoirenumfang geeignet wären. Die +Linienstilspezifikationen haben eine gewisse Redundanz für die Klarheit, und sie +interessieren sich nicht dafür, was bei möglichen Seitenumbrüchen zu tun ist. +Auch sind sie nicht besorgt über die potentielle mehrspaltige Nutzung. + +\begin{verbatim} +\begingroup % wir starten, um eine Gruppe zu behalten +\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm} +\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm} + +\etocsetstyle{section} % wird vorgegeben, ein Kapitel zu sein +{\addvspace{1ex}\parfillskip0pt + \leftskip\tocleftmargin % (bereits im Titel getan) + \rightskip\the\tocrightmargin plus 1fil + \parindent0pt\color{cyan}} % (bereits getan) +{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} +{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\etocsetstyle{subsection} % wird vorgegeben, ein Abschnitt zu sein +{} +{\mdseries\large\addvspace{.5ex}\leavevmode} +{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\def\tmptitle{My Beautiful Thesis} +\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin + \leavevmode\leaders\hrule height 1pt\hfill\ + \huge\textit{\tmptitle}\par}{\bigskip} + +\tableofcontents \ref{toc:overview} +\endgroup +\end{verbatim} + +\begingroup +\newlength{\tocleftmargin} +\setlength{\tocleftmargin}{5cm} +\newlength{\tocrightmargin} +\setlength{\tocrightmargin}{1cm} + +\etocsetstyle{section} +{\addvspace{1ex}\parfillskip0pt + \leftskip\tocleftmargin + \rightskip\the\tocrightmargin plus 1fil + \parindent0pt\color{cyan}} +{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} +{\llap{Kapitel\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\etocsetstyle{subsection} +{} +{\mdseries\large\addvspace{.5ex}\leavevmode} +{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\def\tmptitle{Meine wunderschöne These} + +\etocsettocstyle{\color{cyan}\parindent0pt\leftskip\tocleftmargin + \leavevmode\leaders\hrule height 1pt\hfill\ + \huge\textit{\tmptitle}\par}{\bigskip} + +\tableofcontents \ref{toc:overview} +% And again, for the fun of it: +% \def\tmptitle{My Very Beautiful Thesis} +% \tableofcontents \ref{toc:c} +\endgroup + + +\subsection{Ein TOC mit einer Hintergrundfarbe}\label{ssec:again} + +Lassen Sie uns nun einige anspruchsvollere Linienstile versuchen. Das Display +wird den Paket-Befehl \csa{etocframedstyle} verwenden, damit das erzeugte +Inhaltsverzeichnis auf eine einzige Seite passt. Wir wickeln es in eine +\hyperref[toc:floating]{Figur-Umgebung}, damit es auf der aktuellen Seite +angezeigt wird. \vpageref{toc:floating}. + + +\begin{figure}[htbp!]\centering +\colorlet{subsecnum}{black} +\colorlet{secbackground}{green!30} +\colorlet{tocbackground}{red!20!green!20} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 3cm} +\renewcommand{\etocrightrule}{\vrule width 1cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip +\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} +{\shiftedwhiterule{\leftskip}{6pt}} +{\sffamily\footnotesize +\leftskip2.3cm\hangindent1cm\rightskip.5cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par +\nointerlineskip\vskip3pt} +{} + +\etocsetstyle{subsection}{\etocskipfirstprefix} +{\shiftedwhiterule{1.5cm}{6pt}} +{\sffamily\small +\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent +\hbox to .75cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par +\nointerlineskip\vskip3pt} +{} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +% v1.07l on the occasion of traduction into German documentation: + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{blue} + {\hfil \bfseries\large Inhalt von Teil Eins\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{blue} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}% + \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}% + \vskip6pt } +{} + + +% attention car \ref{toc:floating} fera référence au compteur de +% toutes les toc, pas visibletoc. + +\etocframedstyle[1]{} +\tableofcontents \label{toc:floating} \ref{toc:overview} +\vspace{-\baselineskip} +\centeredline{|\tableofcontents \ref{toc:overview}| +(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})} +\end{figure} + +Das aktuelle Design ist nicht in \etoc vorgefertigt; sondern nutzt seine +`eingerahmten' Stile mit einer Hintergrundfarbe. Die Rahmengrenzen wurden so +gesetzt, dass die gleiche Farbe, wie die Hintergrundfarbe, für die gesamte Sache +dienen soll. Dieses Design (mit anderen Farben) wird auch für +\hyperref[toc:clone]{dieses andere Inhaltsverzeichnis} benutzt, und der Leser +bezieht sich auf seine \hyperref[ssec:tocclone]{Unterabschnitte}, welche für die +Kodierung vorgesehen sind. + + +\clearpage +\etocdepthtag.toc {surprising} +\part{Überraschende Anwendungen von \etoc} +\label{part:surprising} + +\thispartstats %% (pas de sous-section) + +% in dtx of release 1.07h there was here a \thisspecialstats, but it +% originated from the period when this \part was only a \section. So its +% effect was not the intended one, basically it had the same effect as this: +\etocstandardlines +\etocsettocstyle {}{} +\localtableofcontents + +\section{Das TOC für TOCs} + +\begingroup % \endgroup just after the \tableofcontents command +\etocinline +\etocsetlevel{part}{1} +\etocsetlevel{visibletoc}{0} +\etocsetstyle{visibletoc} + {\etocskipfirstprefix} + {, } + {{\color{niceone}\etocname}} + {} +\etocsettocstyle{}{} +\etocsetnexttocdepth{visibletoc} + +Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die +in diesem Dokument dargestellt sind \footnote{Die Inhaltsverzeichnisse können + "`Schwimmer"' setzen, um die Reihenfolge zu ändern: die Zahlen werden in der + Reihenfolge der Inhaltsverzeichnisse in dem Dokument aufgeführt; aber die + Nummerierung selbst ist von der Reihenfolge der Inhaltsverzeichnisse in der + \emph{Quelle} dieses Dokumentes \ldots} +\tableofcontents\endgroup. Und hier erhalten wir, was +wir gerade geschrieben haben:\par\smallskip +{\leftskip1cm\rightskip2cm + \ttfamily\small\baselineskip11pt \noindent Hier ist die + nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die in + diesem Dokument dargestellt sind:~\string\tableofcontents.\par} + +Die vorausgehenden Arbeiten waren wie folgt. Zuerst definierten wir einen Zähler +|visibletoc|, dessen Berufung es ist, bei jedem angezeigten Inhaltsverzeichnis +erhöht zu werden. \etoc hat einen eigenen Zähler, aber es zählen alle +Inhaltsverzeichnisse, auch wenn diese nicht angezeigt werden, da die |tocdepth| +Werte |-2| oder |-3| waren. + +Wir könnten manuell |\refstepcounter{visibletoc}| und |\label| an allen +geeigneten Stellen im Dokument hinzufügen, und wir würden dann |\ref|- Befehle +verwenden, aber dies stellt eine hohe manuelle Bearbeitung der Quelle dar. + +Es gibt eine viel bessere Möglichkeit: Es gibt einen Aufhänger +\csb{etocaftertitlehook} und wir sagten, es erhöht sich der |visibletoc|-Zähler +und wir schreiben eine Anlage zu der |.toc|-Datei, in analoger Weise zu dem +Gliederungsbefehl, zum Beispiel |Kapitel|, |Abschnitt| oder |Unterabschnitt|. +Wie \etoc seinen eigenen Zähler erhöht, noch bevor der Titel des +Inhaltsverzeichnisses gesetzt wird, bietet diese (die meiste Zeit) einen +besseren Link-Zielpunkt als jeder Zähler von \csa{etocaftertitlehook} (der Link +wird nach dem Titel platziert). Anstatt mit |\refstepcounter{visibletoc}|, +innerhalb von \csa{etocaftertitlehook}, formulieren wir +|\stepcounter{visibletoc}|, dann folgt der Befehl +\csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. Dieser \etoc-Befehl +\csb{etoctoccontentsline}\marg{level\_name}\marg{name} hat die gleiche Wirkung +wie: \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}} aber +sein Nutzen ist es \footnote{Mit \csa{addtocontents} anstatt + \csa{addcontentsline}.}, die Reparatur der automatischen Erstellung von +Lesezeichen zu verhindern mit \csa{addcontentsline} bei dem |hyperref|-Paket, +wie die pdf-Lesezeichen machen sie nicht viel Sinn hier (und würde eine +Beschwerde bezüglich von |hyperref| eruieren, denn das Lesezeichen-Niveau ist +`unbekannt').\footnote{ Das Paket bietet eine Stern-Variante + \staritb{etoctoccontentsline}, die zulässt, dass die Erstellung von + Lesezeichen und das Haben eines dritten obligatorischen Arguments, welches das + Lesezeichen-Niveau darstellt, funktioniert; abhängig vom Kontext kann die + Hauptrolle und die Nicht-Stern-Variante profitabel durch \csa{phantomsection} + sein.} + +Schließlich war in der Präambel des Dokuments |\etocsetlevel{visibletoc}{6}|. +Das Niveau |6| (oder etwas mit einer höheren Zahl) wird ignoriert, auch wenn +|tocdepth| zum Beispiel den Wert |10| hat; das ist unabhängig davon, ob \etoc +die Dokumentenklasse als Standardlinien oder als eigene Linienstile nutzt oder +die, die vom Benutzer mit \csa{etocsetstyle} Befehl definiert wurden. Es gibt +also keinen Grund zur Sorge, dass etwas schief gehen könnte. + +Dann haben wir hier nur |\etocsetlevel{visibletoc}{0}| gesetzt. Und nur diese +Art von Einträgen weisen wir vorübergehend eine |Teil|- und |Kapitel|-Ebene |1| +zu (oder etwas höher als null) und setzen |tocdepth| auf den Wert |0|. Wir haben +auch \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{, + \}\{\string\etocname\}\{\}}, welche eine innere Anzeige mit dem Komma als +Trennzeichen definiert. Wie \etoc Aspekte |\par| automatisch als Standard das +Inhaltsverzeichnis setzt, verwendeten wir den Befehl \csb{etocinline} (auch als +\cs{etocnopar} bekannt), welches die Reaktion ausmacht . + +Hier sind die Details der Implementierung: + +\begingroup +\begin{verbatim} + < in der Prämbel > +\newcounter{visibletoc} +\renewcommand{\etocaftertitlehook} + {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}} +\etocsetlevel{visibletoc}{6} +\begin{document} + < document body > +\subsection{Surprising uses of etoc} +\begingroup + \etocinline + \etocsetlevel{part}{1} + % \etocsetlevel{chapter}{1} % (keine Kapitel in scrartcl Klasse) + \etocsetlevel{visibletoc}{0} + \etocsetstyle{visibletoc} + {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{} + \etocsettocstyle{}{} % keine Titel, Regeln oder Rahmen festgelegt! + \etocsetnexttocdepth{visibletoc} % zeigt nur die `visibletoc' Einträge an aus .toc + +Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, +die in diesem Dokument angezeigt werden: \tableofcontents. +\endgroup +\end{verbatim} + +\endgroup + +Nach |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, wird für alle zukünftigen +Inhaltsverzeichnisse (nicht im +Kompatibilitätsmodus) der definierte Stil für das Niveau +|0| verwendet (was normalerweise der Pegel für ein Kapitel +ist). Um diese Änderung auf die einfachste Art und Weise zu halten, muss man +alles in eine Gruppe setzen. + +Der \autoref{subsec:interverting} gibt eine andere Verwendung +von Verschachtelungsstufen an. + +\section{Willkürliche "`Listen von \ldots "', \csbhyp{etoctoccontentsline}} +\label{etoctoccontentsline} + +Die Idee der Internabwehr ist leistungsfähig und ermöglicht +\etoc-Anzeigelisten, um beliebige Dinge in dem Dokument enthalten zu lassen. +Und all das mit noch nichts anderem als der +|.toc| Datei! +Beispiel: Stellen Sie sich ein Dokument mit Dutzenden von Übungen vor, +vielleicht als |\newtheorem{exercise}{}[section]|. +Lassen Sie uns erklären, wie man \etoc anweist, eine verlinkte Liste all dieser +Übungen anzuzeigen. Dafür haben wir in der Präambel geschrieben: +\begin{verbatim} + \newtheorem{exerci}{}[section] + % the exercice number will be recoverable via \etocname: v--here--v + \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}} + \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}} + \etocsetlevel{exercise}{6} +\end{verbatim} +Auf diese Weise wird \csa{etocname} die Übungsnummer vergeben (aber +\csa{etocnumber} wird leer sein). Hätten wir stattdessen +\begin{verbatim} + \newcommand*{\exercisetotoc} + {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}} +\end{verbatim} +% +verwendet, wäre die Übungsnummer via \csa{etocnumber} verfügbar und +\csa{etocname} wäre leer gewesen. Es spielt keine Rolle, welches der beiden +Verfahren verwendet wird. Der \etoc Befehl \csa{etoctoccontentsline}|{..}{..}| +wird als Ersatz für \csa{addcon\-tentsline}|{toc}{..}{..}| verwendet: Das ist +die, die durch das Reparieren von |hyperref| zu \csa{addcontentsline} verwendet +wird, um in ihrem Prozess die Erstellung von Lesezeichen zu vermeiden. Wenn man +|hyperref| ermächtigt, Lesezeichen auf einer bestimmten Ebene \meta{n} zu +erschaffen, kann einer (hier mit \meta{n}$=$|2|) die Stern-Variante +\starit{etoctoccontentsline} benutzen, welche ein zusätzliches Argument hat: +% +\begin{verbatim} +\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}} +\end{verbatim} + +Der Zähler |exerci| wird bereits durch das |exerci|-Theoremumfeld erhöht und +sorgt für den richtigen Ort für den Link zusätzlich zum Paket +|hyperref|. Der Befehl \csa{exercisetotoc} fügt für jede Übung eine Zeile in die +|.toc|-Datei, entsprechend einer fiktiven Dokumenteinheit +mit dem Namen `|Übung|' ein. Eine +Vier-Säulen-Liste, einschließlich der Abschnitte, kann dann erreichen mit +\begin{verbatim} + \etocsetnexttocdepth{2} % Abschnitte sind auf Stufe 1 und werden anzeigen +\begingroup + \etocsetlevel{exercise}{2} % aber: + \etocsetlevel{chapter}{3} % keine Kapitel + \etocsetlevel{subsection}{3} % keine Unterabschnitte + \etocsetlevel{part}{3} % keine Parts + \etocsetstyle{exercise}{}{} % \etocname = exercise number + {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par} + {\pagebreak[2]\vskip\baselineskip} + \etocsetstyle{section}{}{} + {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par + \nopagebreak[3]}{} + \etocruledstyle[4]{\Large\bfseries List of the exercises} + \setlength{\columnseprule}{.4pt} + \tableofcontents +\endgroup + \end{verbatim} + + +\section{Ein TOC mit einem extravagantem Layout} + +Hier ist ein Inhaltsverzeichnis, wo die Abschnitte aus einem bestimmten Kapitel +durch einen Zahlenbereich dargestellt werden sollen +(wie 18--22 bei einem bestimmten Kapitel, 42--49 für ein anderes \ldots\ +natürlich in das Inhaltsverzeichnis automatisch eingefügt wurden). + +Dies ist kein Abbildungseinschluss, das Inhaltsverzeichnis wird von seiner +ursprünglichen +|tex|-Quelle in dieses Dokument nach dem Austausch des +|Teils|, |Kapitels| oder |Abschnitts| mit |Dummy-Teil|, |Dummy-Kapitel| und +|Dummy-Abschnitt| (und da ist auch eine Dummy-Seitenzahl) produziert. Wir +kopierten die Linienstile, wie im Original verwendet, und +das Inhaltsverzeichnis zeigt folgende Situation an: +\begin{verbatim} + \etocsetlevel{dummypart} {-1} \etocsetlevel{part} {2} + \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2} + \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2} + \etocsetnexttocdepth{dummysection} +\end{verbatim} + +Jedes Kapitel zeigt die Zahl nur von dem ersten und dem letzten Abschnitt an. +Siehe in der Quelldatei |etoc.dtx| für die Details nach, wie das gemacht wird. + +Eine andere Technik für diese Art der Dinge erläutert + \autoref{ssec:statistics}. + +\begingroup + + \etocsetlevel{dummypart}{-1} + \etocsetlevel{dummychapter}{0} + \etocsetlevel{dummysection}{1} + \etocsetlevel{part}{2} + \etocsetlevel{chapter}{2} + \etocsetlevel{section}{2} + + \newif\ifextraidone + \newif\ifextraiidone + + \etocsetstyle{dummypart} + {} + {} + {\begin{center}\Large\bfseries TEIL \etocnumber + \ifextraiidone\\\etocname.\fi\end{center} + \ifextraidone\else + \noindent\hskip.7\linewidth + \hbox to .2\linewidth +% février (ou janvier?) 2013 +% je modifie ici en ajoutant un \hss, pour compenser la plus petite +% taille de txrm. Ok. + {\hss\small\textsc{\bfseries Kapitel.\hss Seite.}}\par\fi + \extraidonetrue + } + {} + + \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}} + \etocsetstyle{dummychapter} + {} + {\par\noindent\etocifnumbered + {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}} + {\hspace*{.15\linewidth}}} + {\hbox to .65\linewidth + {\hspace{1em}\etocname\leaders\mytocleaders\hss}% + \hskip-.1\linewidth + \hbox to .2\linewidth{\hspace{1.5em}...\hss + \etocifnumbered + {\etocpage} + {\ifextraiidone\else\etocpage\fi}}% + \hskip-.2\linewidth + } + {} + + \newbox\forsectionnumbers + \makeatletter +% 21 février 2013: je rajoute \color@begingroup et \color@endgroup + \etocsetstyle{dummysection} + {\setbox\forsectionnumbers=\hbox to .1\linewidth + \bgroup\color@begingroup\hss\etocskipfirstprefix} + {\@gobble} + {\etocnumber---} + {\etocnumber\color@endgroup\egroup + % for reasons I do not quite understand, in some pdf viewers the dots + % do not completely disappear if here \fboxsep0pt is used. + % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) + % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais + % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à + % « effacer ») + \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par + \ifextraiidone\else + \begin{center}\bfseries Kongruenz.\end{center} + \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Übung.}}\par + \fi\extraiidonetrue + } + \makeatother + + \renewcommand{\etocinnertopsep}{0pt} + + \etocruledstyle[1]{% + \parbox{\linewidth}{% + \centering + \textsc{\bfseries\LARGE\MakeUppercase{Inhaltsverzeichnis}}\\ + \rule{.2\linewidth}{2pt}}% + } + + \etocsetnexttocdepth{dummysection} + + \tableofcontents + +\makeatletter + \def\adddummysection {\stepcounter{dummysection}% + \addtocontents {toc}{\protect\contentsline + {dummysection}{\protect\numberline{\thedummysection}}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummychapter #1{\stepcounter{dummychapter}% + \advance\dummypage2 + \addtocontents {toc}{\protect\contentsline + {dummychapter}{\protect\numberline{\thedummychapter}#1}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummychapno #1{\advance\dummypage2 + \addtocontents {toc}{\protect\contentsline + {dummychapter}{#1}{\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummypart #1{\stepcounter{dummypart}% + \advance\dummypage4 + \addtocontents {toc}{\protect\contentsline + {dummypart}{\protect\numberline{\Roman{dummypart}}#1}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} +\makeatother + + \newcount\dummypage \dummypage-1 + + \adddummypart {} + + \adddummychapno {Einleitung} + + \newcount\tempcount + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<8 + \repeat + + \adddummychapter {Kongruenz von Subjekt und Verb} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<17 + \repeat + + \adddummychapter {Kongruenz von Substantiven und Adjektiven} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<22 + \repeat + + \adddummychapno {Kongruenz von Relativen und Antezendenten} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<25 + \repeat + + \adddummypart {Government} + + \adddummychapter {Der Akkusativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<30 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<37 + \repeat + + \adddummychapter {Verbrektion über zwei Akkusative} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<41 + \repeat + + \adddummychapter {Der Kausativ} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<49 + \repeat + + \adddummychapter {Der Instrumental} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<54 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<59 + \repeat + + \adddummychapter {Der Dativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<65 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<71 + \repeat + + \adddummychapter {Der Ablativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<75 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<86 + \repeat + + \adddummychapter {Der Lokativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<92 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<100 + \repeat +\endgroup + +\section{Ein weiterer Kompatibilitätsmodus} + +Wie in \autoref{ssub:compat} erläutert, sagen die Befehle +\csa{etocstandardlines} und \csa{etocstandarddisplaystyle} \etoc im +Wesentlichen, wie man als Beobachter fungiert. Das Dokumentenklasse-Layout für +das Inhaltsverzeichnis wird dann gehorchen. Es gibt keine Möglichkeit, dieses +Standard-Layout aus dem Paket anzupassen (ändern von Schriftarten, Rändern, +vertikalen Abständen, etc.) . Definieren Sie dazu ein Paket von dieser Funktion; +weil entweder \etoc (vorübergehend vielleicht) im Kompatibilitätsmodus ohne +Anpassung auf seinen Teil möglich ist oder der Benutzer hat das Layout in +\csa{etocsetstyle}-Befehlen angegeben (und \csa{etocsettocstyle}) ist (angeblich +\ldots ) in der kompletten Steuerung. + +Nun, es ist eigentlich eine Alternative. Es ist möglich, die Verwendung der +\csa{etocsetstyle}-Befehle zu nutzen, um einen künstlichen Kompatibilitätsmodus +neu zu erstellen, um Effekte zu erreichen, wie die folgenden, alle Dinge +gleichen andererseits dem Dokumentenklassen-Standard: +\begin{enumerate}[noitemsep] +\item Enthält der |hyperref|-Link nur die Namen, aber nicht die Anzahl der + jeweils zu kapselnden Einträge der Inhaltstabellen; +\item verwenden Sie den Dokumentenklassen-Stil für Kapitel und Abschnitte, aber + ändern Sie es nur für Teilbereiche; +\end{enumerate} + +Hier ist beschrieben, wie Sie vorgehen müssen. Man nimmt in die Präambel: +\begin{verbatim} +\makeatletter +\newcommand{\MyStandardTOC}{% + \begingroup + \let\savedpartline\l@part + \let\savedchapterline\l@chapter %% remove if article/scrartcl class + \let\savedsectionline\l@section + \let\savedsubsectionline\l@subsection + % and so on if \subsubsection, etc... is used + % + % for the book or article classes: + \etocsetstyle{part}{}{} + {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}% + % for the scrbook or scrartcl classes: + \etocsetstyle{part}{}{} + {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + % identical in book/article/scrbook/scrartcl classes: + \etocsetstyle{chapter}{}{} %%% only for book and scrbook + {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \etocsetstyle{section}{}{} + {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \etocsetstyle{subsection}{}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + % etc... if further sectioning units are used + % (see the text for what to do with the memoir class) + \etocstandarddisplaystyle % this is for the title, page-marks, etc... + \tableofcontents + \endgroup} +\makeatother +\end{verbatim} +Natürlich ist es so, wenn das Dokument nur ein Inhaltsverzeichnis hat, dann gibt +es keine Notwendigkeit, die Befehle in ein Makro zu setzen oder sogar in eine +Gruppe. \footnote{Und wenn darüber hinaus, um das gleiche Layout wie im Standard +zu halten, kann man sich die Frage stellen, warum man \etoc benutzt \ldots\ Es +gibt \emph{einen} guten Grund: Zahlen und Namen sind separate +\texttt{hyperref}-Links, nach der Regel gibt es nur eine Verbindung, die sowohl +die Nummer und den Namen auf einem toc-Eintrag entsprechen.} Mit dem Befehl +\etoc ist ein Inhaltsverzeichnis völlig identisch zu einem von der +Dokumentenklasse: |article|, |book|, |scrartcl|, |scrbook|. \footnote{Für die +|memoir|-Klasse braucht man ein bisschen mehr: Jeder der Befehle +\csa{booknumberline}, +\csa{partnumberline} und \csa{chapternumberline} müssen in ein +\csa{let} gebettet werden und sie ergeben dann ein: +\centeredline{% +\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{% +\string\savedchapternumberline}} +\hbox to \linewidth{\hfil\hfil \ttfamily + \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} +(und analog für |part| und |book|).} +Die Anzahl und die Namen der einzelnen Einträge sind jeweils separat in einem +|hyperref|-Link, wie es immer der Fall bei \etoc ist, wenn man nicht im +Kompatibilitätsmodus ist. Ersetzt man \csa{etocnumber} mit \csa{etocthenumber}, +dann ergibt es ein Inhaltsverzeichnis, wo die Zahlen nicht mehr verlinkt sind, +aber die Namen noch. Oder man kann sich entscheiden, \csa{etocthename} zu +verwenden und eine Hyperlink-Nummer mit \csa{etocnumber} zu erhalten. + +Hier ist ein subtiles Beispiel, wo nur geringfügig die "`sections"' modifiziert +wurden (hinzufügen von Farbe für die Nummer und das Entfernen des +|hyperref|-Links) und die Unterabschnitte, wie in der Standardeinstellung, +\emph{mit Ausnahme} von einer bestimmte "`section"' im Layout komplett geändert +wurde: \MyQuasiStandardTOC{\ref{toc:overview}} \bigskip Dieses Beispiel hat nur +Abschnitte und Unterabschnitte und der in \csa{MyStandardTOC} verwendete Code +war: +\begin{verbatim} +\etocsetstyle{section}{} + {\ifnum\etocthenumber=3 + \etocsetstyle{subsection} + {\par\nopagebreak\begingroup + \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue + \parindent 0pt \normalfont\normalsize\rmfamily\itshape + % \columnsep1em + % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}% + % \begin{multicols}{2}% + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname\ \textup{(\etocnumber)}} + {.\par\endgroup}% + % {.\par\end{multicols}\end{minipage}\par\endgroup}% + \else + \etocsetstyle{subsection} + {}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}} + {}% + \fi} + {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} + {}% +\end{verbatim} + +Beachten Sie die Seite mit den Kopf-Zeichen, welche man dem Inhaltsverzeichnis +hinzufügen kann. Abschnitte und Unterabschnitte sind genauso wie im Standard +(mit Ausnahme der Unterabschnitte, welche von einem bestimmten +Benutzer-Abschnitt aus gewählt wird und bis auf die Farbe der +Abschnittsnummern), ohne das explizit die Länge, die Schriftart oder andere +Formatierungsanweisungen gegeben werden. Aber wir mussten die |scrartcl|-Quellen +untersuchen, um festzustellen, was zu nehmen ist für \csa{leftskip} und +\csa{rightskip} für unsere Nutzer-sections-Einträge. + +\section{Das TOC als ein Baum}\label{tocastree} + +Mit |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} und dem Paket +|forest|\footnote{\url{http://ctan.org/pkg/forest}} wird das Inhaltsverzeichnis +als Baum angezeigt. Die Technik ist, den von \etoc geänderten Befehl +\csa{tableofcontents} nicht für den Satz zu verwenden, sondern ein Makro, oder +besser hier eine \emph{symbolische Liste}-Variable vorzubereiten, mit allen +Anweisungen, die später ausgeführt werden. \textsc{Leslie Lamport}'s Buch +erwähnt überhaupt nicht die symbolische Liste und \LaTeX{} vermittelt den +Eindruck, nicht wirklich darauf zu warten, dass die Mehrheit der Nutzer immer +über sie (oder begrenzte Makros) etwas hört; die ganze Sache und der folgende +Abschnitt sind daher für fortgeschrittene Anwender. + +Setzt man die \csa{etocnumber}- und \csa{etocname}-Befehle in \csa{treetok}, +dann würde das nichts nützen: Auf welche Zahl oder Namen würde sich das dann +beziehen, in einer verzögerten Ausführung? + +Wir brauchen die Speicherung der Makro-Namen, aber nicht die Makro-Inhalte. Und +wir wollen auch die korrekten |hyperref|-Hyper-Links erhalten.\footnote{Dieses +Handbuch bis zu der Version vom 14. Mai 2013 verwendete das Paket |tikz-qtree|, +aber es gab Probleme mit den Hyper-Links. Kein solches Problem entsteht mit +|forest| oder mit der nativen Syntax |tikz| für Bäume (die im nächsten Abschnitt +dargestellt sind).} + +\textbf{UEBERSETZUNG NOETIG} +\begin{otherlanguage}{english} + The commands \csa{etocname}, etc\dots, are robust, it is easier to work with + \csa{etocthelinkednumber}, \csa{etocthelinkedname}, and + \csa{etocthelinkedpage} which contain the same information in an easier + accessible form. +\end{otherlanguage} +% ALT: +% Die Hyper-Link-Informationen von \etoc setzen innen +% \csa{etocname}, etc. \ldots, aber es ist nur ein Zeiger, nicht lagerungsfähig +% für die spätere Verwendung; aber das Paket bietet \csa{etocthelinkednumber}, +% \csa{etocthelinkedname} und \csa{etocthelinkedpage}, deren Inhalte enthalten den +% Hyper-Link in einer Form, die gespeichert und später wiederverwendet werden +% können. + +Aus diesem |forest|-Baum haben wir ganz besondere \etoc-Stile für Abschnitte und +Unterabschnitte konzipiert. Sie verwenden ein symbolisches Listenregister mit +dem Namen |\treetok| und ein Makro |\appendtotok|, deren Aufgabe es ist, zu +einer bestimmten symbolischen Listenvariablen den Inhalt eines Makros als +zweites Argument anzuhängen. All dies wird in Reaktion auf einen Befehl +|\tableofcontents| passieren, aber noch ist \emph{nichts} in deren +Prozess.\footnote{Es gibt immer ein \csa{par}, welches kein Problem ist, es kann +aber unterdrückt werden, wenn der Bedarf über den Befehl \csb{etocinline} oder +dessen Synonym \csb{etocnopar} besteht.} Das ist der spätere Job einer +|forest|-Umgebung, die den Inhalt von |\treetok| wiedergeben soll. +\newtoks\treetok +\newtoks\tmptok + +% \newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 +% #1\expandafter\expandafter\expandafter +% {\expandafter\the\expandafter #1#2}} + + +% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f +% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de +% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre +% TikZ natif. + +% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème +% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu +% de sa syntaxe et de celle de TikZ). + +\newcommand*\PrepareSectionNode{% + \tmptok {\centering\bfseries}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% +} + +% 7 mars: j'utilise maintenant \etocthelinkedname +\newcommand*{\PrepareSubsectionNode}{% + \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsettocstyle + {\treetok{[{\hyperref[part:overview]{Überblick}}}} + {\global\appendtotok\treetok{ ]}} + + +% 11 octobre +% forest ne veut pas @\the\treetok avec un \treetok vide, donc +% il faut lui donner une valeur par défaut. +\treetok{[{run latex again}]} + +% 12 octobre +% pour que varioref fonctionne bien, je dois mettre la \tableofcontents +% au plus près de l'environnement forest + +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:forest}\ref{toc:overview} + \hypersetup{hidelinks}% + \bracketset{action character=@} + \begin{forest} + for tree={anchor=center,child anchor=west, + grow'=east,draw,thick, + edge={draw,thick,dashed,color=teal}}, + where={level()==1}{circle,thick,fill=blue!5, + before computing xy={l=3cm}}{}, + where={level()==2}{fill=red!5, + before computing xy={l=6cm}}{}, + % je trouve ce truc pour une position absolue. OK! + rectangle, thick, fill=cyan!5, inner sep=6pt, + @\the\treetok + \end{forest} + \centeredline{Ein Inhalsverzeichnis in Form eines |forest|-Baums.} +\end{figure} + +Der resultierende Baum wird in einem \hyperref[toc:forest]{Puffer} angelegt, welcher +\vpageref[oben]{toc:forest} erscheint. Hier ist der zur Herstellung notwendige Code: +\begin{verbatim} +\newtoks\treetok +\newtoks\tmptok + +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter + {\expandafter\the\expandafter #1#2}} + +\newcommand*\PrepareSectionNode{% + \tmptok {\centering\bfseries}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% +} + +\newcommand*{\PrepareSubsectionNode}{% + \tmptok {\raggedright}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsettocstyle + {\treetok{[{\hyperref[part:overview]{Überblick}}}} + {\global\appendtotok\treetok{ ]}} + +% forest does not like @\the\treetok if \treetok is empty. On first latex +% run, this will be the case because the TOC style defined above will not +% have been executed, as the label {toc:overview} does not refer to a valid +% TOC yet. So we must give a safe default value to \treetok +\treetok{[{run latex again}]} + +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:forest}\ref{toc:overview} + \hypersetup{hidelinks}% + \bracketset{action character=@} + \begin{forest} + for tree={anchor=center,child anchor=west, + grow'=east,draw,thick, + edge={draw,thick,dashed,color=teal}}, + where={level()==1}{circle,thick,fill=blue!5, + before computing xy={l=3cm}}{}, + where={level()==2}{fill=red!5, + before computing xy={l=6cm}}{}, + rectangle, thick, fill=cyan!5, inner sep=6pt, + @\the\treetok + \end{forest} +\end{figure} +\end{verbatim} + +Warum |\hypersetup{hidelinks}|? Wie in \autoref{ssec:hidelinks} erläutert ist, +werden die Links in Inhaltsverzeichnissen nicht eingefärbt, noch gerahmt, so +dass dieses Dokument den Befehl +|\hypersetup{hidelinks}| +hinzufügt. Aber immer werden die |\treetok|-Inhalte in die +|\hyperlink|-Ursprungsbefehle in |\etocthelinkedname| ausgepackt, etc. \ldots{} +Sie werden in der normalen Umgebung für Links (die in diesem Dokument zu +kolorieren sind) ausgeführt. Der \etoc -Code versucht zu erraten, was der +aktuelle "`Stil"' für Links ist (ein Begriff, der nicht wirklich von |hyperref| +vorausgesetzt zu sein scheint) und speichert es in |\etocthelinkedname|, etc. +\ldots, Ich entschied mich für die einfachere Lösung, es dem Benutzer zu +überlassen, ob er es neu erstellt, was auch immer für Bedingungen erwünscht +sind. So, hier ist es notwendig, das |\hypersetup{hidelinks}| in dem +|figure|-Umgebung neu zu erstellen. + +Es gibt einige andere Beispiele in dieser Dokumentation, wobei +|\tableofcontents| verwendet wird, um Material zu haben für den späteren +Schriftsatz: +\begin{itemize} +\item Für das Drucken der Statistiken zu Beginn der einzelnen Abschnitte (siehe + \autoref{ssec:statistics}) wurden unbeschädigte Boxen benutzt (das Problem der + Darstellung der Links funktioniert nicht). +\item Zum Setzen des Inhaltsverzeichnisses als eine Tabelle mit der Methode von + \autoref{ssec:tocastableold}; + auch dort werden wir |\hypersetup{hidelinks}| setzen, nachdem wir die Namen, + Nummern und Seitennummern in einem symbolischen Listenregister gesetzt haben. +\item Und zwei weitere Baum-Beispiele sind im nächsten Abschnitt. +\end{itemize} + + +\section{Das TOC als ein Molekül}\label{sec:molecule} + +Es ist auch möglich, einen Inhaltsverzeichnisbaum nach der TikZ-Syntax für Bäume +zu konstruieren: Aber das ist eine kompliziertere Aufgabe für die \etoc +Linienstile, welche die Klammern in einer Art und Weise von \TeX{} behandeln. +(Sie brauchen für das Auffüllen der symbolischen Liste im Zusammenhang mit jedem +Schritt immer eine Balance, sonst müssen immer kompliziertere Tricks angewandt +werden.). + +Die einfachste Strategie ist es, eine symbolische Liste zuzuweisen (oder Sie +verwenden ein Makro) für jede Ebene: Wir brauchen ein \csa{parttok}, ein +\csa{chaptertok}, ein \csa{sectiontok} und ein \csa{subsectiontok}, um in der +Aufgabe die \csa{treetok} zu befüllen. Wir interessieren uns hier für die +Tabelle der Inhalte von diesem (oder einem anderen) Dokumententeil, nur ein +\csa{sectiontok} und ein \csa{subsectiontok} wird dafür gebraucht. + +\begin{verbatim} +% \newtoks\treetok % already done earlier +\newtoks\sectiontok \newtoks\subsectiontok \newcommand*{\treenode}{} + +\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} + \edef\tmp{\the#1 child {\the#2}}% + #1\expandafter{\tmp}% +} +\newcommand*{\preparetreenode}{% + \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory) + \edef\treenode{node {\the\tmptok}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendchildtree\treetok\sectiontok} + {\preparetreenode \sectiontok\expandafter{\treenode}} + {\appendchildtree\treetok\sectiontok} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendchildtree\sectiontok\subsectiontok} + {\preparetreenode \subsectiontok\expandafter{\treenode}} + {\appendchildtree\sectiontok\subsectiontok} + +\etocsettocstyle + {\treetok{\node {\hyperref[part:overview]{Overview}}}} + {\global\appendtotok\treetok{ ;}} + +% moved to the inside of the figure environment for correct \pageref{toc:molecule} +% \etocsetnexttocdepth{subsection} +% \tableofcontents \label{toc:molecule} \ref{toc:overview} +\end{verbatim} + +\newtoks\sectiontok +\newtoks\subsectiontok +\newcommand*\treenode {} + +\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} + \edef\tmp{\the#1 child {\the#2}}% + #1\expandafter{\tmp}% +} + +\newcommand*{\preparetreenode}{% + \tmptok\expandafter{\etocthelinkednumber}% + \edef\treenode{node {\the\tmptok}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendchildtree\treetok\sectiontok} + {\preparetreenode + \sectiontok\expandafter{\treenode}} + {\appendchildtree\treetok\sectiontok} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendchildtree\sectiontok\subsectiontok} + {\preparetreenode + \subsectiontok\expandafter{\treenode}} + {\appendchildtree\sectiontok\subsectiontok} + +\etocsettocstyle + {\treetok{\node {\hyperref[part:overview]{Überblick}}}} + {\global\appendtotok\treetok{ ;}} + +\begin{figure}[th!]\centering +\etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:molecule}\ref{toc:overview} + \hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=4cm,sibling angle=72}, + level 2/.style={level distance=2cm,sibling angle=60}, + every node/.style={ball color=red,circle,text=SkyBlue}, + edge from parent path={[dashed,very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture} + \centeredline{Ein Inhaltsverzeichnis als ein "`Molekül"'.} +\end{figure} + +% Pour que \pageref fonctionne correctement, je dois mettre +% le \tableofcontents dans la figure. + +Der |\tableofcontents|-Befehl erscheint direkt über der Umgebung in dem +|tikzpicture|-Umfeld und ist eine Gleitfigur (über Inhaltslabel sicherlich auf +die gleiche Seite zu beziehen, wie die in dem das Bild tatsächlich gedruckt +werden soll). Wir erhalten somit das Inhaltsverzeichnis als +"`\hyperref[toc:molecule]{Molekül}"', welches oben erscheint +\vpageref[above]{toc:molecule}. Hier ist der aktuelle, tatsächlich produzierte +Code: +\begin{verbatim} +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:molecule} \ref{toc:overview} + \hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=4cm,sibling angle=72}, + level 2/.style={level distance=2cm,sibling angle=60}, + every node/.style={ball color=red,circle,text=SkyBlue}, + edge from parent path={[dashed,very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture} +\end{figure} +\end{verbatim} + +Dieses \hyperref[toc:molecule]{TikZ-TOC} ist komplett verlinkt, wie das +vorherige \hyperref[toc:forest]{Forest-TOC} auch. + +\etocsettocstyle + {\treetok{\node {\autoref{part:globalcmds}}}} + {\global\appendtotok\treetok{ ;}} + +\etocsetnexttocdepth {subsection} +\tableofcontents \ref{toc:globalcmds} + +\noindent +\parbox{4cm}{\hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=60}, + level 2/.style={level distance=1cm,sibling angle=45}, + every node/.style={ball color=red!50,circle,text=black}, + edge from parent path={[very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture}}% +\begin{minipage}{\dimexpr\linewidth-4cm\relax} + Seitlich ist das (völlig mit Hyper-Links versehene) Inhaltsverzeichnis von + \autoref{part:globalcmds}. + \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}% +\begin{verbatim} +\etocsettocstyle + {\treetok{\node {\autoref{part:globalcmds}}}} + {\global\appendtotok\treetok{ ;}} +\etocsetnexttocdepth {subsection} +\tableofcontents \ref{toc:globalcmds} +\noindent +\parbox{4cm}{\hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=60}, + level 2/.style={level distance=1cm,sibling angle=45}, + every node/.style={ball color=red!50,circle,text=black}, + edge from parent path={[very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture}}% +... +\end{verbatim} +\end{minipage} + +\section{Das TOC als ein TikZ Mind-Map} +\label{sec:mindmap} + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +This is in the same spirit as the ``molecule'' example. The use of the \eTeX{} +primitive \csa{unexpanded} will simplify the code.\footnote{The ``molecule'' +example was added to this documentation on |2013/03/03|. The ``mindmap'' +example was motivated on |2015/03/11| by +\url{http://tex.stackexchange.com/a/232584/4686}. Further help was then obtained via +\url{http://tex.stackexchange.com/q/232816/4686} and this led to the +\hyperref[toc:mindmaptitlepage]{title page} which is a further example.} + +\begingroup +%\newtoks\treetok +%\newtoks\parttok + +\newcommand*\partnode {} % just to check we don't overwrite something +%\newcommand*\childnode {} + +\newcommand*\tmprotate {} % just to check we don't overwrite something +\newcommand*\tmpoption {} % just to check we don't overwrite something +\newcommand*\tmpstuff {} % just to check we don't overwrite something + +% \newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 +% #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}} + +\renewcommand*{\appendchildtree}[3]{% +% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2 +% t1 and t2 are two toks variable (not macros) +% #3 = for example teal!60 + \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}% + #1\expandafter {\tmpstuff }% +} + +% \newcounter{partco} + +% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 +% \def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} + +\etocsetstyle{part} + {\etocskipfirstprefix} +% This updates the global tree with the data from the previous +% part and all its children sections. Moved here because for some parts the +% sections are not displayed due to depth tags. + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + {\stepcounter{partco}% +% customize manually some TikZ set-up (should be done inside the TikZ thing I guess) + \def\tmpoption {}% + \def\tmprotate {}% first + \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi + \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi +% define the part node + \edef\partnode{node \tmpoption + {\unexpanded\expandafter{\etocthelinkednumber}. + \unexpanded\expandafter{\etocthelinkedname}}\tmprotate }% +% this is a starting point which will be filled it by the section children + \parttok\expandafter{\partnode}} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + +\etocsetstyle{section} + {} + {} + {% define the section node + \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} + \unexpanded\expandafter{\etocthelinkedname}}}}% + % append it to the current \parttok + \appendtotok\parttok\childnode + } + {} + +\etocsettocstyle + {\setcounter{partco}{0}% + \treetok{\node [root concept]{\textbf{The \etoc documentation}}}} + {\global\appendtotok\treetok{ ;}} +% The \global above is mandatory because etoc always typesets TOC inside a group + +\etocsetnexttocdepth{section} +% use of depth tags to cut out some sections. +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {section} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {section} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {section} +\etocsettagdepth {custom} {section} +\etocsettagdepth {tips} {section} +\etocsettagdepth {code} {section} + +\tikzset{ + branch color/.style={ + concept color=#1!white, + every child/.append style={concept color=#1!white!30!white, font=\normalsize}, + } +}% + +\begin{figure}[th!] +\tableofcontents\label{toc:mindmap}% +\centeredline{\resizebox{.85\paperwidth}{!}% +{\begin{tikzpicture}[mindmap, + grow cyclic, + text width=2cm, + align=flush center, + nodes={concept}, + concept color=orange!60, + root concept/.append style={text width=4cm, font=\Large}, + level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm}, + level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm}, + level 1 concept/.append style={font=\normalsize}, + ] +\the\treetok +\end{tikzpicture}}} +\end{figure} +\endgroup + +It is difficult to get everything to fit on one page. However \csa{resizebox} +comes to the rescue. And it preserves hyperlinks. Nevertheless for this +example I excluded some sections from the display, using the technique of the +\etoc \hyperref[etocdepthtag.toc]{depth tags}. The fully hyperlinked TOC +appears \vpageref{toc:mindmap}. + +\begin{verbatim} +\begingroup +\newtoks\treetok +\newtoks\parttok + +\newcommand*\partnode {} % just to check we don't overwrite something +\newcommand*\childnode {} + +\newcommand*\tmprotate {} % just to check we don't overwrite something +\newcommand*\tmpoption {} % just to check we don't overwrite something +\newcommand*\tmpstuff {} % just to check we don't overwrite something + +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}} + +\renewcommand*{\appendchildtree}[3]{% +% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2 +% t1 and t2 are two toks variable (not macros) +% #3 = for example teal!60 + \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}% + #1\expandafter {\tmpstuff }% +} + +\newcounter{partco} + +% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 +\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} + +\etocsetstyle{part} + {\etocskipfirstprefix} +% This updates the global tree with the data from the previous +% part and all its children sections. Moved here because for some parts the +% sections are not displayed due to depth tags. + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + {\stepcounter{partco}% +% customize manually some TikZ set-up (should be done inside the TikZ thing I guess) + \def\tmpoption {}% + \def\tmprotate {}% first + \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi + \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi +% define the part node + \edef\partnode{node \tmpoption + {\unexpanded\expandafter{\etocthelinkednumber}. + \unexpanded\expandafter{\etocthelinkedname}}\tmprotate }% +% this is a starting point which will be filled it by the section children + \parttok\expandafter{\partnode}} + {\ifcase\pseudomodthree{\value{partco}}% + \or \appendchildtree\treetok\parttok {teal!60}% first + \or \appendchildtree\treetok\parttok {yellow!80}% second + \else\appendchildtree\treetok\parttok {green!50}% third and next ... + \fi + } + +\etocsetstyle{section} + {} + {} + {% define the section node + \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} + \unexpanded\expandafter{\etocthelinkedname}}}}% + % append it to the current \parttok + \appendtotok\parttok\childnode + } + {} + +\etocsettocstyle + {\setcounter{partco}{0}% + \treetok{\node [root concept]{\textbf{The \etoc documentation}}}} + {\global\appendtotok\treetok{ ;}} +% The \global above is mandatory because etoc always typesets TOC inside a group + +\etocsetnexttocdepth{section} +% use of depth tags to cut out some sections. +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {section} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {section} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {section} +\etocsettagdepth {custom} {section} +\etocsettagdepth {tips} {section} +\etocsettagdepth {code} {section} + +\tikzset{ + branch color/.style={ + concept color=#1!white, + every child/.append style={concept color=#1!white!30!white, font=\normalsize}, + } +}% + +\begin{figure}[th!] +\tableofcontents\label{toc:mindmap}% +\centeredline{\resizebox{.85\paperwidth}{!}% +{\begin{tikzpicture}[mindmap, + grow cyclic, + text width=2cm, + align=flush center, + nodes={concept}, + concept color=orange!60, + root concept/.append style={text width=4cm, font=\Large}, + level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm}, + level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm}, + level 1 concept/.append style={font=\normalsize}, + ] +\the\treetok +\end{tikzpicture}}} +\end{figure} +\endgroup +\end{verbatim} + +An interesting alternative is to use \etoc rather to convert the entire TOC +into a TikZ tree (perhaps excluding some parts) and print it out to a file +from which it can be recovered and manipulated directly by the author of the +document. Things written to the |.log| file get broken into lines. Here is a +technique to get non-broken output. Once the \csa{treetok} has been computed +by \etoc (as in the \hyperref[toc:molecule]{molecule} example, or the current +example), this code snippet will write it out to file with extension +|.toctree|: +\begin{verbatim} + \newwrite\TOCasTree + \immediate\openout\TOCasTree=\jobname.toctree + \immediate\write\TOCasTree{\the\treetok}% +\end{verbatim} +The author can then copy it from there and customize it manually to get a +suitable tikz picture. + +\end{otherlanguage} + + +\section{Das TOC als eine Tabelle} +\label{sec:tocastable} + +\textbf{UEBERSETZUNG NOETIG} +\begin{otherlanguage}{english} +With release |1.08| it is easier to typeset a TOC as a table. It is +possible to open a tabular in the title part of the TOC (first argument +to \csb{etocsettocstyle}) and then close it after the contents (second +argument to \csb{etocsettocstyle}), and specify in the line styles how +to use the tabulation |&| and tabular end of row |\\|. There are some +conditions and a few caveats: + +\begin{enumerate} +\item it is mandatory to issue \csb{etocglobaldefs} for \etoc's + definitions to have global scope, +\item it is impossible to start one of the \meta{start}, \meta{prefix}, + \meta{contents} or \meta{finish} specification with a sole |\hline|, + \emph{i.e.} one not preceded by a |\\| (it is however possible to put + |\\| at the end of \meta{prefix} and the |\hline| at the start of + \meta{contents}). +\item as is explained next, it is recommended to use the |\\| at + the start of the \meta{prefix} or \meta{contents} + specifications to close the \emph{previous} row, not at the end + to close the \emph{current} row; when the TOC is a partial one (a + \csa{localtableofcontents}) this advice becomes (in almost all + situations) mandatory. +\end{enumerate} + +Here is an example of a TOC as a |longtable|, as is possible relatively +simply now with |1.08|. The code follows. +\end{otherlanguage} + +\begingroup +\etocglobaldefs +\etocsetstyle{part} + {} + {\\\hline} + {\strut\etocnumber &\bfseries\etocname + &\etocpage } + {} +\etocsetstyle{section} + {} + {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} + {\etocnumber&\etocname &\etocpage } + {} +\etocsetstyle{subsection} + {} + {\\} + {&\makebox[1cm][c]{\etocnumber}% + \parbox[t]{\dimexpr6cm-\tabcolsep\relax} + {\sloppy\itshape\etocname\strut}% + &\itshape\etocpage } + {} +\etocsettocstyle + {\hypersetup{hidelinks}% + \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} + \hline + \multicolumn{3}{|c|}{\Large\bfseries\strut\MakeUppercase{\contentsname}}% + } + {\\\hline\end{longtable}} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup + +\begin{verbatim} +UEBERSETZUNG NOETIG +\begingroup +\etocglobaldefs % necessary for \etocname etc... to survive & + +% observe the locations of the \\ +\etocsetstyle{part} + {} + {\\\hline} + {\strut\etocnumber &\bfseries\etocname + &\etocpage } + {} + +\etocsetstyle{section} + {} + {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} + {\etocnumber&\etocname &\etocpage } + {} + +\etocsetstyle{subsection} + {} + {\\} + {&\makebox[1cm][c]{\etocnumber}% + \parbox[t]{\dimexpr6cm-\tabcolsep\relax} + {\sloppy\itshape\etocname\strut}% + &\itshape\etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}% + \begin{longtable}{|>{\bfseries}c|p{7cm}|r|} + \hline + \multicolumn{3}{|c|}{\Large\bfseries TABLE OF CONTENTS}% + } + {\\\hline\end{longtable}} + +\etocsetnexttocdepth {subsection} + +\tableofcontents +\endgroup +\end{verbatim} + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +Examining the code above the reader will wonder why the |\\| are +always given first in \meta{prefix+contents} and not, as is more +intuitive, rather last. In many cases one may indeed construct +TOC-as-tables with the |\\| located at the end of the style +specifications (but almost never for a \csa{localtableofcontents}). +The problem in the previous example was with the positioning of the +|\hline|'s. + +Due to technical aspects of how \TeX{} constructs alignments any +definition or assignment done after an |\\| starts a new row, and +thus makes |\hline| an illegal token (this shows as a |misplaced +\noalign| error.) Not only does \etoc have to do such definitions +to construct \csb{etocname} etc..., it is furthermore the case that +some packages put things in the |.toc| file and as a result there +is never any guarantee that between two \csa{contentsline} there +will not be such a token like |\relax| which in the contexts of +alignments forces \TeX{} to start a cell and thus makes it +impossible then to insert an |\hline|. + +The safest way is to start with an |\\| each line style +specification. We had a little problem with the fact that we wanted +parts not only to have a rule above them (easy, they do |\\\hline|) +but also below them: after each part there is a section, thus the +section which are first of their kind used the \csb{etociffirst} +conditional branching. The attentive reader will notice one last +subtlety: the title was supposed to be followed not by one, but by +two |\hline|'s. + +To solve this we could have used a one-time macro redefining itself, but +we noticed that the title was followed by the unnumbered Abstract, thus +the \csb{etocifnumbered} switch came to the rescue. + +Last technical note: because we put the |\\| inside the branches, there +was no need to employ the expandable variants \csb{etocxiffirst} and +\csb{etocxifnumbered}. + +For the hardliner's old way of obtaining the exact same result, see +\autoref{ssec:tocastableold}. + +Here is also a much simpler example. It is a local table of +contents. +\end{otherlanguage} + +\begin{center} +\etocsetstyle{section} + {} + {\etociffirst{\\\hline\hline}{\\\hline}} + {\etocname& \etocnumber&\etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline + \multicolumn{1}{|c|}{\bfseries Abschnitt}& + \bfseries Nummer& + \bfseries Seite} + {\\\hline\end{tabular}} + +\etocglobaldefs % VERPFLICHTEND !! +\etocsetnexttocdepth{1} + +\tableofcontents\ref{toc:overview} +\end{center} + +\begin{verbatim} +\begin{center} +\etocsetstyle{section} + {} + {\etociffirst{\\\hline\hline}{\\\hline}} + {\etocname & \etocnumber & \etocpage } + {} + +\etocsettocstyle + {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline + \multicolumn{1}{|c|}{\bfseries Abschnitt}& + \bfseries Nummer& + \bfseries Seite} + {\\\hline\end{tabular}} + +\etocglobaldefs % VERPFLICHTEND !! +\etocsetnexttocdepth{1} + +\tableofcontents\ref{toc:overview} +\end{center} +\end{verbatim} + +\subsection{Die Befehle \csbhyp{etocglobaldefs} und \csbhyp{etoclocaldefs}} +\label{etocglobaldefs} +\label{etoclocaldefs} + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +In \LaTeX{} the meaning of a command defined via |\newcommand\foo{...}| inside +an environment (or group) vanishes from \TeX's memory on exit from this +environment (or group). At times however it is needed to make definitions with +global scope, for this \TeX{} has the primitive prefix |\global|. + +By default \etoc's definitions of \csb{etocname} etc... are local. This causes +problems in certain contexts such as seen here with TOC as tables, but also +with |enumitem| \emph{inline} variants of its standard environments, because +the command |\item| then closes a group. + +After \csb{etocglobaldefs}, \etoc will make its definitions of \csb{etocname} +etc... have global scope. For normal use this is not necessary. It does not hurt +either to activate it systematically. + +To return to the default, use \csb{etoclocaldefs}. Note that both +\csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the +environment or group where they are used. +\end{otherlanguage} + + +\clearpage +\etocdepthtag.toc {linestyles} + +\part{Befehle für die TOC-Linienstile} +\label{part:linestyles} + +\thispartstats + +\etocsetstyle{section} +{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered + {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} +% Dec 7, 2012. I hit upon a problem whose origin I found was +% with xcolor, as xcolor modifies \fbox +% (try \section{\fbox{A}} with and without xcolor). The fix +% was to \protect the \fbox used in the |enumitem| label. +% Strangely enough, with |hyperref| active, the problem did +% not show up. Anyhow I now use \fcolorbox rather than \fbox +% and there is no problem anymore. Also I don't have now to +% use \normalcolor which already needed protection. +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (Seite \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} +{\normalfont \item} +{\etocname{} (S.~\etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsubsection} +{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix} +{\allowbreak\,--\,} +{\etocname} +{.\hfil\par\endgroup\pagebreak[3]} + +% 27 janvier 22:30 +% je définis les macros (non protégées) +% \etocthename, \etocthenumber, \etocthepage + +\etocruledstyle[1]{\etocfontminusone\color{green}% + \fboxrule1pt\fboxsep1ex + \framebox[\linewidth] + {\normalcolor\hss Inhalt von \autoref{part:linestyles}\hss}} + +\localtableofcontents \label{toc:a} + +\section{Der \csbhyp{etocsetstyle}-Befehl} +\label{etocsetstyle} + +\subsection{Die \csbhyp{etocname}- und \csbhyp{etocpage}-Befehle} +\label{etocname} +\label{etocpage} + +Hier soll erläutert werden, wie \etoc\ dazu verwendet wurde, das +Inhaltsverzeichnis am Beginn des zweiten Teils zu erstellen. Es handelt sich +dabei um ein lokales Inhaltsverzeichnis, weshalb der Befehl \localtoc\ verwendet +wurde. + +Wir müssen hierbei unterscheiden zwischen den Linienstilen (\emph{line styles}) +und dem Ausgabestil (\emph{toc display style}). Die \emph{line styles} erhält +man grundsätzlich auf die folgende Art und Weise: + + +\footnote{Das vorliegende Dokument hat + {\ttfamily\string\renewcommand\string{% + \string\familydefault\string}\string{\string\sfdefault\string}} + in seiner Präambel, deshalb schaltet der Befehl \csa{normalfont} zur + |sans| Schriftart; aus diesem Grund habe ich im Abschnitt line-style + \csa{rmfamily} geschrieben.} + +\begingroup\small +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}} +{\normalfont\item} +{\etocname{} (p.~\etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsubsection} +{\par\nobreak\begingroup\normalfont + \footnotesize\itshape\etocskipfirstprefix} +{\allowbreak\,--\,} +{\etocname} +{.\hfil\par\endgroup\pagebreak[3]} +\end{verbatim} +\endgroup + +Diese provisorischen Stil-Definitionen beruhen auf der automatischen +Nummerierung, die von der |enumerate|-Umgebung generiert wird, es ist aber +wesentlich besser den Befehl \csb{etocnumber} innerhalb des Item-labels zu +verwenden, denn das gibt das richtige Ergebnis. Die verbesserten Definitionen +werden dahingehend später erklärt. + +Mit diesem Stil müsste man so +einfallsreich sein, etwas zu designen, was nicht mit Abschnitten oder +Unterabschnitten zu tun hat, vielleicht so etwas wie Superscripte. Nun, +normalerweise braucht man Abschnitte und Unterabschnitte nicht nummeriert und +aufgelistet in der TOC, also hat unser vermeintlicher Benutzer ein Design +gewählt, welches dafür nichts bereitstellt und fügte noch hinzu: +\begin{verbatim} +\etocsetstyle{paragraph}{}{}{}{} +\etocsetstyle{subparagraph}{}{}{}{} +\end{verbatim} +Das ist der gleiche Sachverhalt wie mit den Standardlinienstilen! + +Jeder \csb{etocsetstyle}-Befehl hat fünf notwendige Argumente:\\ \hbox to +\linewidth {\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}% +\marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil} Die +\meta{levelname}'s sind die Abschnittseinteilungen der +Standard-Dokument-Klassen: Von \emph{part} (oder \emph{book}, welches von der +|memoir|-Klasse benutzt wird) herunter bis zu \emph{subparagraph}. + +Der \meta{start}-Code wird ausgeführt, wenn ein toc-Eintrag dieses Levels +gefunden wurde und der vorherige ein höheres Level hatte. Der \meta{finish}-Code +wird ausgeführt, sobald man wieder einen Eintrag mit einem höheren toc-Level +findet. In der Zwischenzeit werden alle Einträge für dieses Level gesetzt, indem +zuerst der \meta{prefix}-Code und dann der \meta{contents}-Code ausgeführt wird. + +Die (robusten) Befehle \csb{etocname}, \csb{etocnumber} und \csb{etocpage} sind +für die Benutzung innerhalb der \meta{prefix} und \meta{contents}-Teile aus der +\csa{etocsetstyle}-Spezifikation. Diese enthalten den Namen, die Nummerierung +und die Seitennummer des entsprechenden toc-Eintrags. Ist das Paket |hyperref| +im Dokument eingebunden, und es existieren Verlinkungen zu den TOC-Daten, dann +werden diese Links in den Befehlen \csa{etocname}, \csa{etocnumber} und +\csa{etocpage} gehalten (Der letzte hat nur einen Link, wenn |hyperref| die +Option \emph{linktoc=all} übergeben wurde). + + + +\subsection{Die \csbhyp{etocskipfirstprefix} und \csbhyp{etociffirst} Befehle} +\label{etocskipfirstprefix} +\label{etociffirst} +\label{etocxiffirst} + +% ALTES +% Der gewählte |subsubsection|-Stil benutzt außerdem den Befehl +% \csb{etocskipfirstprefix}, welcher -- falls verwendet -- der letzte im +% \emph{start}-Code sein \emph{muss}. Er sorgt dafür, dass der "`prefix"'-Code +% nicht für das erste Objekt ausgeführt wird. + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +The chosen |subsubsection| style made use of the command +\csb{etocskipfirstprefix}, which instructs \etoc to \emph{not} use +for the first item the specified \meta{prefix} code.\footnote{With +versions earlier than |1.08| it had to be the very last token in +the \meta{start} code. It may now appear anywhere therein.} + +The command \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (new +with |1.08|) is a more flexible way to customize the \meta{prefix} +(and \meta{contents}) specifications. It executes the \meta{YES +CODE} branch if this is the first unit at that level (inside a +lower level) and the \meta{NO CODE} if not. This is a robust +command which survives to expansion (for example in an |enumitem| label). + +The variant \csb{etocxiffirst} does the same, but is expandable. +\end{otherlanguage} + + +\subsection{Der \csbhyp{etocnumber}-Befehl} +\label{etocnumber} + +Bis hierhin würde unsere Spezifikation die Nummerierung verwenden, die von der +|enumerate|-Umgebung generiert wird, jedoch möchten wir natürlich die in +der |.toc|-Datei deklarierten Nummern benutzen. Das kann man mit Hilfe des +\csb{etocnumber}-Befehls erreichen. Um die Bezeichnungen in die +|enumerate|-Auflistung zu bekommen, fährt man mit der Syntax +{\ttfamily label=\char32} des |enumitem|-Pakets fort: +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}[label=\etocnumber]} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} +\end{verbatim} +Lieber als nur \csa{etocnumber} haben wir dann so etwas wie |\fbox{\etocnumber}| +benutzt. Dabei ist festzuhalten, dass \csa{etocnumber} ein robuster Befehl ist, +was erklärt, warum er in der Label-Spezifikation benutzt werden kann, ohne +|\protect| hinzuzufügen. + +\subsection{Der \csbhyp{etocifnumbered}-Schalter} +\label{etocifnumbered} +\label{etocxifnumbered} + +Die \csa{fbox} würde ein unästhetisches Ergebnis bringen im Fall eines nicht +nummerierten Abschnitts (welches beispielsweise im Inhaltsverzeichnis gelandet +ist mittels eines \csa{addcontentsline} Befehls).\footnote{Wie man sieht, wird +\csa{fcolorbox} verwendet wird statt \csa{fbox}. Aufgrund einer Neudefinition -- +durchgeführt vom |xcolor|-Paket-- haben wir \csa{fbox} verwendet (und nicht +|hyperref|), sonst hätten wir \csa{protect}\csa{fbox} benötigt.} + +Der \csb{etocifnumbered}\marg{A}\marg{B}-Befehl führt \meta{A} aus, wenn die +Nummer existiert, und \meta{B} falls nicht. Also benutzen wir es in dem Code, +welcher letztendlich für das |section|-Level gewählt wurde: +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered + {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} +{\normalfont \item} +{\etocname{} (p.~\etocpage)} +{\end{enumerate}} +\end{verbatim} + +Wenn wir nur das |section|-Level geändert hätten und nicht das +|subsection|-Level, dann wäre ein Kompilierfehler aufgetreten, denn der +Paket-Stil für die "`subsections"' erwartet dann `im Vertikal-Modus' zu starten. +Ein zusätzliches \csa{par}-Token im \meta{contents}-Teil des |section|-Levels +hätte das behoben: |{...(page \etocpage)\par}|. + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +The command \csb{etocifnumbered} is robust; \csb{etocxifnumbered} +(new with |1.08|) has the same effect but is expandable. +\end{otherlanguage} + +\subsection{Die Befehle \csbhyp{etocthename}, \csbhyp{etocthenumber} sowie +\csbhyp{etocthepage}} +\label{etocthename} +\label{etocthenumber} +\label{etocthepage} + +Es ist manchmal wünschenswert, Zugriff auf Name, Nummer und Seitenzahl zu haben, +ohne die hyperref-Daten: Ähnlich wie die *-Variante des \csa{ref}-Befehls, wenn +das |hyperref|-Paket verwendet wird. Beispielsweise könnte man den Wunsch haben, +eine Einheit oder Seitenzahl in einer Art numerischem Kontext verwenden zu +wollen oder seine Formatierung zu ändern. Diese Funktionalität wird von +\csb{etocthename}, \csb{etocthenumber} und \csb{etocthepage} bereitgestellt. + +Diese Befehle sind aber nicht geschützt, also sollten sie in veränderlichen +Kontexten (zum Beispiel Label-Beschreibungen mit vorangestelltem |\protect|) +verwendet werden. + + +\subsection{Der \csbhyp{etoclink}-Befehl} +\label{etoclink} + +Der Befehl \csb{etoclink}\marg{linkname} kann in Linienstil-Beschreibungen +benutzt werden, in ähnlicher Art und Weise wie die argumentlosen Befehle +\csa{etocname}, \csa{etocnumber} und \csa{etocpage}. Er erzeugt einen Link +(falls solch ein von |hyperref| zur |.toc|-Datei hinzugefügt wurde), dessen Ziel +der entsprechende Dokumentteil ist und dessen Name das angegebene Argument ist. +Daher ist |\etoclink{\eotcthename}| das ursprüngliche |\etocname|. Es ist darauf +zu achten, dass wenn |hyperref| nicht damit beauftragt wurde, die Seitenzahl mit +einem Link zu versehen (mittels seiner Option \emph{linktoc=all}), dann hat +\etoc's \csa{etocpage} auch keinen Link, |\etoclink{\etocthepage}| allerdings +schon. + +Der Befehl \csa{etoclink} ist robust. + +\subsection{Die Befehle \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber}, +\csbhyp{etocthelinkedpage} und \csbhyp{etocthelink}} +\label{etocthelinkedname} +\label{etocthelinkednumber} +\label{etocthelinkedpage} +\label{etocthelink} + +Das Folgende ist für fortgeschrittene Anwendungen von fortgeschrittenen +Benutzern. Das \csa{etocthename}-Makro wurde bereits schon einmal erwähnt; +verwendet man es in Anweisungen wie |\global\let\lastone\etocthename| in einem +\etoc line-Stil, definiert das Macro |\lastone| so, dass es sich ausbreitet bis +zum letzten Namen auf dem korrespondieren Level. Jedoch bestand bisher keine +Möglichkeit, dass Gleiche auch für die Link-Daten zu tun. + +Das in diesem Paket enthaltene \csa{etocthelinkedname} stellt dies nun zur +Verfügung, inklusive der Link-Daten. Es wurde in dieser Dokumentation benutzt +bei Erstellung der \hyperref[tocastree]{Beispiele mit Bäumen}. + +Ebenfalls bereit gestellt mit ähnlichen Funktionen: \csa{etocthelinkednumber}, +\csa{etocthelinkedpage} (welches nur einen Link enthält, wenn |hyperref| einen +zu dieser Seitenzahl hinzugefügt hat) und \csa{etocthelink}\marg{linkname}, +welches es erlaubt einen Link mit einem beliebigen Name zu erstellen. + +All diese Befehle sind \emph{nicht} robust. +\textbf{UEBERSETZUNG NOETIG} +\begin{otherlanguage}{english} + In fact starting with |1.08a|, \csa{etocname} +is exactly the robust variant of \csa{etocthelinkedname} +\end{otherlanguage} + +Veralteter Beispiel\begingroup\ + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{S. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% + \texttt{enumitem}-Umgebung): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup + +\begin{verbatim} +Veralteter Beispiel\begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } +% Obiges ist erforderlich, da \item, hier in itemize*, eine Gruppe schließt. + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{S. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% + \texttt{enumitem}-Umgebung): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup +\end{verbatim} + +Mit \etoc |1.08| gibt es ein einfacher Weg zum gleichen Resultat: +\begin{verbatim} +Beispiel\begingroup\etocglobaldefs % <-- NEU mit etoc 1.08. + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {} + {\item [{\bfseries\etocnumber.}] + \etocname\ (\emph{S. \etocpage })} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% + \texttt{enumitem}-Umgebung): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup +\end{verbatim} +Beispiel\begingroup\etocglobaldefs % <-- NEU mit etoc 1.08. + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {} + {\item [{\bfseries\etocnumber.}] + \etocname\ (\emph{S. \etocpage })} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% + \texttt{enumitem}-Umgebung): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup + +\section{Der \csbhyp{etocsetlevel}-Befehl} +\label{etocsetlevel} + +Wie bereits in \autoref{part:surprising} erklärt, kann man \etoc mitteilen, +welches Level er mit einem bestimmten Abschnitts-Befehl assoziieren soll, +nämlich mit \csa{etocsetlevel}. Zum Beispiel: + +\begin{verbatim} +\etocsetlevel{cell}{0} +\etocsetlevel{molecule}{1} +\etocsetlevel{atom}{2} +\etocsetlevel{nucleus}{3} +\end{verbatim} +Im Kompatibilitäts-Modus wird davon ausgegangen, dass die Makros |\l@cell|, +\texttt{\textbackslash l@mo\-le\-cule}, \ldots\ entweder durch +den Benutzer oder von einer anderen Klasse definiert wurden: Nur |\etocsetlevel| +ist nicht genug, um auf dem korrespondierenden Pegel "`out-of-the-box"' zu +arbeiten. + +Jedoch, ist im Kompatibilitätsmodus kein Inhaltsverzeichnis gesetzt, dann ist +nur wichtig, dass die verschiedenen Linienstile gesetzt sind. +Wenn beispielsweise |section| auf Level |1| ist, dann muss man nicht mehr +\csa{etocsetstyle}|{molecule}{..}{..}{..}{..}| nach +\csa{etocsetstyle}|{molecule}{1}| aufrufen, da +\csa{etocsetstyle}|{section}{..}{..}{..}{..}| bereits +wirksam ist (und es wurde im Paket selbst in der Definition seines +Linienstils gesetzt). + +Die akzeptierten Level laufen von |-2| bis einschließlich |6|. Alles andere wird +auf |6| abgebildet, welches ein Dummy-Level ist und nie dargestellt wird. Das +Paket tut Folgendes: +\begin{verbatim} +\etocsetlevel{book}{-2} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\end{verbatim} +Die benutzerdefinierten Stile von \etoc werden von \csa{etocdefaultlines} +aktiviert. Sie werden vom Haupt-Inhaltsverzeichnis dieses Dokuments dargestellt. +Die Level-Zuweisungen können jederzeit modifiziert werden: In +\autoref{part:surprising} sieht man verschiedene Anwendungen dieser Technik. + +Als ein weiteres Beispiel soll hier angeführt werden, wie das +\hyperref[toc:main]{Haupt-Inhaltsverzeichnis} dieses Dokuments gesetzt +wurde, nämlich mit den folgenden Instruktionen: +\begin{verbatim} +\etocsettocdepth {subsubsection} % set the initial tocdepth +\etocdefaultlines % use the package default line styles. At this early stage in + % the document they had not yet been modified by \etocsetstyle + % commands, so \etoctoclines could have been used, too. +\etocmarkboth\contentsname +\etocmulticolstyle[1] % one-column display + {\pdfbookmark[1]{Table of contents}{MAINTOC}% create a bookmark in the pdf + \noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} +\begingroup % use a group to limit the scope of the + \etocsetlevel{subsection}{3} % subsection level change. + \etocsetlevel{subsubsection}{4} % anything > tocdepth=3. + \tableofcontents \label{toc:main} +\endgroup +\end{verbatim} +Auf diese Art und Weise benutzen die "`subsections"' die Stile, die ursprünglich +für "`subsubsections"' vorgesehen waren, während diese gar nicht gedruckt +werden. Ohne diese Modifikation wäre das Erscheinungsbild ein anderes gewesen: +die Paketlinienstile sind dafür gedacht gewesen, in Dokumenten mit vielen vielen +"`subsubsections"' verarbeitet zu werden, in einem Zwei-Spalten-Layout, um +diesen ein kompakteres Ergebnis zu liefern als die +Standard-\LaTeX-Inhaltsverzeichnisse. Hier haben wir jedoch noch ein paar +"`subsubsections"', daher ist es interessanter, diese zu ignorieren und dafür +"`sections"` und "`subsections"' visuell unterschiedlich zu drucken. + +\section{Umfang der zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei gehörigen Befehle} + +\begingroup % pour \small et \MacroFont en particulier. +\small + +\subsection{Testen des Bereichs} + +Lasst uns zur Farbe Rot wechseln und außerdem diesen Befehl zur +|.toc|-Datei hinzufügen: + +\color{red!50} +\addtocontents{toc}{\string\color{red!50}} + +\def\MacroFont{\ttfamily \footnotesize\hyphenchar\font45 } +\begin{verbatim} + \color{red!50} % Ändern der Textfarbe + \addtocontents{toc}{\string\color{red!50}} % das Gleiche in der .toc-Datei +\end{verbatim} + + +\subsection{Dies ist eine (blass)rote Subsection zu Demonstrationszwecken} + +Gut, der Titel hier wurde schwarz dargestellt, was daran liegt, wie die +|scrartcl|-Klasse funktioniert (in der |article|-Klasse wäre er rot gewesen), +aber wir sind ohnehin mehr daran interessiert, wie er im Inhaltsverzeichnis +aussieht: Und tatsächlich ist er rot im +\hyperref[toc:main]{Haupt-Inhaltsverzeichnis} dieses Dokuments, genau so wie im +\hyperref[toc:a]{Inhaltsverzeichnis für diesen Abschnitt}. Beide Befehle +gehorchen wie erwartet dem |\color{red!50}|-Befehl, der in die |.toc|-Datei +geschrieben wurde. + +Aber lasst uns jetzt diese "`subsection"' beenden und eine "`section"' starten. + +\section{Bin ich auch rot?} + +Die Frage ist, ob es im Inhaltsverzeichnis erscheint: Die Antwort ist ja, es ist +rot im \hyperref[toc:main]{Haupt-Inhaltsverzeichnis} und nein es ist nicht rot +im \hyperref[toc:a]{Inhaltsverzeichnis für diesen Abschnitt}. Grund dafür ist, +dass der \meta{finish}-Code für dieses "`subsection"'-Level eine Gruppe +geschlossen hat, da es |\end{enumerate}| verwendet hat. + +Das zeigt noch einmal die Diskussion aus \autoref{ssec:limitations}. + +Die standardmäßigen Paket-line-Stile beinhalten keine Gruppen-Öffnung- und +Schliess-Befehle: Die Gültigkeit eines Befehls in der |.toc|-Datei wird also +solange bestehen, bis er explizit durch einen weiteren Befehl wieder rückgängig +gemacht wird. + +\begin{verbatim} + \normalcolor + \addtocontents{toc}{\string\normalcolor} +\end{verbatim} +\endgroup + +\normalcolor +\addtocontents{toc}{\string\normalcolor} + +Zurück zu Schwarz. Man beachte das diese Bereichsprobleme auch in mehrsprachigen +Dokumenten auftauchen, da das |babel|-Paket auftretende Sprachänderungen +ebenfalls in die |.toc|-Datei schreibt. + + +\clearpage +\etocdepthtag.toc {globalcmds} + +\part{Befehle für den toc-Display-Stil} +\label{part:globalcmds} + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents \label{toc:globalcmds} + + +\section{Festlegung des toc-Display-Stils} + + +Der \emph{toc display}-Stil gibt an, ob das Inhaltsverzeichnis mit mehreren +Spalten erscheint oder nur mit einer, ob der Titel gesetzt ist wie in der +|article|- oder |book|-Klasse, oder ob er über den Einträgen zentriert sein +soll, mit Regeln an der Seite, oder ob das gesamte Inhaltsverzeichnis in einen +Rahmen gepackt werden soll. Entscheidet man sich bspw. für eine einheitliche +Überschrift und ein Ein-Spalten-Layout, so verwendet man dafür folgende Befehle: +\begin{verbatim} +\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents) +shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title}) +\end{verbatim} + +\subsection{Der Befehl \csbhyp{etocsettocstyle}} +\label{etocsettocstyle} + +Dies ist ein Befehl mit zwei notwendigen Argumenten: +% +\centeredline{\csb{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}} +% +Der \marg{before\_toc}-Teil ist verantwortlich für den Schriftsatz der +Überschriften, so kann er beispielsweise etwas sein wie +\starit{section}|{\contentsname}|. + +Generell gesprochen, sollte diese Überschrift \TeX{} im "`Vertikal-Modus"' +lassen, wenn der eigentliche Schriftsatz des Inhalts beginnt: die Linienstile +(entweder von den Standardklassen oder den Paketlinenstilen) erwarten alle im +`Vertikal-Modus' zu starten. + +Das erste Argument von \csb{etocsettocstyle} kann auch Instruktionen beinhalten, +um die Seitenüberschriften zu markieren. Oder es kann prüfen (|book|-Klasse), ob +der Zwei-Spalten-Modus eingeschaltet ist, um dann zum Ein-Spalten-Modus zu +wechseln. Der \meta{after\_toc}-Teil würde dann wieder den Ein-Spalten-Modus +aktivieren. + +Die im Folgenden beschriebenen Befehle \csb{etocmulticolstyle}, +\csb{etocruledstyle} und \csb{etocframedstyle} rufen alle \csa{etocsettocstyle} +als Subroutine auf, um eine \texttt{Mehr\-spalten}-Umgebung mit Hilfe von +\marg{before\_toc} zu starten, welche mit \marg{after\_toc} wieder geschlossen +wird. + +\subsection{Die Befehle \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol} und +\csbhyp{etoclocalmulticol}} +\label{etocmulticolstyle} +\label{etocmulticol} +\label{etoclocalmulticol} + +Dies ist ein Befehl mit einem optionalen und einem notwendigen Argument: +% +\centeredline{\csb{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}} +% +Die +\oarg{number\_of\_coloumns} können von 1 bis 10 gehen (default: 2; ist der Wert +1, so wird natürlich keine |multicols|-Umgebung angelegt). Das \meta{heading} +wird typischerweise `vertikaler' Art sein, also wie: \meta{heading} = +|\section*|\marg{title}, aber man kann auch horizontale Dinge realisieren wie +|\fbox{Hallo Welt}| (\etoc fügt automatisch ein |\par| ans Ende des +"`heading"'-Arguments von \csb{etocmulticolstyle}). Hier ist einmal exemplarisch +dargestellt, wie das Haupt-Inhaltsverzeichnis dieses Dokuments konfiguriert +wurde: +\begin{verbatim} +\etocmulticolstyle{\noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} +\end{verbatim} +Nach \csa{etocmulticolstyle} haben alle zukünftigen \csa{tableofcontents} den +spezifizierten Stil, falls es zwischendurch nicht mehr geändert wird. Eine +kürzere Variante für nur ein Inhaltsverzeichnis ohne Einfluss auf spätere ist: +\centeredline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} oder +\centeredline{\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}.} + +\subsubsection{Der Befehl \csbhyp{etoctocstyle}} +\label{etoctocstyle} + +\centeredline{\csb{etoctocstyle}\oarg{kind}% +\marg{number\_of\_columns}\marg{title}} +\centeredline{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% +|{\kind*{|\itshape title\upshape|}}|} +Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Standardwert ist +|chapter| oder |section|, abhängig von der Dokumentklasse. + +\paragraph{\texorpdfstring{\csbhyp{etoc\-toc\-style\-with\-marks}}{etoctocstylewithmarks}}% +\leavevmode\unskip{\color{blue}\oarg{kind}\marg{number\_of\_columns}\marg{title}\marg{mark}} +\label{etoctocstylewithmarks} +\label{etoctocstylewithmarksnouc} + +\centeredline +{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% +|{\kind*{|\itshape title \ttfamily\upshape\string\markboth% +|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|} +Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Die wirkliche Anzeige der +Markierungen ("`marks"') hängt vom Seitenstil ab. Es gibt die Variante +\csb{etoctocstylewithmarksnouc}, welche Großschreibung unterdrückt. + +\paragraph{Möchten wir wirklich pargraph-Einträge im Inhaltsverzeichnis?} + +\paragraph{Wirklich?} + +\subsection{Die Befehle \csbhyp{etocruledstyle}, \csbhyp{etocruled} und + \csbhyp{etoclocal\-ruled}} +\label{etocruledstyle} +\label{etocruled} +\label{etoclocalruled} + +Das generelle Format von \csa{etocruledstyle} ist: +\centeredline{\csb{etocruledstyle}% + \oarg{number of columns}\marg{title of the toc}} +\noindent +Der Titel ist horizontales Material (der |LR|-Modus von \emph{\LaTeX{}, ein +Dokument-Vorbereitung-System,}): wenn es nicht in eine Zeile passt, dann sollte +es in eine \csa{parbox} mit einer gegebenen Weite geschrieben werden. Der grüne +Rahmen für die Überschrift des Inhaltsverzeichnisses zu \hyperref[toc:a]{Beginn +des zweiten Teils dieses Dokuments} wurde erzeugt durch: +\begin{verbatim} +\etocruledstyle[1]{\etocfontminusone\color{green}% + \fboxrule1pt\fboxsep1ex + \framebox[\linewidth] + {\normalcolor\hss Contents of this part\hss}} +\end{verbatim} + +Eine kürzerer Weg den Stil zu setzen mit \csb{etocruledstyle} und dann einen +\csa{tableofcontents} zu erstellen, alles zusammen in einer Gruppe damit +zukünftige Inhaltsverzeichnisse nicht betroffen sind, ist: +\centeredline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}} + +\subsection{Die Befehle \csbhyp{etocframedstyle}, \csbhyp{etocframed} +und \csbhyp{etoclocal\-framed}} +\label{etocframedstyle} +\label{etocframed} +\label{etoclocalframed} + +Die gleiche Arbeitsweise: +% +\centeredline{\csb{etocframedstyle}\oarg{number\_of\_columns}\marg{title}} +und die passende Abkürzung: +% +\centeredline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} +Diese wird +verwendet, wenn man nicht den Stil zukünftiger Inhaltsverzeichnisse modifizieren +will (eine ändere Möglichkeit wäre es, das Ganze in Klammern zu packen oder +innerhalb eines |\begingroup...\endgroup|; es gibt auch noch einen +\csa{etoclocalframed} für ein lokales Inhaltsverzeichnis). + +Das gesamte Inhaltsverzeichnis ist eingerahmt. Der Titel selbst aber nicht: +Möchte man das erreichen, dann muss man das im \meta{title}-Argument mit +\csa{etocframedstyle} oder \csa{etocframed} festhalten. Die Farben für den +Hintergrund und der anderen Komponenten (oben, links, rechts, unten) des Rahmens +sind festgelegt mittels geeigneter |\renewcommand|'s (siehe +\autoref{ssec:customdisplay}). + +Eine |minipage| wird benutzt, von daher ist das produzierte Inhalsverzeichnis +nicht kompatibel mit Seitenumbrüchen. Um diese zu erlauben, wird empfohlen, die +Befehle +\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}} +oder +\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}} +in den Argumenten von \csb{etocsettocstyle} zu verwenden. + +Beispiele in diesem Dokument findet man auf den Seiten \pageref{toc:d}, +\pageref{toc:floating}, \pageref{toc:b} und \pageref{toc:clone}. + +\subsection{Überschriften, Titel, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}} +\label{etocinnertopsep} +\label{etocoldpar} + +Das für \csb{etocmulticolstyle} notwendige \meta{heading}-Argument kann entweder +Vertikal-Modus-Material sein wie |\section*{\emph{Inhaltsverzeichnis}}| oder die +horizontale Variante wie das einfache |\etocmulticolstyle{Hallo Welt}|. + +Es kann kein explizites |\par| oder eine Leerzeile in das notwendige Argument +von \csb{etocmulticolstyle} eingefügt werden, aber \etoc stellt \csb{etocoldpar} +als Ersatz bereit: Es fügt |\let\etocoldpar\par| vor der |multicols|-Umgebung +ein und eben dieses |\etocoldpar|\footnote{Dieser Befehl \csa{etocoldpar} (= +funktionierendes \csa{par} im Argument von \csa{etocmulticolstyle}) ist nicht +verwandt mit dem Schalter \csb{etocinline}, dessen Zweck es ist \etoc +mitzuteilen, kein \csa{par} vor dem Inhaltsverzeichnis auszuführen.} am Ende der +Überschrift ein, und macht dann noch einen vertikalen Sprung der Größe +\csa{etocinnertopsep}. + +Auf der anderen Seite erwarten die Befehle \csb{etocruledstyle} und +\csb{etocframedstyle} ein Argument im "`LR-Modus"' (um die Terminologie von +\emph{\LaTeX, a document preparation system} zu nutzen). Das bedeutet, dass +mehrzeilige Titel nur möglich sind, wenn man sie in etwas wie eine \csa{parbox} +einschließt. + +Eine wichtige Größe verwendet von sowohl \csb{etocmulticolstyle}, +\csb{etocruledstyle} als auch \csb{etocframedstyle} ist \csb{etocinnertopsep}. +Es gibt an, wieviel Platz zwischen den Überschriften und dem Start des Inhalts +liegen soll. Der Default-Wert ist |2ex| und man kann es mittels +|\renewcommand*{\etocinnertopsep}|\marg{neuer\_Wert} ändern, nicht mit +|\setlength|. + +\subsection{Der Kompatibilitätsmodus \csbhyp{etocstandarddisplaystyle}} +\label{etocstandarddisplaystyle} + +\etoc wird dann das emulieren, für was eigentlich die Dokument-Klasse +verantwortlich ist, in Bezug auf den globalen Display-Stil des +Inhaltsverzeichnisses. Allen Änderung von innerhalb der Klasse sollten +berücksichtigt werden. + +\subsection{Der Befehl \csbhyp{etoc\-inline}} +\label{etocinline} +\label{etocnopar} +\label{etocdisplay} + +Mit \csb{etocinline} oder seinem Synonym |\etocnopar|, von dem +|\tableofcontents|-Befehl und seinen Varianten werden \emph{nicht} zuerst ein +|\par| erstellt, um den vorherigen |paragraph| zu schließen. Von daher kann man +das Inhaltsverzeichnis in einem Inline-Stil darstellen; oder, wenn nur gebraucht +um eine Token-Liste bzw. ein Makro vorzubereiten, wird es bei der Ausführung +nichts im Token-Stream hinterlassen. + +% JFBU: +Mit \csb{etocdisplay} werden (nochmal) von dem |\tableofcontents|-Befehl und +seinen Varianten zuerst ein |\par| erstellt. + +\section{Gesternde Varianten des \csbhyp{tableofcontents} etc. Befehls} +\label{tableofcontents*} +\label{localtableofcontents*} +\label{etocbeforetitlehook} +\label{etocaftertitlehook} +\label{etocaftercontentshook} +\label{etocmemoirtoctotocfmt} + +Die Befehle \toc, \localtoc, \csa{etocmulticol} und all ihre Cousins und +Varianten haben Stern-Varianten (der Stern muss vor den anderen Argumenten +kommen). Für alle Klassen außer |memoir| verhalten diese sich wie die Originale. +Für |memoir| jedoch, schreibt das Original einen Eintrag in die |.toc|-Datei, +genau so wie die Verwendung des echten \toc Befehls in dieser Klasse, während +aber die Stern-Variante genau das nicht tut, wie es in |memoir| die Regel ist. + +Sobald man damit beginnt, lokale Inhaltsverzeichnisse zu benutzen merkt man, +dass der |memoir|-Standard, welcher dazu gedacht ist, einen |chapter|-Eintrag +für jedes Inhaltsverzeichnis zu erzeugen, nicht praktisch ist. Der Befehl +\csb{etocmemoirtoctotocfmt}\marg{Typ}\allowbreak\marg{name} ändert das Format +(\meta{Typ} ist wieder |chapter|, |section|, |subsection| etc. und \meta{name} +kann bspw. \csa{contentsname} sein.) Die Standardwerte für diese Größen sind +|chapter| und |\contentsname|. + +Das Format der tatsächlichen Überschrift des Inhaltsverzeichnisses sollte +ebenfalls ordnungsgemäß gesetzt werden (z.\,B. mit \csa{etoctocstyle}), um +einfach die selbe Einheitsgröße zu nutzen wie im ersten Argument von +\csa{etocmemoirtoctotocfmt}. + +Eine ungewöhnliche Situation tritt auf, wenn man zwei aufeinanderfolgende +\csa{localtableofcontents} hat (offensichtlich ist das eine nicht sehr +wahrscheinliche Situation), direkt nach einem \csa{part} zum Beispiel. Der erste +würde dann eine Kapitelüberschrift erzeugen (wenn der Standard nicht geändert +wurde, wie oben angedeutet), welche in die |.toc|-Datei geschrieben werden +würde. Das zweite Inhaltsverzeichnis denkt dann, es ist ein lokales zu diesem +Kapitel gehörig und würde aus diesem Grund nichts darstellen. Die Lösung für +dieses Problem ist es, das zweite als Klon des ersten zu definieren. + +Unabhängig von der Situation hat man bei der |memoir|-Klasse immer ein +Hook-Makro namens \csb{etocaftertitlehook}, welches man unterdrückt, indem man +die Stern-Varianten der Darstellungsbefehle nutzt. Außer für die |memoir|-Klasse +ist dieser Hook dazu gedacht, überhaupt nichts zu tun. + +Außerdem gibt es noch \csb{etocaftercontentshook}, ähnlich definiert, um +nichts zu tun. Es gibt auch \csb{etocbeforetitlehook}: es ist definiert +um nichts zu tun. Beide können für einige spezielle Effekte genutzt +werden. + + +\section{Das In\-halts\-ver\-zeic\-hnis von die\-sem Teil} + +\subsection{Über\-prü\-fen des Kom\-pa\-tibilitäts\-modus} + +Als drittes Beispiel wollen wir nun das Inhaltsverzeichnis dieses Teils setzen. +Dazu wollen wir zuerst den Kompatibilitätsmodus testen.\footnote{Dieses +Dokument wurde als |scrartcl| gesetzt. Wir wollen nun testen, ob +der Kompatibilitätsmodus des \etoc-Pakets die Anpassungen innerhalb der +Klassenbefehle umsetzt.} Das ursprüngliche Inhaltsverzeichnis ist +unsichtbar und wurde am Anfang von \autoref{part:globalcmds} definiert, +wobei es mit einem Label versehen wurde. +\begin{verbatim} +\KOMAoptions{toc=left} +\etocstandarddisplaystyle % wird benötigt, damit toc=left gilt +\etocstandardlines +\tableofcontents \ref{toc:globalcmds} +\end{verbatim} +\KOMAoptions{toc=left} +\etocstandarddisplaystyle +\etocstandardlines +\tableofcontents \ref{toc:globalcmds} + +\subsection{Ein In\-halts\-ver\-zeich\-nis mit Rahmen} + +Als nächstes wollen wir ein gerahmtes Inhaltsverzeichnis erzeugen, wobei wir den +vom Paket vorgegebenen Linienstil nutzen und ein paar Farben hinzufügen wollen. +(Es wurde in eine Float-Umgebung eingefügt, die man \vpageref{toc:b} +findet.)\footnote{Innerhalb der |figure|-Umgebung und vor dem gerahmten +Inhaltsverzeichnis, welches die Option |multicols| nutzt, haben wir den Befehl +\csa{normalcolor} eingefügt, um einen Bug zu umgehen, der durch die Interaktion +zwischen |multicols|, |color| und der |figure|-Umgebung entsteht. (Wir brauchen +den Befehl \csa{color\{red\}} in der |.toc|-Datei.) Der Fehler wird nicht durch +das \etoc-Paket verursacht.} + +\begin{verbatim} +\etocdefaultlines +\begingroup +\renewcommand{\etoccolumnsep}{2em} +\renewcommand{\etocinnerleftsep}{1.5em} +\renewcommand{\etocinnerrightsep}{1.5em} +% Befehle für die Hintergrundfarbe des Inhaltsverzeichnisses +\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} +% Befehle für die Rechtecke vor und nach dem Inhalt des Verzeichnisses +\renewcommand{\etoctoprule}{\hrule height 1pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} +\renewcommand{\etocbottomrule}{\hrule height 1pt} +\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} +% Befehle für die Rechtecke links und rechts des Inhaltsverzeichnisses +\renewcommand{\etocleftrule}{\vrule width 5pt} +\renewcommand{\etocrightrule}{\vrule width 5pt} +\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} +\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} +% mit \fcolorbox legen wir einen farbigen Rahmen für den Titel an +\fboxrule1pt +\renewcommand{\etocbelowtocskip}{0pt\relax} +\etocframedstyle {\normalsize\rmfamily\itshape + \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering + Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches + jedoch nur die Abschnitte und Unterabschnitte dieses Teils + enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite. + Es hat das Label |toc:b|.}}} +\begin{figure}[ht!] + \centering +\normalcolor % Workaround für einen Bug von color und multicols (und figure) +\tableofcontents \label{toc:b} \ref{toc:globalcmds} +\end{figure} +\endgroup +\end{verbatim} + + +\etocdefaultlines +\begingroup +\renewcommand{\etoccolumnsep}{2em} +\renewcommand{\etocinnerleftsep}{1.5em} +\renewcommand{\etocinnerrightsep}{1.5em} +% specify a background color for the toc contents +\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} +% set up the top and bottom rules +\renewcommand{\etoctoprule}{\hrule height 1pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} +\renewcommand{\etocbottomrule}{\hrule height 1pt} +\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} +% set up the left and right rules +\renewcommand{\etocleftrule}{\vrule width 5pt} +\renewcommand{\etocrightrule}{\vrule width 5pt} +\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} +\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} +% use \fcolorbox to set up a colored frame for the title +\fboxrule1pt +\renewcommand{\etocbelowtocskip}{-.5\baselineskip\relax} +\etocframedstyle {\normalsize\rmfamily\itshape + \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering + Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches + jedoch nur die Abschnitte und Unterabschnitte dieses Teils + enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite. + Es hat das Label |toc:b|.}}} +\begin{figure}[ht!] + \centering +\normalcolor % work-around to a bug involving color and multicols (and figure) +\tableofcontents \label{toc:b} \ref{toc:globalcmds} +\end{figure} +\endgroup + +% Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le +% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder +% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle +% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie +% donc un problème d'interaction avec multicol là. à voir. Pas le temps +% maintenant. + +% 2013/10/14 +% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec +% etoc: +% http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure +% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor +% _avant_ le multicols à l'intérieur de figure + +\subsection{Eine (verrückte) In\-line-Dar\-stellung} + +Nun wollen wir eine etwas verrückte Inline-Darstellung erzeugen, womit das +Inhaltsverzeichnis des gesamten Dokuments gesetzt werden soll. Hier werden die +Unterabschnitte als Fußnoten dargestellt. Diese Art der Darstellung bietet sich +eher für verlinkte Dokumente an, weniger für gedruckte! (Mir hingegen gefällt +diese Art der Darstellung, obwohl mein Geschmack scheinbar oft nicht geteilt +wird.) + +%%%% Note: 27 april 2014 + +%%%% except for a miraculous situation depending from the quantity of previous +%%%% material this TOC will have links extending accross pagebreaks, which +%%%% dvipdfmx does not know how to handle completely. Apart from that the output +%%%% is ok, thus no need to try seriously to avoid them. + +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; } + {\etocname} + {\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} + {, }{\etocname}{\/\upshape)} +\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par} +\tableofcontents \label{toc:crazyinline} +\endgroup + +Zur Erzeugung dieses Inhaltsverzeichnisses wurde folgender Code genutzt: +\begin{verbatim} +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape} + {\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, } + {\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; }{\etocname}{\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection} + { (\itshape\etocskipfirstprefix}{, }{\etocname}{\/\upshape)} +\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par} +\tableofcontents +\endgroup +\end{verbatim} + + +\clearpage +\etocdepthtag.toc {custom} + +\part{\etoc nutzen und an\-passen} +\label{part:custom} +\thispartstats + +\etocdefaultlines +\renewcommand{\etoctoprule}{\hrule height2pt depth0pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red}} + +\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}% + \fbox{\parbox{.8\linewidth}{\centering\normalcolor Dies ist das + Inhaltsverzeichnis mit den Abschnitten und Unterabschnitten von + diesem Teil. Es hat das Label |toc:c|.}}} + +\localtableofcontents \label{toc:c} + +\section{Über\-blick über die Grund\-befehle zur Stil\-bearbeitung} + +\subsection{Ein lokales Inhalts\-ver\-zeich\-nis an\-passen} +\hbox{\color{green}\fboxrule1pt\fboxsep1em +\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links}}% +\framebox[\linewidth][c] +{\vbox{\hsize\wd0\normalcolor\noindent +\csa{etocsetstyle}\marg{Name der Ebene}% + \marg{Start}\marg{Präfix}\marg{Inhalt}\marg{Abschluss}\\ +\csa{etocname}, \csa{etocnumber}, \csa{etocpage}, +\csa{etocifnumbered}\marg{A}\marg{B}\\ +\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links} +}}} + +\subsection{Das Aus\-sehen eines Inhalts\-ver\-zeichnisses an\-passen} +\medskip +\hbox{\color{green}\fboxrule1pt\fboxsep 1em +\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{Ebene}% +\marg{Anzahl der Spalten}\marg{Titel}\marg{Symbol}}% +\framebox[\linewidth][c] +{\vbox{\hsize\wd0 +\normalcolor\noindent +\csa{etocmulticolstyle}\oarg{Anzahl der Spalten}\marg{Überschrift}\\ +\csa{etoctocstyle}\oarg{Ebene}\marg{Anzahl der Spalten}\marg{Titel}\\ +\csa{etoctocstylewithmarks}\oarg{Ebene}\marg{Anzahl der Spalten}% +\marg{Titel}\marg{Symbol}\\ +\csa{etoctocstylewithmarksnouc}\oarg{Ebene}\marg{Anzahl der Spalten}% +\marg{Titel}\marg{Symbol}\\ +\csa{etocruledstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\ +\csa{etocframedstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\ +\csa{etocsettocstyle}\marg{vor dem Inhaltsverzeichnis}\marg{nach dem Inhaltsverzeichnis}}}} + +\subsection{In\-halts\-ver\-zeich\-nisse dar\-stellen} +\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em + \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, + \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \framebox[\linewidth][c] + {\vbox{\hsize\wd0\normalcolor\noindent + \toc\\ + \localtoc\\ + \csa{etocmulticol}\oarg{Anzahl der Spalten}\marg{Überschrift}\\ + \csa{etoclocalmulticol}\oarg{Anzahl der Spalten}\marg{Überschrift}\\ + \csa{etocruled}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \csa{etoclocalruled}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \csa{etocframed}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \csa{etoclocalframed}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \hbox{}{\itshape\ttfamily\ \ \ \ und die mit Sternchen versehenen Varianten} + }}} + +\subsection{Label und Referenzen} + +Optional dürfen die Befehle für Label oder Referenzen auf die Befehle, die die +Darstellung des Inhaltsverzeichnisses realisieren, folgen. Hierbei ist +unwichtig, ob letztere mit Sternchen versehen sind oder nicht.\par + +\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em + \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, + \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \framebox[\linewidth][c] + {\vbox{\hsize\wd0\normalcolor\noindent + \toc \csa{label}|\{toc:here\}|\\ + \toc \csa{ref}|\{toc:far\}| \\ + \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ + \localtoc \csa{label}|\{toc:here\}|\\ + \hbox{}{\itshape\ttfamily\ \ \ \ \ }% + \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich} + }}} + + +\medskip Ein \csa{ref}-Befehl, der auf einen Befehl zur Erzeugung eines lokalen +Inhaltsverzeichnisses folgt, hat \emph{keinen} Einfluss auf diesen. Wird ein +anderes Inhaltsverzeichnis erneut dargestellt, so wird nur dessen Inhalt +angepasst. Sowohl das Aussehen des Inhaltsverzeichnisses als auch die +Darstellung seiner Linien orientieren sich an dem, das gerade definiert wurde +und nicht an dem, von dem der Inhalt übernommen wurde. + +\section{Der Linien\-standard des Pakets: \csbhyp{etoc\-defaultlines}} +\label{etocdefaultlines} + +Die Linienstile stammen bereits aus einer frühen Entwicklungsphase des Pakets, +weswegen sie sich noch sehr an \TeX{} orientieren und dadurch gruselig aussehen. +Daher bieten sie keinen guten Einstiegspunkt. Oft muss man, will man an dem Stil +etwas ändern, diesen aus dem Quellcode kopieren und direkt bearbeiten. Trotzdem +soll in diesem Abschnitt erläutert werden, wie die Schriftarten, die vertikalen +Abstände, etc. des gewählten Linienstils verändert werden können. + +Wurden die vorgegebenen Linienstile nicht durch \csa{etocsetstyle} verändert, so +kann man sie mit den Befehlen \csa{etocdefaultlines} bzw. \csa{etoctoclines} +einschalten. Außer, dass der Einzug eines Unterabschnitts etwas kleiner ist als +der eines Abschnitts, gleichen sich beide Gliederungsebenen. (Wie dieses +Dokument zeigt, werden Abschnitte in Dokumentklassen, denen der Befehl +\csa{chapter} fehlt, stets mit einer fettgedruckten Type gesetzt.) +Unter-Unterabschnitte werden inline, im selben Paragraphen und ohne Nummer oder +Seitenzahl dargestellt. Dieser Stil wurde für Dokumente, die viele +Unter-Unterabschnitte enthalten, entwickelt und anschließend mit solchen +getestet. Für derartige Dokumente sollte ein zweispaltiges Layout verwendet +werden, da diese Darstellung kompakter ist als jene, die standardmäßig durch +\LaTeX{} erzeugt wird.\footnote{Außerdem werden dadurch einzelne Teil- bzw. + Kapiteleinträge am Ende einer Seite oder einer Spalte vermieden, solange diese + weiter untergliedert sind.} Verwendet man hingegen ein einspaltiges Layout und +enthält der Teil nur wenige Unter-Unterabschnitte, so wird das +Inhaltsverzeichnis im Vergleich zur mit \LaTeX{} gesetzten Variante etwas in die +Breite gezogen. Weiterhin wirkt diese Darstellung weniger hierarisch als der +\LaTeX{}-Standard, da sich die Darstellung von Abschnitten und Unterabschnitten +kaum unterscheidet. (Dies gilt besonders, wenn die Dokumentklasse den Befehl +\csa{chapter} erlaubt.) + +Da wir für das \hyperref[toc:main]{zentrale Inhaltsverzeichnis} +|\etocsetlevel{subsection}{3}| gesetzt haben, werden die Unterabschnitte und die +Unter-Unterabschnitte inline dargestellt. + +Im Gegensatz dazu wollen wir nun das zentrale Inhaltsverzeichnis so darstellen, +als ob wir eine Dokumentklasse genutzt hätten, die den Befehl \csa{chapter} +erlaubt. Daher werden die Abschnitte im Folgenden als Kapitel und die +Unterabschnitte als Abschnitte gedruckt, was wir u. a. mit Hilfe des Befehls +\csa{etocsetlevel} erreichen. Zusätzlich nutzen wir für Abschnitte, welche in +Wirklichkeit unsere Unterabschnitte sind, statt der fetten Serie einer +Schriftart die halbfette Variante. Hierfür modifizieren wir den Befehl +\csa{etocfontone}. Weiterhin nutzen wir einen gepunkteten Einzug, da dieser +weniger Platz einnimmt als der Paketstandard. + +\begin{verbatim} +\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape + \fbox{\parbox{.6\linewidth}{ + \leftskip 0pt plus .5fil + \rightskip 0pt plus -.5fil + \parfillskip 0pt plus 1fil + Dies ist das zentrale zweispaltige Inhaltsverzeichnis, das den + Standardlinienstil von \etoc nutzt, wobei die Abschnitte wie Kapitel und die + Unterabschnitte wie Abschnitte gesetzt wurden. }}} +\etocdefaultlines +\etocsetnexttocdepth{1} +\begingroup +\etocsetlevel{section}{0} +\etocsetlevel{subsection}{1} +\renewcommand*{\etocfontone}{\normalfont \normalsize} +\renewcommand*{\etoctoclineleaders} + {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} +\sloppy +\tableofcontents +\endgroup +\end{verbatim} + +\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape + \fbox{\parbox{.6\linewidth}{ + \leftskip 0pt plus .5fil + \rightskip 0pt plus -.5fil + \parfillskip 0pt plus 1fil Dies ist das zentrale zweispaltige + Inhaltsverzeichnis, das den Standardlinienstil von \etoc nutzt, wobei die + Abschnitte wie Kapitel und die Unterabschnitte wie Abschnitte gesetzt + wurden. }}} + +\etocdefaultlines +\etocsetnexttocdepth{1} + +\begingroup +\etocsetlevel{section}{0} +\etocsetlevel{subsection}{1} +\renewcommand*{\etocfontone}{\normalfont \normalsize} +\renewcommand*{\etoctoclineleaders} + {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} +\sloppy +\tableofcontents +\endgroup + +\section{\etoc individuell an\-passen} + +\subsection{Den durch \etoc vor\-de\-finierten Linien\-stil individualisieren} + +Im Folgenden sollen einfach die wichtigsten Befehle des Pakets aufgelistet werden. Man kann diese +bequem mittels \csa{renewcommand} anpassen: +\begin{verbatim} +\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries} +\newcommand*\etocfontminusone{\normalfont \large \bfseries} +\newcommand*\etocfontzero{\normalfont \large \bfseries} +\newcommand*\etocfontone{\normalfont \normalsize \bfseries} +\newcommand*\etocfonttwo{\normalfont \normalsize} +\newcommand*\etocfontthree{\normalfont \footnotesize} + +\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex} +\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} +\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} +\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} +\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} +\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} + +\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil} +\newcommand*\etocminustworightmargin{1.5em plus -0.5fil} +\newcommand*\etocminusoneleftmargin{1em} +\newcommand*\etocminusonerightmargin{1em} + +\newcommand*\etocbaselinespreadminustwo{1} +\newcommand*\etocbaselinespreadminusone{1} +\newcommand*\etocbaselinespreadzero{1} +\newcommand*\etocbaselinespreadone{1} +\newcommand*\etocbaselinespreadtwo{1} +\newcommand*\etocbaselinespreadthree{.9} +\newcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} +\newcommand*\etocabbrevpagename{p.~} % muss der Sprache angepasst werden + % deutsche Nutzer: \renewcommand*\etocabbrevpagename{S.~} +\newcommand*\etocpartname{\partname} +\newcommand*\etocbookname{Book} % muss der Sprache angepasst werden +\end{verbatim} + +Der Standardlinienstil kann innerhalb der \etoc-Umgebung nicht individualisiert +werden. Wie bereits erwähnt, wird das Paket nach Aufruf des Befehls +\etocstandardlines kaum verwendet und agiert lediglich auf globaler Ebene, +sodass die Einträge des Inhaltsverzeichnisses (hoffentlich) so dargestellt +werden, als ob das Paket \etoc fehlen würde.\footnote{Innerhalb der + KOMA-script-Klassen muss der Befehl \csa{etocstandarddisplaystyle} genutzt + werden, damit die Option |toc=left| auch für die Linieneinträge gilt.} + +Wurde mittels \csa{etocsetlevel} die Tiefe der Gliederung soweit herabgesetzt, +dass \etoc die Befehle für bestimmte Gliederungsebenen kennt, so wirkt der +Kompatibilitätsmodus, also \csa{etocstandardlines}, auch auf diese. Dies gilt +natürlich nur für Gliederungsbefehle, die dem Standard von \LaTeX{} entsprechen +und die alle Definitionen liefern, welche zum Darstellen von Einträgen im +Inhaltsverzeichnis benötigt werden. (Es muss ein Makro der Art \csa{l@irgendwas} +existieren.) + +Sobald der Befehl \csa{etocsetstyle} aufgerufen wird, wird zusätzlich der +Kompatibilitätsmodus ausgeschaltet. Es spielt hierbei keine Rolle, ob der Befehl +in der Präambel oder im Hauptteil des Dokuments steht. + +\subsection{Die Dar\-stellung eines Inhalts\-ver\-zeich\-nisses an\-spassen} +\label{ssec:customdisplay} + +Erneut wollen wir uns darauf beschränken die relevanten Makros aufzulisten, da +deren Funktion aus ihrem Namen ableitbar ist. Soll die Länge eines Befehls +verändert werden, so muss der entsprechende Befehl mittels \csa{renewcommand} +und nicht durch \csa{setlength} verändert werden. Weiterhin erlauben Befehle, +welche die Farbe verändern, nicht nur die Standardfarben. Will man ihr Verhalten +ändern, so muss man in der neuen Definition den Befehl \csa{color} aufrufen. Um +ihre Wirkung zu beenden, muss man sie so neu definieren, dass sie danach nur den +Befehl \csa{relax} enthalten. +\begin{verbatim} +\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex} +\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex} + +\newcommand*\etoccolumnsep{2em} +\newcommand*\etocmulticolsep{0ex} +\newcommand*\etocmulticolpretolerance{-1} +\newcommand*\etocmulticoltolerance{200} +\newcommand*\etocdefaultnbcol{2} +\newcommand*\etocinnertopsep{2ex} +\newcommand*\etoctoprule{\hrule} +\newcommand*\etoctoprulecolorcmd{\relax} + +% nur für gerahmte Inhaltsverzeichnisse: +\newcommand*\etocinnerleftsep{2em} +\newcommand*\etocinnerrightsep{2em} +\newcommand*\etocinnerbottomsep{3.5ex} + +\newcommand*\etocleftrule{\vrule} +\newcommand*\etocrightrule{\vrule} +\newcommand*\etocbottomrule{\hrule} +\newcommand*\etocleftrulecolorcmd{\relax} +\newcommand*\etocrightrulecolorcmd{\relax} +\newcommand*\etocbottomrulecolorcmd{\relax} + +\newcommand*\etocbkgcolorcmd{\relax} + +% Haken +\newcommand\etocframedmphook{\relax} +\end{verbatim} + +Der Befehl \csa{etocframedmphook} ist direkt hinter dem Anfang einer Minipage, +innerhalb der der Inhalt eines gerahmten Verzeichnisses gesetzt wird, verankert. + +Wurden die Farbbefehle, also \csa{...colorcmd}, nicht verändert, so expandieren +sie lediglich zu \csa{relax}. (Daher muss man für ihre Verwendung nicht die +Pakete |color| oder |xcolor| einbinden.) Hat man jedoch einen solchen Befehl - +wie zum Beispiel \csa{etocbkgcolorcmd} - so verändert, dass er nun tatsächlich +eine Farbe anzeigt, so kann dies nur mittels +|\renewcommand{\etocbkgcolorcmd}{\relax}| aufgehoben werden und nicht durch +\csa{let}\csa{etocbkgcolorcmd}\csa{relax}. + +Wie man an dem Beispiel \centeredline{|\renewcommand{\etoctoprule}{\hrule height + 1ex}|} erkennen kann, werden die Größen des oberen Rechtecks in den Maßen +|ex| und |em| angegeben. + +Sobald der Titel während der Befehlsausführung von \csa{etocruledtoc} oder +\csa{etocframedtoc} gesetzt wurde, nutzt der Paketcode dessen Schriftgröße, um +die Bedeutung von \glq1ex\grq~zu ermitteln. Natürlich dürfen auch die anderen +Befehle zur Erzeugung eines Rechtecks Maße annehmen, deren Wert sich nur durch +eine zugehörige Schriftgröße ergibt. Hierbei dient jedoch die Schrift vor dem +Inhaltsverzeichnis als Referenz. + +Wie in \TeX{} üblich, werden sowohl das Rechteck vor als auch das nach dem +Inhalt des Verzeichnisses durch einfache Einzüge (einer festgelegten Höhe) +realisiert. Es muss sich hierbei also nicht um echte Rechtecke handeln. Die +Rechtecke links und rechts vom Inhalt werden hingegen nicht durch (horizontale) +Einzüge verwirklicht. Sie stellen vielmehr Objekte einer bestimmten Weite dar. +Daher darf hier \emph{nur} die Syntax von \TeX{}-Befehlen, mit deren Hilfe man +Rechtecke erzeugt, genutzt werden. + +\section{Ein weiteres Bei\-spiel für ein farbiges Inhalts\-verzeichnis} +\label{ssec:tocclone} + +Beim Befehl \csa{etocframedstyle} wird der Titel in der Mitte des oberen Rechtecks positioniert. Dies würde im folgenden Beispiel +jedoch sehr unschön aussehen, weswegen wir den Titel innerhalb der \meta{start}-Umgebung eines Abschnittbefehls +platzieren. Hierdurch wird er innerhalb des Rahmens gesetzt. + +\begin{verbatim} +\begingroup +\definecolor{subsecnum}{RGB}{13,151,225} +\definecolor{secbackground}{RGB}{0,177,235} +\definecolor{tocbackground}{RGB}{212,237,252} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 1cm} +\renewcommand{\etocrightrule}{\vrule width .5cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} + {\shiftedwhiterule{\leftskip}{6pt}} + {\sffamily\footnotesize + \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent + \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% + \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill + \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par + \nointerlineskip\vskip3pt} + {} + +\etocsetstyle{subsection}{\etocskipfirstprefix} + {\shiftedwhiterule{1.5cm}{6pt}} + {\sffamily\small + \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent + \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% + \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill + \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par + \nointerlineskip\vskip6pt} + {} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % Auch ohne Rahmen nutzt \colorbox den Befehl \fboxsep! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +\etocsetstyle{section} +{\coloredstuff{white} + {\hfil \hyperref[toc:b]{\bfseries\large Ich bin der Zwilling von + diesem Verzeichnis (Klick mich an!)}\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} + +\etocframedstyle[1]{} +\tableofcontents \label{toc:clone} \ref{toc:globalcmds} +\endgroup +\end{verbatim} + +\begingroup +\definecolor{subsecnum}{RGB}{13,151,225} +\definecolor{secbackground}{RGB}{0,177,235} +\definecolor{tocbackground}{RGB}{212,237,252} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 1cm} +\renewcommand{\etocrightrule}{\vrule width .5cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip +\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} +{\shiftedwhiterule{\leftskip}{6pt}} +{\sffamily\footnotesize +\leftskip2.5cm\hangindent1cm\rightskip1cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par +\nointerlineskip\vskip3pt} +{} + +\etocsetstyle{subsection}{\etocskipfirstprefix} +{\shiftedwhiterule{1.5cm}{6pt}} +{\sffamily\small +\leftskip1.5cm\hangindent1cm\rightskip1cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par +\nointerlineskip\vskip6pt} +{} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +% v1.07l on the occasion of traduction into German documentation + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{white} + {\hfil \hyperref[toc:b] + {\bfseries\large Ich bin der Zwilling von diesem + Verzeichnis (Klick mich an!)}% + \hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} + +\etocframedstyle[1]{} + +\begin{figure}[ht!]\centering + \tableofcontents \label{toc:clone} \ref{toc:globalcmds} +\end{figure} +\endgroup + +Das Inhaltsverzeichnis befindet sich in einer +\hyperref[toc:clone]{float}-Umgebung, die man \vpageref{toc:clone} findet. Da +diese Art von Code keine zusätzlichen Pakete verlangt, ist er etwas +komplexer.\footnote{Zudem zeigt er die Vorliebe des Autors für die +\TeX{}-Syntax.} Außerdem wurde er in einem früheren Stadium entwickelt und +seither nicht überarbeitet. + +Da Rahmen (welche hier genutzt wurden, um die Hintergrundfarbe zu setzen) nur +die Hintergrundfarbe innerhalb einer Seite verändern, würde es sich anbieten, +weitere Pakete einzubinden, mit deren Hilfe man die Hintergrundfarbe über +mehrere Seiten hinweg verändern kann. + +Alle Befehle, welche die Farbe verändern, sind in \etoc zu Beginn so definiert, +dass sie nichts verändern. Daher kann der Nutzer selbst entscheiden, ob er +Farben nutzen will oder nicht. + + +\clearpage +\etocdepthtag.toc {tips} + +\part{Tipps} +\label{part:tipsandtricks} + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents + +\section{\ldots\ und Tricks} + +\subsection{Hacken "`framed parboxes"'} + + +\begin{verbatim} +\etocdefaultlines +\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} +\etocruled{\color{green}\fboxrule2pt\fboxsep1ex + \fbox{\raisebox{-\fontdimen22\textfont2} + {\color{blue}\parbox{.5\linewidth} + {\normalfont Dieser Text ist vertikal perfekt zentriert + unter Berücksichtigung der \emph{surrounding horizontal rules.}}}} +\ref{toc:globalcmds} +\end{verbatim} + +\etocdefaultlines + +\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} + +\etocruled{\color{green}\fboxrule2pt\fboxsep1ex + \fbox{\raisebox{-\fontdimen22\textfont2} + {\color{blue}\parbox{.5\linewidth} + {\normalfont Dieser Text ist vertikal perfekt zentriert + unter Berücksichtigung der \emph{surrounding horizontal rules.}}}}} + \ref{toc:globalcmds} + + +\subsection{Umstellen der Ebenen} +\label{subsec:interverting} + +Lasst uns alle Unterabschnitte zeigen und aufzählen, die in diesem Dokument +vorkommen (Siehe \autoref{part:surprising} für andere Verwendungen dieser Technik.): +\begin{verbatim} +\etocsetnexttocdepth{2} +\begingroup +\etocsetlevel{part}{3} +\etocsetlevel{section}{3} +\etocsetstyle{subsection} + {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} + {\normalfont\bfseries\item} + {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} + {\end{enumerate}} +\renewcommand{\etoccolumnsep}{2.75em} +\renewcommand{\columnseprule}{1pt} +\etocmulticol[3]{\subsection{Alle Unterabschnitte in diesem Dokument}} +\endgroup +\end{verbatim} + +\etocsetnexttocdepth{2} + +\begingroup +\etocdefaultlines +\etocstandarddisplaystyle +\etocsetlevel{book}{3} +\etocsetlevel{part}{3} +\etocsetlevel{chapter}{3} +\etocsetlevel{section}{3} +\etocsetstyle{subsection}{\small +\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} +{\normalfont\bfseries\item} +{\roman{enumi}. \mdseries\etocname{} (\etocnumber, S.~\etocpage)} +{\end{enumerate}} + +\renewcommand{\etoccolumnsep}{2.75em} +\renewcommand{\columnseprule}{1pt} + +%%\etocmarkbothnouc{List of all subsections} +%% le mark (\markright) est fait par \subsection + +\etocmulticol[3]{\subsection{{Alle Unterabschnitte in diesem Dokument}}\label{toc:allsubsections}} + + +\endgroup + +\subsection{Sta\-ti\-sti\-ken anzeigen}\label{ssec:statistics} + +Jeder Teil dieses Dokuments beginnt mit einem Paragraphen, der sagt, wieviele +Kapitel und Unterkapitel er hat. Nun, jeder von diesen Paragraphen ist ein +Inhaltsverzeichnis! Wir haben ein Makro \csa{thispartstats} geschaffen, um dies +zu tun. Es nutzt "`Speicher"'-Boxen, um die Informationen über die ersten und +späteren Kapitel und Unterkapitel zu halten. Boxen zu nehmen, ist die einfachste +Art und Weise |hyperref|-Links für spätere Verwendungen zu kapseln (ob es einer +ist oder keiner). Allerdings kann man dann nichts an der Schriftart oder Farbe +ändern (die \TeX -Primitive \csa{setbox} eher nehmend als von \LaTeX{} +\csa{sbox} würde die Farbe Farbe um das ohne Boxen gespeicherte Feld verändern). +Wenn eine solche Notwendigkeit entsteht, muss man von der Boxenverwendung zum +Makro nehmen wechseln und die |hyperref|-Daten für später speichern, wie im oben +im Code von \autoref{sec:molecule} vorgestellt. Wir präsentieren auch diese +zweite Methode. + +Aber als Erstes der Code von \csa{thispartstats}:\par +\begin{verbatim} +\newsavebox\firstnamei \newsavebox\firstnumberi +\newsavebox\lastnamei \newsavebox\lastnumberi +\newsavebox\firstnameii \newsavebox\firstnumberii +\newsavebox\lastnameii \newsavebox\lastnumberii +\newcounter{mycounti} \newcounter{mycountii} +\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{} +\newcommand*{\oldtocdepth}{} +\newcommand*{\thispartstats}{% + \setcounter{mycounti}{0}% + \setcounter{mycountii}{0}% + \def\thispartstatsauxi{% + \sbox{\firstnamei}{\etocname}% + \sbox{\firstnumberi}{\etocnumber}% + \def\thispartstatsauxi{}}% + \def\thispartstatsauxii{% + \sbox{\firstnameii}{\etocname}% + \sbox{\firstnumberii}{\etocnumber}% + \def\thispartstatsauxii{}}% + \begingroup + \etocsetstyle{subsection} {} {} + {\thispartstatsauxii + \stepcounter{mycountii}% + \sbox{\lastnameii}{\etocname}% + \sbox{\lastnumberii}{\etocnumber}} {}% + \etocsetstyle{section} + {} + {} + {\thispartstatsauxi + \stepcounter{mycounti}% + \sbox{\lastnamei}{\etocname}% + \sbox{\lastnumberi}{\etocnumber}} +% Hier wird ein Befehl definiert, der fuer jedes Teil ein paar Fakten sammelt +% und ausgibt. + {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält + \arabic{mycounti} Abschnitt\ifnum\value{mycounti}>1 e\fi{} und + \arabic{mycountii} Unterabschnitt\ifnum\value{mycountii}>1 e\fi. Der Name des ersten + Abschnitts lautet + \glqq\unhbox\firstnamei{}\grqq~und er hat die Gliederungsnummer + \glqq\unhbox\firstnumberi\grqq. Der Name des letzten Abschnitts lautet + \glqq\unhbox\lastnamei{}\grqq~und er hat die Nummer + \glqq\unhbox\lastnumberi\grqq. + \ifnum\value{mycountii}>0 Der erste + Unterabschnitt heißt + \glqq\unhbox\firstnameii{}\grqq~und er hat die Nummer + \glqq\unhbox\firstnumberii\grqq. Der Name des letzten Unterabschnitts ist + \glqq\unhbox\lastnameii{}\grqq~und dessen Nummer ist + \glqq\unhbox\lastnumberii\grqq.\fi }% + \etocinline + \etocsettocstyle {}{} + \etocsetnexttocdepth{2}% + \localtableofcontents % to be used at the top level of a Part. + \endgroup +} +\end{verbatim} + +Und nun, die Variante mit Makros anstelle von der mit Boxen (diese Variante +steht hier für die Verwendung in einem Kapitel). +\begin{verbatim} +\makeatletter +\newcommand*\firstsubname {} \newcommand*\lastsubname {} +\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {} +\newcommand*\thisspecialstatsaux{} +\newcommand*{\thisspecialstats}{% + \setcounter{mycounti}{0}% + \def\thisspecialstatsaux{% + \let\firstsubname\etocthelinkedname + \let\firstsubnumber\etocthelinkednumber + \def\thisspecialstatsaux{}} + \begingroup + \etocsetstyle{subsection} + {} + {} + {\thisspecialstatsaux + \stepcounter{mycounti}% + \let\lastsubname\etocthelinkedname + \let\lastsubnumber\etocthelinkednumber } + {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält + \arabic{mycounti} Unterabschnitt\ifnum\value{mycounti}>1 e\fi{}. Der Name des ersten + Abschnitts lautet\emph{\firstsubname{}} und er hat die Gliederungsnummer + {\firstsubnumber}. Der Name des letzten Unterabschnitts lautet + \emph{\lastsubname{}} und er hat die Nummer{\lastsubnumber}.} + \etocsettocstyle {}{} + \etocinline + \etocsetnexttocdepth {1}% + \localtableofcontents % to be used within a section + \endgroup +} +\makeatother +\end{verbatim} + +\subsection{Tiefe Tags nehmen} +\label{ssec:tocwithdepthtags} + +Wir wollen ein TOC, das für jeden |\part| eine Überschrift hat (außer der letzte +Teil mit dem Quellcode, wofür beschließen, ihn nicht einzubeziehen), und wir +wollen \autoref{part:globalcmds} öffnen für die Paragraphen. Um dies zu +erreichen, fügen wir zu dieser Quelle verschiedene +\csb{etocdepthtag.toc}-Befehle und es bleibt jetzt, zu setzen die Levels für +jeden Tag mit \csb{etocsettagdepth} (dies wurde oben in diesem Dokument +verwendet in \autoref{sec:secondexample}, in einer Gruppe, damit es keine +Auswirkungen auf andere Inhaltsverzeichnisse hat). + +Allerdings sind die Linienstile des Pakets nicht in der Lage Paragraphen +anzuzeigen und die Standardlinienstile der Dokumentklasse geben zu viel +vertikalen Abstand (in diesem Zusammenhang) bei der Anzeige einer +Teilüberschrift im TOC aus.Deshalb kochen wir unseren eigenen, schnell +entwickelten Linienstil, in der Art von \autoref{sec:firstexample} (aber auf dem +Weg Seitenzahlen von rechts, was mehr wie eine Methode von \LaTeX2e's +|\@dottedtocline| ist; und mehrzeilige Überschriften lassen nun den Bereich +unter den Zahlen leer, im Gegensatz zu dem Code von \autoref{sec:firstexample}). +Und nach ein paar Minuten für die Wahl der Längen (jetzt ist das erstmal getan, +es kann leicht recycelt) erhalten wir: + +\etocsetnexttocdepth {all} +\begingroup +\parindent 0pt +\leftskip 0cm +\rightskip 0.75cm +\parfillskip -\rightskip +\newcommand*{\EndParWithPagenoInMargin} + {\nobreak\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par} +\renewcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} +\newcommand*{\EndParWithPagenoInMarginAndLeaders} + {\nobreak\leaders\etoctoclineleaders\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par } +\etocsetstyle {part} + {} + {\leavevmode\leftskip 1cm\relax} + {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% + \etocname\EndParWithPagenoInMargin\smallskip} + {} +\etocsetstyle {section} + {} + {\leavevmode\leftskip 1.75cm\relax} + {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip 2.75cm\relax } + {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 4cm\relax } + {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {paragraph} + {} + {\leavevmode\leftskip 5.5cm\relax } + {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {part} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {part} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {paragraph} +\etocsettagdepth {custom} {part} +\etocsettagdepth {tips} {part} +\etocsettagdepth {code} {none} +\renewcommand\etoctoprule {\hrule height 3pt\relax } +\renewcommand\etoctoprulecolorcmd {\color{blue}} +\renewcommand\etocaftercontentshook + {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } +\etocruledstyle [1]{\Large\bfseries + \fbox{\makebox[8cm]{Ein TOC -- nehmend tiefe Tags}}} +\sloppy +\tableofcontents + +\begin{verbatim} +\etocsetnexttocdepth {all} +\begingroup +\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip +\newcommand*{\EndParWithPagenoInMargin} + {\nobreak\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par} +\renewcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} +\newcommand*{\EndParWithPagenoInMarginAndLeaders} + {\nobreak\leaders\etoctoclineleaders\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par } +\etocsetstyle {part} + {} + {\leavevmode\leftskip 1cm\relax} + {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% + \etocname\EndParWithPagenoInMargin\smallskip} + {} +\etocsetstyle {section} + {} + {\leavevmode\leftskip 1.75cm\relax} + {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip 2.75cm\relax } + {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 4cm\relax } + {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {paragraph} + {} + {\leavevmode\leftskip 5.5cm\relax } + {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {part} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {part} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {paragraph} +\etocsettagdepth {custom} {part} +\etocsettagdepth {tips} {part} +\etocsettagdepth {code} {none} +\renewcommand\etoctoprule {\hrule height 3pt\relax } +\renewcommand\etoctoprulecolorcmd {\color{blue}} +\renewcommand\etocaftercontentshook + {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } +\etocruledstyle [1]{\Large\bfseries + \fbox{\makebox[8cm]{A TOC using depth tags}}} +\sloppy +\tableofcontents +\endgroup +\end{verbatim} +\endgroup + +\subsection{Das TOC als eine Tabelle setzend (die alte Weise)} +\label{ssec:tocastableold} + +%%% ALT TEXT: +% Tabellenzellen erstellen Gruppen; Definitionen von |\etocname|, |\etocnumber|, +% |\etocpage| sind lokal gemacht, also wenn die erste Zelle einer Zeile ist, wo +% die |.toc|-Dateizeile gelesen wird und|\etocname| und |\etocnumber| definiert +% wird, werden diese Definitionen nach dem Tabularzeichen |&| +% verloren gehen. Der +% Quellcode von \etoc beginnt, die "`Anfangs"'- und "`End"'teile der Linienstile +% zu öffnen oder Gruppen zu schließen, durch ein |&| beispielsweise im +% "`Präfix"'-Teil des Linienstils ist nicht zu erwarten. + +% Weiterhin, ähnlich sieht die Sache der Neudefinition von |\contentsline|, made +% by \etoc , aus, jedesmal wird ein TOC gesetzt. Es wird nach dem +% ersten Argument +% getan, wenn \csb{etocsettocstyle} ausgeführt wurde, weil, wenn dieses Argument +% eine Tabelle öffnet, die |etoc|-Neudefintion der |\contentsline| in die erste +% Zelle der ersten Zeile getan werden will und danach verloren geht. + +% So, mit dem Öffnen und Schließen mit |\etocsettocstyle| und dem +% Nehmen von |&| | +% und | innerhalb eines Level-Stils, kann man nicht direkt ein TOC +% in eine Tabelle +% setzen. + +% Der \etoc -Quellcode könnte geändert werden, zu machen Modifizierungen von +% einigen relevanten globalen Definitionen, aber ich habe mich dagegen +% entschieden. Setzen als eine |tabular| (oder später als |longtable|) wird nur +% fortgeschrittene Anwendern gesucht und fortgeschrittene Anwender können die +% Technik einsetzen, die in \autoref{tocastree} erklärt wurden. Hier ist ein +% Beispiel mit einem vollverlinkten Inhaltsverzeichnis. Der Code kommt nach der +% Tabelle. + + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +Due to, among other things, the fact that alignment cells create and close +groups, and that by default definitions of \csb{etocname}, \csb{etocnumber}, +\csb{etocpage} made by \etoc are local, it was not easy to typeset a TOC as +table with \etoc, prior to release |1.08|. + +Not only \csb{etocname} etc... caused a problem, but also the basic +redefinition of \csa{contentsline} was made by \etoc only after the +first argument to \csb{etocsettocstyle} had been executed, hence if this +argument were to open a tabular, the \etoc redefinition of +\csa{contentsline} would be done in the first cell of the first row and +get lost thereafter. + +Thus one had to resort to the technique explained in \autoref{tocastree} +of using the execution of \csa{tableofcontents} as a way to store data +which was then displayed later. + +For the record, here is how the TOC from \autoref{sec:tocastable} was +coded in the old days. We don't have here the problems with the +positioning of |\hline|'s we face with the newer method; on the other +hand we must manipulate token registers which are not familiar to most +\LaTeX{} users (macros could be used, but would be more cumbersome, +except perhaps if using the \eTeX{} \csa{unexpanded}). + +The method here is the most powerful because it filters out of the +|.toc| file only the data we want (the other things are not ignored, +they are executed but hopefully do not create havoc; typically they are +language changing instructions, or updates to certain counters, etc...), +and we are less susceptible to fall potential victims of various +external macros inserted in the |.toc| file by other packages. + +Note: rather than |\toks| registers it would be easier here to use \eTeX{} +\csa{unexpanded} primitive. See for example \autoref{sec:mindmap}. +\end{otherlanguage} + + +\begin{verbatim} +\newtoks\toctabletok +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} + +\newcommand*\PreparePart{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\etocthelinkedname}% + \toks4 \expandafter{\etocthelinkedpage}% + \edef\toctablepiece {\noexpand\hline + \noexpand\strut\the\toks0 &\noexpand\bfseries\the\toks2 + &\the\toks4 \noexpand\\\noexpand\hline}% +} +\newcommand*\PrepareSection{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\etocthelinkedname}% + \toks4 \expandafter{\etocthelinkedpage}% + \edef\toctablepiece {\the\toks0 &\the\toks2 &\the\toks4 \noexpand\\}% +} +% new version for 1.07k, 2014/03/06 +\newcommand*{\PrepareSubsection}{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\expandafter\itshape\etocthelinkedname\strut}% + \toks4 \expandafter{\expandafter\itshape\etocthelinkedpage}% + \edef\toctablepiece{&\noexpand\makebox[1cm][c]{\the\toks0}% + \noexpand\parbox[t]{\dimexpr6cm-\tabcolsep\relax} + {\noexpand\sloppy\the\toks2}% + &\the\toks4 \noexpand\\}% +} + +\begingroup +\etocsetstyle{part}{}{}{\PreparePart \appendtotok\toctabletok\toctablepiece}{} + +\etocsetstyle{section}{}{}{\PrepareSection \appendtotok\toctabletok\toctablepiece}{} + +\etocsetstyle{subsection}{}{}{\PrepareSubsection\appendtotok\toctabletok\toctablepiece}{} + +\etocsettocstyle + {\toctabletok{\hypersetup{hidelinks}% + \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}\hline + \multicolumn{3}{|c|}{\Large\bfseries\strut TABLE OF CONTENTS}% + \\\hline\hline}} + {\global\toctabletok\expandafter{\the\toctabletok\hline\end{longtable}}} +\etocsettocdepth {subsection} +\tableofcontents +\the\toctabletok +\endgroup +\end{verbatim} + +\subsection{Kompatibilität mit anderen Paketen} +\label{etocaftertochook} + +% JFBU modifiziert Januar 23, 2015 +Die Inhalte der |.toc|-Datei (falls bereits vorhanden) werden einmal in den +Speicher von \etoc getan, bei |\begin{document}|. \footnote{Neu mit |1.07m|. + Früherer Versionen benutzten die |.toc|-Datei bei + \csa{usepackage\{etoc\}}. Danke an Denis Bitouzé für ein Babel-etoc + Problem entdecken zu haben.} + +\begin{framed} + Man sollte \etoc \emph{nach} \texttt{babel} laden. +\end{framed} + + Die |.toc|-Datei bleibt für andere Pakete nutzbar für + Lesevorgänge bis zum Ort des ersten Inhaltsverzeichnisses, zu diesem + Zeitpunkt wird ein Schreib-stream durch \etoc geöffnet und von diesem Punkt + aus wird die Datei gelöscht bis ihr Inhalt wieder auf die Platte von + \LaTeX{} am Ende der Kompilierung geschrieben wurde. + +\etoc lädt das Paket |multicol|. + +\etoc erwartet die Sektionierungseinheiten des Dokuments, um ihre Daten in eine +Datei mit der Endung |.toc| zu schreiben, in Form von Linien, die enthalten den +\csa{contentsline}-Befehl und dessen Argumente. +\textbf{UEBERSETZUNG NOETIG} +\begin{otherlanguage}{english} + \etoc requires the |.toc| file to use the |\contentsline| macro (possibly + patched by other packages). It is thus incompatible with the |beamer| class. + However, if |beamer| is used in an article mode, i.e., with the article + class in conjunction with the |beamerarticle| package, then \etoc should + work. +\end{otherlanguage} + +Es ist |hyperref| bekannt und hoffentlich kompatibel mit ihm: die Macros +\csa{etocname}, \csa{etocnumber} und \csa{etocpage} enthalten die +|hyperref|-Links, wenn vorhanden (Beachten Sie, dass die +\emph{linktoc=all}-Option von |hyperref| mitteilt, dass ein Link zur +Seitenzahl zu setzen ist, für ein einen toc-Eintrag.). Beispielsweise sind die +Inhaltsverzeichnisse des vorliegenden Dokuments komplett verlinkt. +Es ist kein Thema, ob \etoc vor oder nach |hyperref| geladen wird. + +Die Release |1.07k| fügt Kompatibilität mit dem Paket |tocloft| hinzu: +\footnote{\url{http://ctan.org/pkg/tocloft}} Schritte wurden getan, um eine Neudefinition +von |\tableofcontents| zu vermeiden, getan von |tocloft| an |\begin{document}|. +% + +Solange \etoc ungeschickt ist im Kompatibilitätsmodus, wird von |tocloft| die +Anpassung sowohl für den Lin ienstil als auch den TOC-Titel getan. Man kann +immer noch von den \emph{tiefen Tags}-Management mit \etoc profitieren, von +seinem |\localtableofcontents|, von seinem |\label+\ref|-Mechanismus. Man kann +|\etocsetstyle| nehmen, um mit \etoc das Layout des TOC zu definieren und dann +eher |tocloft| für etwas anderes, wenn auf |\tableofcontents| folgen +\csb{etocstandardlines} und \csb{etocstandarddisplaystyle}. In diesem +Kompatibiltätsmodus |\etocsetlevel{division unit}{6}| wird die gewählte +Bereichsebene gerendert, aber der Austausch von Ebenen ist andererseits nicht +möglich. +\begin{framed} + Man sollte \etoc \emph{nach} \texttt{tocloft} laden. Sonst wird eine Warnung + ausgegeben. +\end{framed} + +Die Release |1.07l| hat ebenfalls die Kompatibilität mit der |memoir|-Klasse +verbessert: Seine |appendix|-Ebene kann mit \etoc gemacht werden. Es ist die +gleiche Ebene wie wie bei |chapter|, also der Kapitelebenstil kann eventuell ein +Test für einige boolesche-Ausdrücke sein, die aktiviert sein können via einer +Instruktion an die |.toc|-Datei aufgenommen werden, wenn man zwei Arten von +Unterteilungen unterscheidet. + +\etoc kann nicht wirklich mit Paketen zusammensein, die +\csa{tableofcontents}-Befehle ändern: Eine Art Waffenstilstand kann erreicht +werden, wenn \etoc zuletzt geladen wird, daher ist es der Gewinner. + \begin{framed} + Ändern Sie nicht den |\tableofcontents|-Befehl, wie diesen folgenden: + \centeredline{|\let\oldtableofcontents\tableofcontents|,} + \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents\mystuff}|,} + da dies den |\label/\ref|-Mechanismus unmöglich macht. Sie können vielmehr + \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} ausführen und es + ergibt auch \csb{etocaftercontentshook}, das führt ein bisschen eher + \footnotemark{} aus, gerade vor dem Schließen des Teils vom toc-Anzeigestil + (und damit innerhalb einer Gruppe). + \end{framed} +\footnotetext{Im Gegensatz zu \csa{etocaftertochook}, + \csa{etocaftercontentshook} wird nicht ausgeführt, wenn |tocdepth| das + Drucken des TOC nicht ermöglicht.} + +\etoc zu verwenden, kann unvereinbar sein mit dem Paket +|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; jetzt lebt es , +sortierend, wie es deaktiviert die Modifikationen des |\tableofcontents| durch +|tocvsec2| (getan im Stile von oben) und es kanzelt auch andere |toc|-bezogene +Macros, aber es reimplantiert partiell ihre Funktionalität mit +\csb{etocsettocdepth.toc}. In der Art und Weise, die letzten beiden \LaTeX-Läufe +sind für das erneute Nehmen des Befehls in einem Dokument notwendig, um einen +Effekt im Inhaltsverzeichnis zu haben. + +Wenn ein \localtoc durch den Nutzer in das Dokument aufgenommen wird, eine +Zeile, in einen inneren \etoc-Befehl und eine Identifikationszahl in die +|.toc|-Datei aufgenommen wird. Das korrekte Inhaltsverzeichnis wird nur nach dem +nächsten \LaTeX -Lauf angezeigt werden. + +Es ist möglich (unter Verwendung des Pakets|tocloft| beispielsweise), im +gesamten Dokument die Makros \csa{l@section}, \csa{l@subsection} \ldots{} zu +benutzen und der Effekt wird im nächsten Inhaltsverzeichnis durch den +Kompatibilitätsmodus von \etoc sichtbar werden. + +\textbf{UEBERSETZUNG NOETIG} + +\begin{otherlanguage}{english} +It is possible to use simultaneously \etoc and +{\color{niceone}|tableof|}\footnote{\url{http://ctan.org/pkg/tableof}}. Release +|1.08| of \etoc requires at least version |1.4a| of |tableof|. If +\csb{etocglobaldefs} is put in the preamble, this must be after the loading of +package |tableof|. {\color{niceone}|tableof|} command \csa{nexttocwithtags} +should work as expected. + +{\color{niceone}|tableof|} commands \csa{tableof}, \csa{tablenotof}, ... will +typeset the (a priori global) table of contents according to the document +class defaults, obeying the \etoc depth tags; as explained in the |tableof| +documentation they do not typeset a TOC title. They should \emph{not} be used +in case \csb{etocglobaldefs} was issued before, except if its scope has been +terminated since then, or \csb{etoclocaldefs} has cancelled its influence. +\end{otherlanguage} + +\subsection{\TeX -nische Sachen} + +Die \csa{etocname}, \csa{etocnumber}, \csa{etocpage} Befehle sind gegen +vorzeitige Expansion geschützt. Sie enthalten geeignete |hyperref|-Links, wenn +das Paket |hyperref| geladen und aktiviert für das TOC ist. Die Befehle +\csa{etoclink} und \csa{etocifnumbered} sind auch gegen vorzeige Expansion +geschützt. Auch \csb{etociffirst} und \csb{etoctoccontentsline}. + +Andererseits \csb{etocthename}, \csb{etocthenumber}, \csb{etocthepage}, haben +keine Anbindung an |hyperref|-Links und sind nicht gegen Expansionen geschützt. +Und \csb{etocthelinkedname}, \csb{etocthelinkednumber}, +\csb{etocthelinkedpage} sind auch nicht gegen Expansionen geschützt. + +Befehle wie \csb{etocsetstyle}, \csb{etocsetlevel}, \csb{etocsettocstyle}, +\csb{etocmulticolstyle}, \csb{etocruledstyle}, \csb{etocframedstyle} folgen +Gruppierungen von \LaTeX. Alle TOCs werden in Gruppierungen gesetzt. + +\subsection{Fehler und Katastrophen} + +Nach der Verwendung von \csa{etocsetstyle}für eine Ebene nehmen die restlichen, +nicht angepassten Ebenen die Standardstile von \etoc (diejenigen, die aktiviert +werden von \csa{etocdefaultlines}). Man muss sicherstellen, dass alle Ebenen, +die für das nächste Inhaltsverzeichnis gebraucht werden, miteinander kompatibel +sind: Insbesonders, dass die Standardlinienstile jeweils im "`vertikalen Modus"' +gestartet werden. + +Wenn man mehrere \toc-Befehle in einem Dokument verwendet, sollte man sich +hüten, mehrere Satzanweisungen in der |.toc|-Datei zu addieren, so sie mit \toc +ausgeführt für alle TOCs ausgeführt werden: Auch für \localtoc spielt es keine +Rolle, ob die Anweisungen Material außerhalb des Anwendungbereichs betreffen, +sie werden sie trotzdem erhalten. Falls unbedingt erforderlich (aber es das +sollte es nie) müssen dies Instruktionen so sein, dass einfach aktiviert oder +deaktiviert werden von der Dokumentquelle, wie es sein muss. + +So wie es üblich ist bei TOCs und Labels, muss nach jeder Änderung \LaTeX{} eine +bestimmte Anzahl von Durchführungen haben, um für das Dokument das endgültige +Aussehen zu erhalten (mindestens zweimal durchlaufen). + + + +\clearpage +\etocdepthtag.toc {code} + +\part{Der Code} + +\section{Zeitstempel} + +Dies ist die deutsche Dokumentation von \texttt{\etocDEdocdate}, erzeugt von der +Quelldatei mit dem Stempel \texttt{\etocdtxtimestamp}. Die dokumentierte +Paketversion ist \texttt{\etocDEpkgversion} von \texttt{\etocDEpkgdate}. + +% STOP GERMAN (DEUTSCH) VERSION + +^^Afi + +^^Acatcode92 0 + +\catcode1 13 + +\begingroup +\renewcommand\lowast{{\normalsize\raisebox{-.4\height}{*}}} +\small + +\ifnum\ForEnglish=1 + \section{Change history} +\fi + +\ifnum\ForDeutsch=1 + \section{Änderungen} +\fi + +\selectlanguage{english} + +\setlength{\columnsep}{\etoccolumnsep} + +\makeatletter + +% 27 avril 2014 un petit hack pour hyphénation (éventuelle) en allemand +% j'ai déjà ~ qui sera de catcode 0, cependant il faudrait aussi les accolades, +% donc finalement pour aller vite, je rends le + actif. Je modifie aussi le test +% fait par \jfverbaspace (n'ayant pas commenté mon code, j'ai dû réfléchir pour +% me rappeler à peu près ce que c'était censé faire). + +\def\jfverbatim{\@beginparpenalty \predisplaypenalty + \parindent \z@ + \parfillskip \@flushglue + \parskip \tw@\p@ plus 1fil\relax + \let \do \@makeother \dospecials \makestarlowast \catcode`+ \active + \begingroup\lccode`~`+ + \lowercase{\endgroup\def~[##1]{\foreignlanguage{ngerman}{##1}}}% + \catcode`^ \active + \begingroup\lccode`~`^ + \lowercase{\endgroup\def~{\nopagebreak}}% ajouté 2014/04/28, oblige à un peu + % plus de mark-up cependant + \catcode`\~\z@ + \footnotesize\normalfont\baselineskip10pt\relax + \frenchspacing \obeyspaces \jf@xverbatim } + +\begingroup +\catcode `|=0 \catcode `[= 1 \catcode`]=2 +\catcode `\{=12 \catcode `\}=12 \catcode`\\=12 +|long|gdef|jf@xverbatim#1\end{jfverbatim}[#1|end[jfverbatim]] +|endgroup + +\def\endjfverbatim{} + +\newdimen\jfverbadim + +\everypar{\leftskip\jfverbadim\bgroup + \def\par{\egroup\jfverbadim\z@\@@par}% + \def\jfverbaspace#1{\if\@sptoken\string#1\unskip\else\ \fi#1}} + +\begingroup\obeyspaces\def\x{\endgroup% +\def {\ifvmode\advance\jfverbadim.5em\relax\else\expandafter\jfverbaspace\fi}}\x + +\makeatother + +\begin{multicols}{2} +\begin{jfverbatim} +v1.08a [2015/03/13]^ + + \etocname, \etocnumber and \etocpage are now the robust + variants of \etocthelinkedname, \etocthelinkednumber and + \etocthelinkedpage. This should arguably have been done since + the addition of the latter to etoc with v1.07f [2013/03/07]. + The earlier \etocname etc... contained the hyperlink + destination only in an unexpanded form. + + The documentation has a brand new title page and a new section + The TOC as a TikZ mind map both illustrating further uses of + etoc to display tables of contents as trees in an automatic + manner. + + +v1.08 [2015/03/10]^ + + \etocskipfirstprefix may now appear anywhere in the + part of a level style. + + New commands \etociffirst, \etocxiffirst, \etocxifnumbered. + + It is now possible to issue line style specifications directly + with & and \\ tokens, in order to typeset a TOC as a tabular + or longtable with the opening for example in the first + argument of \etocsettocstyle and the closing in its second + argument. + + It is mandatory for such uses to issue \etocglobaldefs which + tells etoc to proceed globally for certain definitions. This + is also useful in the context of the inline environments of + package enumitem. + + On this occasion, various old parts of the code have been + improved. + + +v1.07n [2015/03/05]^ + + No more use of \toks@ when etoc constructs \etocthelinkedname + etc... Thus \toks@ can be put in the line styles in order to + accumulate information. Only useful if it is certain nothing + else will change \toks@ either. + + In the documentation: list of main commands now in alphabetic + order. + + +v1.07m [2015/01/23]^ + + Reading of .toc file is delayed to \begin{document} to account for + possible Babel active characters used therein. Thanks to Denis + Bitouzé who reported a Babel related problem. + + Improved global toc display emulation under KOMA-script classes. + + New command \etocbeforetitlehook. New command \etocdisplay. + + +v1.07l [doc of 2014/04/29]^ + + Added to the documentation an example of use of \etocthelinkedname together + with an enumitem inline itemize* environment; moved main TOC to immediately + after the title, and license to the first pages. + + Incorporation of the translation into German done on the initiative of + +[Christine Römer] by +[Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel + Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU Jena).] My + grateful thanks to all! + + +v1.07l [2014/04/22]^ + + Fixes a bug with the 1.07k compatibility layer with tocloft which had broken + the 1.07k (sic) compatibility with memoir (yes, memoir class 1.07k testing + had been done before adding the tocloft thing to the source code . . . ). + Also, etoc when detecting tocvsec2 now checks if this is under the memoir + class, as then nothing special needs to be done to rescue \tableofcontents, + contrarily to the situation with the native tocvsec2. + + +v1.07k [2014/03/06]^ + + Compatibility with package tocloft; and improved compatibility with + class memoir. Novel TOC example in Overview. + + +v1.07j [2013/12/03]^ + + Some issues with the documentation formatting (now two-sided) have been + addressed, and a novel documentation section ``Typesetting the TOC as a + table'' has been added. Very minor code change (\Etoc@readtoc). + + +v1.07i [2013/10/21]^ + + Changes to the \etocmulticolstyle and \etocruledstyle codes + to lessen the risk of a page break after the title (in the one-column case). + + +v1.07h [2013/10/16]^ + + New commands \etocdepthtag.toc, \etocsettagdepth, \etocobeydepthtags, + \etocignoredepthtags. + + +v1.07g [2013/10/13]^ + + New commands \etocsettocdepth, \etocsettocdepth.toc, + \etocobeytoctocdepth, \etoc~-ignoretoctocdepth which + emulate part of tocvsec2 functionality ; measures to + make tocvsec2 partially compatible with etoc. + + New commands \etocsetnexttocdepth, \invisibletableofcontents, + \invisiblelocaltableofcontents. + + Switched from tikz-qtree to forest for the first `toc as + tree' example. + + Command names are linked to their descriptions, and many + other changes in the documentation. + + Removed printing of temporary message when the local toc + id is not yet stabilized; indeed \localtableofcontents + can have many uses, such as filling up some token list + register and one may wish to not have anything typeset, + even in an intermediate run. + + All of tex etoc.dtx, etex etoc.dtx, xetex etoc.dtx, latex + etoc.dtx, pdflatex etoc.dtx are now possible, and the + extracted file etoc.tex allows easy customization of + compilation options for the documentation (default is via + dvipdfmx which produces the smallest file). + + +v1.07f [2013/03/07]^ + + New macros \etocthelinkedname, \etocthelinkednumber, + \etocthelinkedpage, and \etocthelink. + + +v1.07e [2013/03/01]^ + + Improvements in the package own line styles with + regards to penalties and vertical spaces. + + Addition to the documentation of an example of + a tree-like table of contents (uses tikz). + + More such examples added 2013/03/03. + + +v1.07d [2013/02/24]^ + + Minor code improvements and new documentation + section ``Another compatibility mode''. + + +v1.07b [2013/02/02]^ + + Removal of the \xspace from the macros \etocname, + \etocnumber, \etocpage. + + Additional examples in the documentation. + + +v1.07 [2013/01/29]^ + + New commands: + + \etocthename, \etocthenumber, \etocthe~-page, \etoclink, + + \etoctoccontentsline, \etoctoccontentsline~lowast + + \etocnopar, \etocaftercontentshook + + Modified command: \etocmulticolstyle + + New documentation section ``Surprising uses of etoc'' which + explains how to do ``Lists of arbitrary things'', in + addition to the tables of contents. + + +v1.06 [2012/12/07]^ + + The standard macros \l@section etc... are modified only + during the calls to \tableofcontents; they can thus be + customized as will by the user (with the help of a + package like tocloft) and this will be taken into account + by etoc for the TOCs typeset in compatibility mode. + + +v1.05 [2012/12/01]^ + + \localtableofcontents replaces \tableofcontents~lowast (for + compatibility with the memoir class). + + Compatibility with KOMA-script and memoir document + classes. + + +v1.04 [2012/11/24]^ + + A (possibly local) table of contents can be labeled: + + \tableofcontents \label{toc:1} + + and reproduced elsewhere in the document (with a possibly + completely different layout): + + \tableofcontents \ref{toc:1} + + +v1.02 [2012/11/18]^ + + Initial version. + +\end{jfverbatim} +\end{multicols} +\endgroup % group for modified verbatim printing of the changes log + +\makeatletter + \let\check@percent\original@check@percent +\makeatother + +\small + +\ifnum\ForEnglish=1 +\section{Implementation} +\fi + +\ifnum\ForDeutsch=1 +\section{Ausführung} +\fi + +\indent % !!!!!!!!!!!!!!!!! Lundi 09 mars 2015 à 09:32:22 +% PUTAIN DE BORDEL DE MERDE AVEC CES \trivlist +% il faut faire un paragraphe après \section sinon pas d'espacement +% vertical en sortie de blocs macrocode. Pas évident à trouver, vu que +% je customisais différentes choses qui pouvaient affecter macrocode. + +% 9 mars 2015 +% Pour rappel on avait dans le préambule: +% \def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax} +% ce qui donne donc le \macro@font qui sera utilisé. + + + +\StopEventually{\normalsize + \ifnum\NoSourceCode=1 + \ifnum\ForEnglish=1 + \texttt{\parindent 0pt\rightskip 1cm minus 1cm + This documentation has been compiled without inclusion of the source + code. To produce the English documentation with source code included:\endgraf + \ \ \ \ run tex on etoc.dtx or etoc.ins to produce etoc.tex,\endgraf + \ \ \ \ then thrice latex on etoc.tex, then dvipdfmx on etoc.dvi.\endgraf + \medskip + To produce the German documentation with source code included, run tex on + etoc.dtx or etoc.ins to produce etoc-DE.tex, then edit etoc-DE.tex + to set \string\NoSourceCode\space to 0, and run latex thrice on etoc-DE.tex + then dvipdfmx on etoc-DE.dvi\endgraf + \medskip + (ignore dvipdfmx warnings, or, in case of problems caused by an old version + of dvipdfmx, set \string\Withdvipdfmx\space to 0 in etoc.tex or + etoc-DE.tex, to compile with pdflatex)\endgraf }% + \fi + \ifnum\ForDeutsch=1 + \texttt{\hyphenchar\font-1 + \parindent 0pt\rightskip 0.5cm minus 0.5cm \selectlanguage{ngerman}% + Diese Dokumentation wurde ohne Einbeziehung des Quellcodes erstellt. Um + die englische Dokumentation mit dem Quellcode zu produzieren, ist + einzubeziehen: \endgraf + \ \ \ \ kompilieren tex mit etoc.dtx oder etoc.ins, um etoc.tex zu + produzieren, \endgraf + \ \ \ \ dann dreimal latex mit etoc.tex, dann dvipdfmx mit etoc.dvi.\endgraf + \medskip + Um die deutsche Dokumentation mit Einbeziehung des Quellcodes zu erstellen, + ist zu kompilieren tex mit etoc.dtx oder etoc.ins, um etoc-DE.tex zu + erzeugen, dann ist \string\NoSourceCode\space in etoc-DE.tex auf 0 zu + setzen, dann ist latex dreimal mit etoc-DE.tex laufen zu lassen, dann + dvipdfmx mit etoc-DE.dvi.\endgraf + \medskip + (Ignorieren Sie dvipdfmx-Warnungen oder, im Falle von Problemen mit einer + alten Version von dvipdfmx, setzen Sie \string\Withdvipdfmx\space auf 0 in + etoc.tex oder etoc-DE.tex um dann pdflatex laufen zu lassen.)\endgraf }% + \fi + \fi +\end{document}} + + +% November 2012 +% I don't want to have to type at this location (far from the top of the +% file) explicitly the package version or version date, as it is +% inconvenient to have to remember to do this when updating the package. +% Also, I prefer not to add macros to the |.sty| file giving the package +% date, name, or version. So I extracted this from the real macrocode +% environment (leaving out the \init@crossref.) + +\makeatletter +\begingroup +\topsep\MacrocodeTopsep +\trivlist\parskip\z@\item[] +\macro@font +\leftskip\@totalleftmargin \advance\leftskip\MacroIndent +\rightskip\z@ \parindent\z@ \parfillskip\@flushglue +\global\@newlistfalse \global\@minipagefalse +\ifcodeline@index + \everypar{\global\advance\c@CodelineNo\@ne + \llap{\theCodelineNo\ \hskip\@totalleftmargin}}% +\fi +\string\NeedsTeXFormat\string{LaTeX2e\string}\par +\string\ProvidesPackage\string{etoc\string}\par +\noindent\space [\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]\par +\nointerlineskip +\global\@inlabelfalse +\endtrivlist +\endgroup +\makeatother + +% The catcode hackery next is to avoid to have <*package> to be listed +% in the commented source code... +% (c) 2012/11/19 jf burnol ;-) + +\MakePercentIgnore + +% +% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 +% \let\relax +% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12} +% +% +%<*package> +% \begin{macrocode} +\RequirePackage{multicol} +\DeclareOption*{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessOptions\relax +% \end{macrocode} +% |1.08| suppresses |\ifEtoc@part| and defines |\ifEtoc@skipprefix|. It +% also defines |\etocglobaldefs|, |\etoclocaldefs| and |\Etoc@global|. +% \begin{macrocode} +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}}% 1.07m 2015/01/23 +% \end{macrocode} +% |\etocglobaldefs| should be used only for special things such as TOC as a +% table; it should be put in a group to limit its scope. If used in the +% preamble, it must come \emph{after} |tableof| if the later is loaded too. +% \begin{macrocode} +\let\Etoc@global\@empty % 1.08 2015/03/10 +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@jj % book +\newif\ifEtoc@j % part +\newif\ifEtoc@ % chapter +\newif\ifEtoc@i % section +\newif\ifEtoc@ii % subsection +\newif\ifEtoc@iii % subsubsection +\newif\ifEtoc@iv % paragraph +\newif\ifEtoc@v % subparagraph +\newif\ifEtoc@number +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip % 1.07d +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standard +\newif\ifEtoc@skipprefix % 1.08 +\newif\ifEtoc@isfirst % 1.08 +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\def\etoc@{\etoc@} +% \end{macrocode} +% |1.07g| uses a second counter; this could be avoided, but ok, let's not be +% that strict. +% \begin{macrocode} +\newcounter{etoc@tocid} +\newcounter{etoc@tocdepth}% 1.07g +% \end{macrocode} +% |2015/03/08| Why do I use |jj| in the flags and |minustwo| here? and +% is there an entity full of forgiveness out there to save my soul even +% if taking into consideration my use of single and doubled |@|'s ? +% Although I desperately need to waste time I miraculously decided not +% to change everything today and thus the somewhat dispendious set-up +% below is maintained. +% \begin{macrocode} +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\def\Etoc@@minustwo@@{-\tw@} +\let\Etoc@@minusone@@\m@ne +\let\Etoc@@zero@@ \z@ +\let\Etoc@@one@@ \@ne +\let\Etoc@@two@@ \tw@ +\let\Etoc@@three@@ \thr@@ +\chardef\Etoc@@four@@ 4 +\chardef\Etoc@@five@@ 5 +\chardef\Etoc@@six@@ 6 +\let\Etoc@localtop\Etoc@@minustwo@@ +\def\Etoc@@minustwo@{minustwo} +\def\Etoc@@minusone@{minusone} +\def\Etoc@@zero@ {zero} +\def\Etoc@@one@ {one} +\def\Etoc@@two@ {two} +\def\Etoc@@three@ {three} +\def\Etoc@@four@ {four} +\def\Etoc@@five@ {five} +% \end{macrocode} +% |1.07g|. +% \begin{macrocode} +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\let\csname Etoc@-2@@\endcsname \Etoc@@minustwo@@ +\expandafter\let\csname Etoc@-1@@\endcsname \Etoc@@minusone@@ +\expandafter\let\csname Etoc@0@@\endcsname \Etoc@@zero@@ +\expandafter\let\csname Etoc@1@@\endcsname \Etoc@@one@@ +\expandafter\let\csname Etoc@2@@\endcsname \Etoc@@two@@ +\expandafter\let\csname Etoc@3@@\endcsname \Etoc@@three@@ +\expandafter\let\csname Etoc@4@@\endcsname \Etoc@@four@@ +\expandafter\let\csname Etoc@5@@\endcsname \Etoc@@five@@ +\expandafter\let\csname Etoc@6@@\endcsname \Etoc@@six@@ +\let\Etoc@all@@ \Etoc@@five@@ +\let\Etoc@none@@ \Etoc@minf +% \end{macrocode} +% Versions earlier than |1.08| did |\Etoc@newlevel| in a quite +% embarrassing way with an |\edef|. +% \begin{macrocode} +\let\Etoc@levellist\@empty +\def\Etoc@newlevel #1% +{\expandafter\def\expandafter\Etoc@levellist\expandafter + {\Etoc@levellist\Etoc@levellist@elt #1}% +} +\def\etocsetlevel#1#2{% + \expandafter\Etoc@newlevel\csname l@#1\endcsname + \ifcase#2\relax + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@zero@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@zero@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@one@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@one@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@two@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@two@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@three@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@three@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@four@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@four@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@five@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@five@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@six@@ + \else + \ifnum#2=\m@ne + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minusone@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minusone@ + \else + \ifnum#2=-\tw@ + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minustwo@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minustwo@ + \else + \PackageWarning{etoc} + {unexpected value `#2' in \string\etocsetlevel.^^J% + Should be -2,-1, 0, 1, 2, 3, 4, 5, or 6. Set to 6 (=ignored)}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@@six@@ +\fi\fi\fi} +\etocsetlevel{book}{-2} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +% \end{macrocode} +% The first two parameters of |\Etoc@et@hop| are exchanged in |1.08| +% compared to earlier versions; this is in relation to changes done in +% |\Etoc@etoccontentsline|. +% \begin{macrocode} +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref}{\Etoc@hyperreftrue + \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}% + \long\def\Etoc@gobblesixorfive#1#2#3#4#5#6{}} + {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}% + \long\def\Etoc@gobblesixorfive#1#2#3#4#5{}}% +} +% \end{macrocode} +% |2015/03/08| One has to be careful about the |Etoc@end@| user +% defined macros which may close groups. This has always been the reason +% for the |\global|'s here and elsewhere. +% +% |1.08| uses |\Etoc@level| rather than a |#1| which used to be anyhow always +% the |\Etoc@tmp|. Now |\Etoc@level| is what was called formerly |\Etoc@tmp| +% in |\Etoc@etoccontentsline|. +% \begin{macrocode} +\def\Etoc@setflags {% + \ifcase \Etoc@level + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@true + \or + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@itrue + \or + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iitrue + \or + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiitrue + \or + \global\Etoc@vfalse + \global\Etoc@ivtrue + \or + \global\Etoc@vtrue + \else +% \end{macrocode} +% |2015/03/08| I move up the common assignments. +% \begin{macrocode} + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@false + \ifnum\Etoc@level=\m@ne + \global\Etoc@jtrue + \else + \global\Etoc@jfalse + \global\Etoc@jjtrue + \fi + \fi} +% \end{macrocode} +% |1.08| This was originally in |\Etoc@etoccontentsline|, intermixed +% with the definitions of |\Etoc@contents| and |\Etoc@prefix|. Separated +% here for clarity of code. One has to be careful that this may close +% groups. The conditionals are all global. The |\Etoc@level| has been +% |\global\let| to a |\chardef| variable. The final |\else| of the +% |\ifcase| assumes none of the |\Etoc@end@..| routines modify it, +% naturally. +% \begin{macrocode} +\def\Etoc@doends {% + \ifcase \Etoc@level + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii\Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two\fi + \ifEtoc@i \Etoc@end@one\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii\Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii\Etoc@end@three\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv\Etoc@end@four\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \or + \else + \ifEtoc@v \Etoc@end@five \fi + \ifEtoc@iv \Etoc@end@four \fi + \ifEtoc@iii\Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two \fi + \ifEtoc@i \Etoc@end@one \fi + \ifEtoc@ \Etoc@end@zero \fi + \ifnum \Etoc@level =-\tw@ + \ifEtoc@j \Etoc@end@minusone\fi + \fi + \fi +} +% \end{macrocode} +% Heart of \etoc hack into execution of |.toc| file. It MUST be the case +% that the file contains |\contentsline {}...| instructions, with +% the standard meaning of executing |\l@unit| (the hyperref +% modifications are taken into account). It is the various |\l@unit|'s +% which are (locally) |\let| to |\Etoc@lxyz| and it is |\Etoc@lxyz| +% which does the parsing of the arguments in order to extract name, +% number and page number. Once they are obtained, via the execution of +% this indirectly hacked |\contentsline|, the code executes the +% |\Etoc@prefix| and |\Etoc@contents| corresponding to that unit level, +% according to the user |\etocsetstyle| declarations. Before that the +% begin part is executed when \etoc first encounters that level +% coming from a higher one and the end part will be executed when +% hitting a more important level. +% +% |\etocskipfirstprefix| was already part of the very first release of +% \etoc. Up to |1.07n| it was just an elegant |\@thirdofthree| possibly +% executed just before a |\@firstoftwo{\Etoc@swa{#1}}{\Etoc@swb{#1}}| +% line. But this made it impossible for me to execute things afer the +% |begin| parts. +% +% Executing stuff before |begin| is now a potential problem because the user +% can close some group in the |begin| code (this was in fact impossible in +% versions |<1.08| because this would have erased the definitions of +% |\Etoc@contents| and |\Etoc@prefix|). Thus I am not so free now to define +% things before execution of begin, if I allow people to close a group +% therein, except if I make them global. +% +% The mechanism of |\etocskipfirstprefix| made it impossible to add +% anything at the end of the |begin| codes. Thus I changed it in |1.08| +% to simply work with a (global) boolean flag. This gives user the +% freedom to use |\etocskipfirstprefix| anywhere in the |begin| code and +% it made room for a delimited macro I called |\etoconlyonfirst|. But +% then I dropped it in favor of definition of the |\etociffirst| +% conditional. +% +% Macros |\Etoc@swa| and |\Etoc@swb| which did the |\Etoc@et@hop| thing have +% been suppressed, their effect is incorporated to the end of +% |\Etoc@etoccontentsline|. +% \begin{macrocode} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +% \end{macrocode} +% |2015/03/08| Let's record that |\Etoc@level| used to be called +% |\Etoc@tmp| in versions earlier than |1.08| (and |\Etoc@tmp| is used +% in the completely different ulterior |\Etoc@lxyz| context). The code +% sets it for example to be |\Etoc@section@@| which has been let by +% |\etocsetlevel| to |\@ne|, thus is always self-terminating in +% |\ifnum..\fi| contexts. +% \begin{macrocode} +\def\Etoc@etoccontentsline #1{% + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \Etoc@skipthisonefalse + \ifnum\Etoc@level=\Etoc@@six@@ + \Etoc@skipthisonetrue + \else + \ifEtoc@localtoc + \let\Etoc@next\relax + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \fi + \ifnum\Etoc@level<\Etoc@localtop + \def\Etoc@next{\global\Etoc@stoptoctrue}% + \Etoc@skipthisonetrue + \fi + \ifEtoc@notactive + \def\Etoc@next{\Etoc@setflags}% + \Etoc@skipthisonetrue + \fi + \Etoc@next + \fi + \fi + \let\Etoc@next\Etoc@gobblesixorfive + \ifnum\c@tocdepth<\Etoc@level + \else + \ifEtoc@skipthisone + \else +% \end{macrocode} +% |1.08| New way to handle the compatibility mode. One has to worry +% only for the local tables of contents (in inactive state, which still +% must be parsed for global level flags) but in this case +% |\Etoc@setflags| was done above already. Earlier method proceeded with +% dummy empty line styles. +% \begin{macrocode} + \ifEtoc@standard\let\Etoc@next\@thirdofthree + \else +% \end{macrocode} +% |2015/03/08| Ever since the first release of \etoc, the code has +% to be careful that the |\Etoc@end@| user defined macros may +% close groups. This is the reason why some assignments have to be done +% globally. The |\let\Etoc@next\Etoc@gobblesixorfive| above could be +% local, because it is used only in case the stuff below is skipped, +% inclusive of |\Etoc@doends| which may close groups. +% +% Versions |1.08| extracts to a separate macro |\Etoc@doends|. Earlier code +% did |\global\let\Etoc@next\relax| but we can now give a default |\relax| +% value to |\Etoc@next| with no need of a |\global| prefix. +% \begin{macrocode} + \Etoc@doends +% \end{macrocode} +% |1.08| the |\Etoc@next| will (possibly) execute the |begin| code, +% \emph{before} |\Etoc@contents| and |\Etoc@prefix| get defined, +% contrarily to what I did in earlier versions. I still reset the flags +% before execution of the |begin| codes (although the flags are not +% supposed to be used therein anyhow). +% +% Also the \meta{begin} code does |\Etoc@isfirsttrue|. +% \begin{macrocode} + \let\Etoc@next\@empty + \Etoc@global\Etoc@isfirstfalse +% \end{macrocode} +% |2015/03/08| If my naming scheme had not been so baroque, I could easily do +% things in a more concise way here... +% \begin{macrocode} + \ifcase\Etoc@level + \ifEtoc@\else \def\Etoc@next{\Etoc@begin@zero}\fi + \or + \ifEtoc@i\else \def\Etoc@next{\Etoc@begin@one}\fi + \or + \ifEtoc@ii\else \def\Etoc@next{\Etoc@begin@two}\fi + \or + \ifEtoc@iii\else \def\Etoc@next{\Etoc@begin@three}\fi + \or + \ifEtoc@iv\else \def\Etoc@next{\Etoc@begin@four}\fi + \or + \ifEtoc@v\else \def\Etoc@next{\Etoc@begin@five}\fi + \else + \ifnum\Etoc@level=\m@ne + \ifEtoc@j\else \def\Etoc@next{\Etoc@begin@minusone}\fi + \else + \ifEtoc@jj\else \def\Etoc@next{\Etoc@begin@minustwo}\fi + \fi + \fi + \Etoc@setflags + \Etoc@next + \let\Etoc@next\@empty +% \end{macrocode} +% |1.08|: +% \begin{enumerate} +% \item separates the definition of |\Etoc@prefix| and +% |\Etoc@contents| from the execution of the |end| parts. And it does +% the definition with some |\csname|'s. +% +% \item implements |\etocskipfirstprefix| with a boolean, this is less slick +% but more flexible than the earlier method. +% +% \item defines the |\etociffirst| conditional. +% +% \item has |\Etoc@level| rather than |\Etoc@tmp| and thus we can dispense +% with the |\ifEtoc@part| switch as we will be able to test the equality +% |\Etoc@level=-1| inside of |\Etoc@lxyz|. +% +% \item adds the |\Etoc@global| prefix. +% \end{enumerate} +% \begin{macrocode} + \Etoc@global\expandafter\def\expandafter\Etoc@prefix\expandafter + {\csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname }% + \Etoc@global\expandafter\def\expandafter\Etoc@contents\expandafter + {\csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname }% + \ifEtoc@skipprefix \Etoc@global\let\Etoc@prefix\@empty\fi + \global\Etoc@skipprefixfalse + \fi\fi\fi +% \end{macrocode} +% |1.08| modifies the ending to not use the |\Etoc@swa| and |\Etoc@swb| +% things. With this version, the |\Etoc@next| here is only to gobble +% everything if it has to (or gobble only the \etoc things, when in +% compatibility mode). +% +% For the record we don't do |\csname l@#1\endcsname| mainly because +% hyperref patches |\contentsline|. +% +% The location where |\Etoc@savedcontentsline| is |\let| to +% |\contentsline| has been moved with release |1.08| to before the +% title as set by |\etocsettoctyle|, thus it is now possible to open a +% tabular in this part. And with the |\Etoc@global| prefix the user may +% opt for global definitions of |\etocname| and the like, thus use +% freely |&| and other group closing things. Also, some care has been +% put into doing only expandable things after expansion of the +% \meta{prefix} and \meta{contents} parts of a sectioning unit style. +% \begin{macrocode} + \Etoc@next + \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}% +} +% \end{macrocode} +% |2013/03/07|: +% +% Up to |1.06| \etoc defined only \csa{etocname}, \csa{etocnumber} and +% \csa{etocpage}. The |hyperref| added data is recycled in the simplest manner, +% prefixing it with \csa{leavevmode}. The included \csa{Hy@tocdestname} is left +% unexpanded. We have to spend some time with delimited macros to +% dis-entangle the |.toc| data, and reconstruct the possible |hyperref| +% data. If +% the page number is not hyperlinked, \csa{etocpage} does \emph{not} add the +% link found possibly in the name. +% +% Then |1.07| added \csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage} +% which are left fragile and do not have the links data, and +% \csa{etoclink}\marg{linkname} which is robust and reconstructs an arbitrarily +% named link. +% +% A need (for things like building up a token list to be used in a +% |tikzpicture|) arose later to have some form of the link which could be +% saved by a simple command like one can do +% |\global\let\lastname\etocthename|, and avoid having to manipulate +% \csa{Hy@tocdestname}. So |1.07f| adds \csa{etocthelinkedname}, +% \csa{etocthelinkednumber}, \csa{etocthelinkedpage}, \csa{etocthelink}: they +% use \csa{hyperlink} with an expanded \csa{Hy@tocdestname}. +% +% |1.08a|: I delayed from |2013/03/07| to release |1.08a| of |2015/03/13| the +% obvious decision to convert \csa{etocname}, etc ... to be the robust +% versions of \csa{etocthelinkedname}, etc ..., for sentimental reason. But +% the earlier variants contained the hyperref destination in unexpanded form. +% +% |1.07f| also adds \csa{leavevmode} to \csa{etoclink} which +% should have been done earlier, as it was included in \csa{etocname} etc... +% +% attention, \csa{@namedef}|{A}{B}| and not \csa{@namedef}|{A} {B}| !! +% on the other hand this gives a simple way to insert a space as the first +% token in the paramaters. For \csa{Etoc@again} (which appears later in the +% code), a \csa{@firstofone} construct is however the simplest of all. +% +% |2015/03/09|: |1.08| adds |\Etoc@global| prefix. +% +% |2015/03/13|: |1.08a| drops the original constructions of |\etocname| etc... +% which contained an unexpanded hyperref destination. +% \begin{macrocode} +\def\Etoc@lxyz #1#2{% + \Etoc@global\@namedef {etoclink }{\leavevmode}% fall-back + \Etoc@global\let\etocthelink \@empty % fall-back + \Etoc@global\def\etocthename {#1}% (if link, will be removed later) + \Etoc@global\def\etocthelinkedname {#1}% will probably get redefined + \Etoc@getthepage #2\etoc@ % defines \etocthelinkedpage (and \etoclink) + \Etoc@getnb #1\relax\relax\etoc@ % gets number *and* name, and \etoclink + \ifEtoc@number\else + \ifnum\Etoc@level=\m@ne + \Etoc@getit #1\hspace\relax\etoc@ % additional job for parts + \fi + \fi + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + } +% \end{macrocode} +% |1.08| adds the |\Etoc@global|'s. +% \begin{macrocode} +\def\Etoc@getthepage #1{% + \let\Etoc@next\Etoc@getthepage@nohyp + \ifEtoc@hyperref\ifx #1\hyper@linkstart + \let\Etoc@next\Etoc@getthepage@hyp + \fi\fi + \Etoc@next #1% +} +\def\Etoc@getthepage@nohyp #1\etoc@ {% + \Etoc@global\def\etocthepage {#1}% + \Etoc@global\def\etocthelinkedpage {#1}% +} +% \end{macrocode} +% |1.07k| corrects a bug here with an extra space before |##1| in +% |\@namedef{etoclink } ##1|. In 99.99\% of use cases however, the +% macro gets redefined at a later stage, thus the bug did not show. +% +% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. Thus, the user has +% the (not so recommended) possibility to use |\toks@| in the styles, even to +% store information whose scope extends beyond the execution of each +% |\contentsline|. +% +% |1.08| adds the |\Etoc@global|'s. +% \begin{macrocode} +\def\Etoc@getthepage@hyp #1#2#3#4#5\etoc@ {% + \Etoc@global\@namedef{etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% + \Etoc@global\def\etocthepage {#4}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedpage\expandafter + {\expandafter\hyperlink \Etoc@tmp{#4}}% +} +% +\def\Etoc@getnb #1{% + \let\Etoc@next\Etoc@getnb@nohyp + \ifEtoc@hyperref\ifx #1\hyper@linkstart + \let\Etoc@next\Etoc@getnb@hyp + \fi\fi + \Etoc@next #1% +} +% +\def\Etoc@getit #1{% + \let\Etoc@next\Etoc@getit@nohyp + \ifEtoc@hyperref\ifx #1\hyper@linkstart + \let\Etoc@next\Etoc@getit@hyp + \fi\fi + \Etoc@next #1% +} +% \end{macrocode} +% |1.08| adds the |\Etoc@global|'s. +% \begin{macrocode} +\def\Etoc@getnb@nohyp #1#2#3\etoc@ {% + \def\Etoc@getname ##1\relax\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \Etoc@global\def\etocthelinkedname {##1}% + }% + \ifx #1\numberline + \Etoc@global\def\etocthenumber {#2}% + \Etoc@global\def\etocthelinkednumber {#2}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname #3\etoc@ + \else % then \etocthename and \etocthelinkedname already defined + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\let\etocthelinkednumber \@empty + \Etoc@global\Etoc@numberfalse + \fi +} +% \end{macrocode} +% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds +% the |\Etoc@global|'s. +% \begin{macrocode} +\def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {% + \def\Etoc@getname ##1\relax\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedname\expandafter + {\expandafter\hyperlink \Etoc@tmp{##1}}% + }% + \def\Etoc@getnbr ##1##2##3\etoc@ {% + \ifx ##1\numberline + \Etoc@global\def\etocthenumber {##2}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkednumber + \expandafter{\expandafter\hyperlink \Etoc@tmp{##2}}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname ##3\etoc@ + \else + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\let\etocthelinkednumber \@empty + \Etoc@global\Etoc@numberfalse + \Etoc@global\def\etocthename {#4}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedname + \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}% + \fi + }% + \Etoc@global\@namedef {etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% + \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}% + \Etoc@getnbr #4\relax\relax\etoc@ +} +% \end{macrocode} +% |1.08| adds the |\Etoc@global|'s. +% \begin{macrocode} +\def\Etoc@getit@nohyp #1\hspace#2#3\etoc@ {% + \def\Etoc@getname ##1\hspace\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \Etoc@global\def\etocthelinkedname {##1}% + }% + \ifx\relax#2\else + \Etoc@global\def\etocthenumber {#1}% + \Etoc@global\def\etocthelinkednumber {#1}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname #3\etoc@ + \fi +} +% \end{macrocode} +% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds +% the |\Etoc@global|'s. +% \begin{macrocode} +\def\Etoc@getit@hyp #1#2#3#4#5#6\etoc@ {% + \def\Etoc@getname ##1\hspace\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedname + \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% + }% + \def\Etoc@getnbr ##1\hspace##2##3\etoc@ {% + \ifx\relax##2\else + \Etoc@global\def\etocthenumber {##1}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkednumber + \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname ##3\etoc@ + \fi + }% + \Etoc@getnbr #4\hspace\relax\etoc@ +} +% \end{macrocode} +% |1.08a| of |2015/03/12| does the long-postponed thing to let |\etocname| +% etc.. be simply the robust variant of |\etocthelinkedname| etc... +% \begin{macrocode} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@empty +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@number\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +% \end{macrocode} +% |1.08| defines |\etociffirst| +% \begin{macrocode} +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +% \end{macrocode} +% |1.07j| modifies |\Etoc@readtoc|. +% \begin{macrocode} +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +% \end{macrocode} +% |1.07m| moves the reading of the toc file At Begin Document. Needed for +% Babel activated characters. +% \begin{macrocode} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +% \end{macrocode} +% 1.07d: parskip and |\@nobreakfalse| stuff moved to |\Etoc@tableofcontents| +% \begin{macrocode} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected, not used; run LaTeX again (cheers from etoc)}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +% \end{macrocode} +% |1.08| has a new way to handle |\Etoc@standardtrue|. +% +% Also the expansion of |\Etoc@levelist| is moved to inside +% |\Etoc@tableofcontents| as set-up by |\etocsettocstyle|. This opens up +% the possibility for the user to open a group in the title (for example +% start a tabular) which would be closed (by the first |&|) sometime +% later. In combination with |\etocglobaldefs| it will be now much +% easier to typeset TOC as tables with \etoc! +% \begin{macrocode} +\def\Etoc@toctoc{% + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@false + \global\Etoc@jfalse + \global\Etoc@jjfalse +\the\Etoc@toctoks +\ifEtoc@notactive\else + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii \Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two\fi + \ifEtoc@i \Etoc@end@one\fi + \ifEtoc@ \Etoc@end@zero\fi + \ifEtoc@j \Etoc@end@minusone\fi + \ifEtoc@jj \Etoc@end@minustwo\fi +\fi} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etoc@@startlocaltoc#1#2{% +\let\Etoc@next\relax + \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 + \def\Etoc@next{\global\Etoc@notactivefalse + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@false + \global\Etoc@jfalse + \global\Etoc@jjfalse}% + \fi + \fi\fi +\Etoc@next} +\let\etoc@startlocaltoc\@gobble +% \end{macrocode} +% |1.07g| suppresses the printing of |--unknown etoc ref: run latex again--| as +% sometimes one uses |\localtableofcontents| to prepare something else, and one +% does not want any text output even in intermediate runs. +% +% Also |1.07g| adds |\etocaftertochook| to help with +% |\invisiblelocaltableofcontents| (and then I did |\etocsetnexttocdepth|). +% |1.07h| makes the hook used by |\etocsetnexttocdepth| private. +% \begin{macrocode} +\def\Etoc@localtableofcontents#1{% + \edef\Etoc@tmp{#1}% + \ifnum\Etoc@tmp<\@ne + \PackageWarning{etoc} + {Unknown toc id: run LaTeX to get references right}% + \let\Etoc@next\@gobble\else\let\Etoc@next\@firstofone\fi + \Etoc@next + {\edef\etoc@startlocaltoc##1{% + \noexpand\etoc@@startlocaltoc{##1}{#1}} + \Etoc@localtoctrue + \let\Etoc@localtop\Etoc@@minustwo@@ + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \Etoc@tableofcontents}% + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@aftertochook % 1.07h + \etocaftertochook % 1.07g +} +% \end{macrocode} +% |2013/03/07|: I discover a \csa{@namedef} trick to construct the +% \csa{Etoc@again} space delimited macro:\\ +% | \@namedef {Etoc@again} {...stuff...}|\\ +% Original version was (copied from analogous stuff in |source2e|):\\ +% | {\def\1{\Etoc@again}\expandafter\gdef\1 {...stuff...}}|\\ +% and in the end (now that I think about it) I simply use |\@firstofone|.\par +% \begin{macrocode} +\def\Etoc@getrefno #1#2\etoc@ {#1} +\def\Etoc@getref #1{\@ifundefined{r@#1}{0}{\expandafter\expandafter\expandafter + \Etoc@getrefno\csname r@#1\endcsname\relax\etoc@}} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +% \end{macrocode} +% Why |\global| for |\Etoc@notactivefalse|? and not for +% |\Etoc@localtocfalse|. Must think about this, a pity I did not +% document it when I was young and intelligent ... +% \begin{macrocode} +\def\Etoc@t@bleofcontents{% + \ifx\Etoc@nexttoken\label + \def\Etoc@next{\expandafter\Etoc@label\@gobble}\else + \ifx\Etoc@nexttoken\@sptoken + \let\Etoc@next\Etoc@again\else + \ifEtoc@tocwithid + \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}% + \else + \ifx\Etoc@nexttoken\ref + \def\Etoc@next{\expandafter\Etoc@ref\@gobble}% + \else + \def\Etoc@next{\Etoc@localtocfalse + \global\Etoc@notactivefalse + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@aftertochook % 1.07h + \etocaftertochook % 1.07g + }% + \fi + \fi\fi\fi\Etoc@next} +% \end{macrocode} +% |1.07g| for consistency Etoc@ prefix added. +% \begin{macrocode} +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc} + {\string\etoc@startlocaltoc{\arabic{etoc@tocid}}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +% \end{macrocode} +% |1.07g| defines |\etoctableofcontents| to be able to undo the evil and +% brutal doings of some packages with |\tableofcontents|. +% +% |1.08| patches |tableof|'s influence. Version |1.4a| or later of |tableof| +% is needed. +% \begin{macrocode} +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@par + \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents +% \end{macrocode} +% No need for tableof extra group level, and furthermore +% it is better to get rid of it if. However I can't do it globally because I +% want to leave open for the user the possibility (whose interest is quasi nil +% however) of using directly |\tableof|, |\tablenotof|, ... and not the only +% reasonable thing which is |\nexttocwithtags{}{}|. +% \begin{macrocode} + \let\tof@begingroup\@empty + \let\tof@endgroup \@empty + \def\etoc@startlocaltoc##1{\etoc@@startlocaltoc{##1}{\c@etoc@tocid}}% + \@ifstar + {\def\Etoc@aftertitlehook{}\Etoc@table@fcontents} + {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@table@fcontents}} +\let\tableofcontents\etoctableofcontents +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@par + \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents + \let\tof@begingroup\@empty + \let\tof@endgroup \@empty + \@ifstar + {\def\Etoc@aftertitlehook{}\Etoc@localtable@fcontents} + {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@localtable@fcontents}} +% \end{macrocode} +% |1.08| moves earlier the definitions of |\Etoc@savedcontentsline| as +% well as |\Etoc@levellist|. It will thus not be operative to do +% |\etocsetlevel| from inside the title now. But perhaps it will be +% easier to deal with tables. +% +% Also I remove a big |\@firstofone|, and use rather +% |\Etoc@gobbletoetoc@| for the gobbling case. +% +% Also, |1.08| modifies the code to do only expandable things after +% |\Etoc@toctoc|, in order to allow opening of an alignment in the first +% argument and closing in the second. Earlier versions had an +% |\Etoc@@next| initially set to relax after the first |\Etoc@toctoc|. I +% was in 2012/2013 quite uneasy with the TeX conditionals hence wanted +% for safety to move the things for the second invocation of +% |\Etoc@toctoc| after the |\fi\fi\fi|. I could define an |\afterfififi| +% macro, but it should be ok as it is done here. +% \begin{macrocode} +\long\def\Etoc@gobbletoetoc@ #1\etoc@ {} +\newcommand\etocsettocstyle[2]{% +\def\Etoc@tableofcontents +{% + \ifnum\c@tocdepth>\Etoc@minf\else + \expandafter\Etoc@gobbletoetoc@ + \fi + \etocbeforetitlehook % 1.07m + \Etoc@storetocdepth % 1.07g + \let\Etoc@savedcontentsline\contentsline % moved up here 1.08 + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standard + \else % moved here from \Etoc@toctoc (1.08) + \def\Etoc@levellist@elt####1{\let####1\Etoc@lxyz}% + \Etoc@levellist + \let\booknumberline\numberline + \let\partnumberline\numberline + \let\chapternumberline\numberline + \fi + #1% + \ifEtoc@parskip\parskip\z@skip\fi %1.07d + \Etoc@aftertitlehook + \Etoc@toctoc + \ifEtoc@tocwithid\else + \ifEtoc@localtoc + \ifEtoc@notactive + \Etoc@localtocfalse + \global\Etoc@notactivefalse + \Etoc@toctoc + \fi + \fi + \fi + \etocaftercontentshook + #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here + \Etoc@resettocdepth % 1.07g. moved here from before #2 by 1.08 +% \end{macrocode} +% |1.08|: necessary if |tableof 1.4a| has been used in global mode and thus +% was forced to modify globally |\contentsline|. The collateral effect is that +% \etoc is now forced to reset globally |\contentsline|. +% \begin{macrocode} + \ifx\Etoc@global\global\ifx\tof@finish\@empty\else + \global\let\contentsline\Etoc@savedcontentsline + \fi\fi + \@gobble\etoc@ +}% end of \Etoc@tableofcontents definition by \etocsettocstyle +} +% \end{macrocode} +% |2015/03/09| |1.08| hacks the begin parts to update therein the +% |\ifEtoc@isfirst| flag. +% \begin{macrocode} +\def\etocsetstyle{\Etoc@standardfalse\etoc@setstyle} +\long\def\etoc@setstyle#1#2#3#4#5{% + \long\expandafter\def + \csname Etoc@begin@\csname Etoc@#1@\endcsname\endcsname + {#2\Etoc@global\Etoc@isfirsttrue}% + \long\expandafter\def + \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname {#3}% + \long\expandafter\def + \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname {#4}% + \long\expandafter\def + \csname Etoc@end@\csname Etoc@#1@\endcsname\endcsname {#5}% +} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {\partname} +\def\etocbookname {Book} +% \end{macrocode} +% placeholder for comments +% The macro \csa{etocdefaultlines} was initially called \csa{etoctoclines}. Now +% \csa{etoctoclines} just does \csa{Etoc@standardfalse}. +% Version |1.07e| has rewritten entirely the stuff related to penalties and +% \csa{addvspace}, as this was not satisfactory in the earlier versions, which +% were written at a early stage in the development of the +% package. Actually I am not fully satisfied with these line styles. +% +% \begin{macrocode} +\def\etocdefaultlines{\Etoc@standardfalse % +%% `book': +\etoc@setstyle{@minustwo} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocbookname\enspace\etocnumber:\quad}{}\etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% +%% `part': +\etoc@setstyle{@minusone} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}\etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +%% `chapter': +\etoc@setstyle{@zero} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +%% `section': +\etoc@setstyle{@one} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par} + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par} + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +%% `subsection': +\etoc@setstyle{@two} + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par} + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par} + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +%% `subsubsection': +\etoc@setstyle{@three} + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}}% +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\etoc@setstyle{@four}{}{}{}{}% +\etoc@setstyle{@five}{}{}{}{}% +} % end of \etocdefaultlines! +% \end{macrocode} +% The |\etocinnertopsep| default value is too big as well as |\etocbelowtocskip| +% and |\etocabovetocskip|, I guess, but if I am remember correctly I chose them +% to mimick the standard TOC spacings in |article| class. +% \begin{macrocode} +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +% \end{macrocode} +% |1.07i| adds a |\nobreak| before the |\etocinnertopsep| and a test of vertical +% mode to see if truly adding a |\par| is a reasonable idea, in the +% case of single-column mode. +% \begin{macrocode} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne\let\Etoc@next\@firstoftwo + \else \let\Etoc@next\@secondoftwo\fi + \Etoc@next{% + \multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\let\Etoc@next\@firstofone + \else \let\Etoc@next\@gobble\fi + \Etoc@next{\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +% \end{macrocode} +% |1.07i| moves the |\nobreak| to before the |\vskip\etocinnertopsep| +% (especially important for the single column case). +% \begin{macrocode} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne\let\Etoc@next\@firstoftwo + \else \let\Etoc@next\@secondoftwo\fi + \Etoc@next + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\let\Etoc@next\@firstofone + \else \let\Etoc@next\@gobble\fi + \Etoc@next{\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +% \end{macrocode} +% |1.07k| defines |\Etoc@relax| and |\etocbkgcolorcmd| as |\long|: the user +% manual says to use |\renewcommand\etocbkgcolorcmd|, and an |\ifx| test is used +% in the framed style. It was thus a bug to have non-long definitions before. Or +% I could have said in the user manual to use |\renewcommand*|, or in +% |\etocframedstyle| I should test for the two, or I should pause to try to +% remember about this code and think about it. +% \begin{macrocode} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax\else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss% + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne\let\Etoc@next\@firstoftwo + \else \let\Etoc@next\@secondoftwo\fi + \Etoc@next + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\let\Etoc@next\@firstofone + \else \let\Etoc@next\@gobble\fi + \Etoc@next{\end{multicols}\unskip}% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax\else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocarticlestyle{% + \etocsettocstyle + {\section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}} + {}} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\section *{\contentsname}} + {}} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}} + {\if@restonecol \twocolumn \fi}} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \chapter *{\contentsname}} + {\if@restonecol \twocolumn \fi}} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirtoctotocfmt #1#2{% + \def\Etoc@addsuitablecontentsline{\addcontentsline {toc}{#1}{#2}}% + \renewcommand*\etocaftertitlehook{% + \ifmem@em@starred@listof + \else\phantomsection\aftergroup\Etoc@addsuitablecontentsline\fi}} +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \@nameuse {@tocmaketitle} + \Etoc@aftertitlehook\let\Etoc@aftertitlehook\relax + \parskip \cftparskip \@nameuse {cfttocbeforelisthook}} + {\@nameuse {cfttocafterlisthook}\endgroup\restorefromonecol}} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocscrartclstyle{% + \etocsettocstyle + {\let\if@dynlist\if@tocleft + \def\@currext{toc}% added 1.07m 2015/01/23 + \iftocfeature {toc}{onecolumn} + {\iftocfeature {toc}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% +% \end{macrocode} +% |1.07k|: next line to do as within current |scrartcl 2013/12/19 v3.12| +% KOMA-Script article class. +% \begin{macrocode} + \iftocfeature {toc}{numberline}{\def \nonumberline {\numberline {}}}{}% + \tocbasic@listhead {\listoftocname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \iftocfeature {toc}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at toc deactivated}}% + \fi + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@toc@before@hook\endcsname} + {\csname tb@toc@after@hook\endcsname + \csname tocbasic@@after@hook\endcsname}} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\etocstandarddisplaystyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\Etoc@redefetocstyle#1{% + \renewcommand\etoctocstylewithmarks[4][#1] + {\etocmulticolstyle[##2]% + {\csname ##1\endcsname *{##3\etocmarkboth{##4}}}} + \renewcommand\etoctocstylewithmarksnouc[4][#1] + {\etocmulticolstyle[##2]% + {\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}} + \renewcommand\etoctocstyle[3][#1]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}}}} +\@ifclassloaded{scrartcl} + {\renewcommand*\etocstandarddisplaystyle{\etocscrartclstyle}}{} +\@ifclassloaded{book} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocstandarddisplaystyle{\etocbookstyle} + \Etoc@redefetocstyle{chapter}}{} +\@ifclassloaded{report} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocstandarddisplaystyle{\etocreportstyle} + \Etoc@redefetocstyle{chapter}}{} +\@ifclassloaded{scrbook} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocstandarddisplaystyle{\etocscrbookstyle} + \Etoc@redefetocstyle{chapter}}{} +\@ifclassloaded{scrreprt} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocstandarddisplaystyle{\etocscrreprtstyle} + \Etoc@redefetocstyle{chapter}}{} +% \end{macrocode} +%|1.07k (2014/03/06)| adds the |appendix| to the list of known levels if class +%|memoir| is detected. +% \begin{macrocode} +\@ifclassloaded{memoir} + {\etocsetlevel{appendix}{0}% + \renewcommand*\etocfontone{\normalfont\normalsize} + \etocmemoirtoctotocfmt{chapter}{\contentsname}% + \renewcommand*\etocstandarddisplaystyle{\etocmemoirstyle} + \Etoc@redefetocstyle{chapter}}{} +% \end{macrocode} +%|1.07k (2014/03/06)| adds the compatibility with the |tocloft| package; in +% compatibility mode etoc will obey the |tocloft| customisation for the division +% headings as well as for the toc title. +% +%|1.07l (2014/04/02)| fixes the bug from the |tocloft| compatibility layer which +%was |memoir| incompatible: |memoir| has its version of |tocloft| which doesn't +%have the |\if@cftnctoc| boolean. +% \begin{macrocode} +\def\etoctocloftstyle {% + \etocsettocstyle + {\@cfttocstart\par\begingroup + \parindent\z@ \parskip\cftparskip \@cftmaketoctitle + \if@cfttocbibind\@cftdobibtoc\fi }% + {\endgroup\@cfttocfinish }% +} +\@ifclassloaded{memoir}{} +{\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \renewcommand*\etocstandarddisplaystyle{\etoctocloftstyle} + \AtBeginDocument{\let\tableofcontents\etoctableofcontents} + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarning {etoc} + {Package `tocloft' was loaded after `etoc'!^^J% +**** to prevent it from overwriting \protect\tableofcontents, it will be tricked^^J% +**** into believing to have been loaded with option `titles'. For better^^J% +**** compatibility, please load `tocloft' before `etoc'}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' /before/ `etoc'!}}\fi + \@cftnctoctrue }% + {}% + }% + }% +} +% \end{macrocode} +% placeholder for comments +% \begin{macrocode} +\def\Etoc@addtocontents #1#2% + {\ifEtoc@hyperref + \addtocontents {toc}{\protect\contentsline + {#1}{#2}% + {\thepage }{\@currentHref }}% + \else + \addtocontents {toc}{\protect\contentsline + {#1}{#2}{\thepage }}% + \fi} +\def\Etoc@addcontentsline@ #1#2#3% + {\@namedef{toclevel@#1}{#3}% + \addcontentsline {toc}{#1}{#2}} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +% \end{macrocode} +% All the following added for version |1.07g [2013/10/13]|. Motivated by +% a demand about |tovsec2|. But it is impossible to make |tocvsec2| +% compatible, if not re-doing all `toc' macros in |tocvsec2| +% (|v1.3, 2011/08/07|). I do not retain the stack idea, which does not convince +% me as useful. The empty line in the |.toc| file is put there by +% |tocvsec2| (see its code line 143). +% +% I take this opportunity to add to the start of the toc file +% |\let\etoc@startlocaltoc\@gobble| in case |etoc| is not detected, I should +% possibly have done that long ago (like I did in |tableof|). +% +% In |1.07h| I decide that I should not have used |\Etoc@| but |\etoc@| for +% |\Etoc@settocdepth|. So I now use lowercase and add a temporary line for +% transition in the very improbable situation that someone actually did already +% use the just released |1.07g|. +% +% In |1.07i| the deactivation of |\etoc@settocdepth| done at the start +% of the |.toc| file (for the case this file is used after having +% removed |etoc| from the document, or imported in another document) is +% done via letting it to |\@gobble| rather than |\count@| (which would +% not be ok, as what follows would be undefined too). The reason for the +% |\count@| also used originally in |\etocignoretoctocdepth| is that +% when I first worked on |1.07g| I possibly had more than one token +% after |\etoc@settocdepth|, but I changed that later. +% +% \begin{macrocode} +\def\Etoc@storetocdepth {\global\c@etoc@tocdepth\c@tocdepth } +\def\Etoc@resettocdepth {\global\c@tocdepth\c@etoc@tocdepth } +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\c@tocdepth>\c@etoc@tocdepth + \global\c@tocdepth\c@etoc@tocdepth\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +% \end{macrocode} +% |1.07h| adds the depth tags, and an even more general mechanism could be added +% at some point: we could insert `action' tags and have the user map them to +% arbitrary commands. For the time being we just provide +% |\etocdepthtag.toc {name}| and |\etocsettagdepth {tag_name}{level}| where +% level is numeric or +% alphabetical. The numeric +% level |-3| is now again not accepted by |\etocsetlevel|, it can be used with +% |\etocsettagdepth| (which accepts equivalently |none|). +% \begin{macrocode} +\def\etocdepthtag #1#{\Etoc@depthtag } % \etocdepthtag.toc {name} +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +% \end{macrocode} +% We must cancel all |tocvsec2| toc-related actions. But a check must be done +% for the memoir class, as its |tocvsec2| emulation does not have the +% incompatible things etoc needs to revert. This extra check added with etoc +% |1.07l|. +% \begin{macrocode} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {the command \protect#1\space is incompatible with etoc} + {use \protect\etocsettocdepth.toc as replacement (check the manual)}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageWarning{etoc}{You may consider using \protect\etocsettocdepth.toc + as a drop-in^^J + replacement to the memoir own \protect\settocdepth\space + if you wish to exploit etoc to its^^J + fullest. Similarly consider using + \protect\etocsettocdepth\space and + \protect\etocsetnexttocdepth^^J rather + than memoir's \protect\maxtocdepth.}} + {\@ifpackageloaded {tocvsec2} + {\def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% % if etoc is added to file previously + \let\reset@tocdepth\relax % using tocvsec2 + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarning {etoc} + {package tocvsec2 detected and its modification of^^J + \protect\tableofcontents\space reverted. Use + \protect\etocsettocdepth.toc as a replacement^^J + for the tocvsec2 toc-related commands}}{}% + }% +}% +% \end{macrocode} +% |1.07g| +% \begin{macrocode} +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\edef\Etoc@aftertochook {\global\c@tocdepth\the\c@tocdepth\space + \let\noexpand\Etoc@aftertochook\noexpand\@empty }% + \global\c@tocdepth\csname Etoc@#1@@\endcsname}% +}% +% \end{macrocode} +% |1.07h|. In order for the |.toc| file to be usable without error even +% without etoc. In |1.07i| use of |\@gobble| for |\etoc@settocdepth|. +% \begin{macrocode} +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble }{}}% +% \end{macrocode} +% Initializations. +% \begin{macrocode} +\def\etocstandardlines {\Etoc@standardtrue} +\def\etoctoclines {\Etoc@standardfalse} +\etocdefaultlines +\etocstandardlines +\etocstandarddisplaystyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\Etoc@aftertochook\@empty % private for \etocsetnexttocdepth +\let\etocaftertochook \@empty % public for end user. +\let\etocbeforetitlehook \@empty % new with 1.07m +\endinput +% \end{macrocode} +% \MakePercentComment +\CharacterTable + {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z + Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z + Digits \0\1\2\3\4\5\6\7\8\9 + Exclamation \! Double quote \" Hash (number) \# + Dollar \$ Percent \% Ampersand \& + Acute accent \' Left paren \( Right paren \) + Asterisk \* Plus \+ Comma \, + Minus \- Point \. Solidus \/ + Colon \: Semicolon \; Less than \< + Equals \= Greater than \> Question mark \? + Commercial at \@ Left bracket \[ Backslash \\ + Right bracket \] Circumflex \^ Underscore \_ + Grave accent \` Left brace \{ Vertical bar \| + Right brace \} Tilde \~} + +\CheckSum{3053} + +\csname check@checksum\endcsname +\Finale +%% +%% End of file `etoc.dtx'. diff --git a/Master/texmf-dist/source/latex/etoc/etoc.ins b/Master/texmf-dist/source/latex/etoc/etoc.ins new file mode 100644 index 00000000000..a7a3e92da1b --- /dev/null +++ b/Master/texmf-dist/source/latex/etoc/etoc.ins @@ -0,0 +1,77 @@ +%% +%% Package: etoc +%% Version: 1.08a (2015/03/13) +%% License: LPPL 1.3c or later (see etoc.dtx) +%% Copyright (C) 2012-2015 Jean-Francois Burnol +%% Copyright (C) 2014-2015 Christine Roemer +%% and collaborators for the translation into German of the documentation +%% +\def\etocpkgdate {2015/03/13} +\def\etocdocdate {2015/03/13} +\def\etocpkgversion {v1.08a} +\def\etocpkgdescription {Completely customisable TOCs (jfB)} +%% Run tex on this file to extract from etoc.dtx: +%% etoc.sty, etoc.tex, etoc-DE.tex and README.md +%% +%% At least three ways to produce etoc.pdf (method (3) is preferred): +%% (1) latex etoc.dtx (three times), then dvips, then ps2pdf +%% (2) pdflatex etoc.dtx (three times) +%% (3) latex etoc.tex (three times), then dvipdfmx +%% +%% Method (3) produces the smallest pdf files. +%% Options can be set in etoc.tex (and etoc-DE.tex): +%% - scrdoc class options (paper size, font size, ...) +%% - with or without source code, +%% - with dvipdfmx or with latex/pdflatex. +%% +%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins +%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +%% latex (thrice) then dvipdmx, or edit the suitable toggle in +%% etoc-DE.tex to allow compilation to proceed with pdflatex. +%% +%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, +%% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. +%% +%% Installation: +%% +%% etoc.sty -> TDS:tex/latex/etoc/etoc.sty +%% etoc.dtx -> TDS:source/latex/etoc/etoc.dtx +%% etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf +%% etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf +%% README.md -> TDS:doc/latex/etoc/README.md +%% +\input docstrip.tex +\askforoverwritefalse +\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% +\string\NeedsTeXFormat{LaTeX2e}^^J% +\string\ProvidesPackage{etoc}^^J% +\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% +\generate{\nopreamble\nopostamble +\file{README.md}{\from{etoc.dtx}{readme}}% +\usepostamble\defaultpostamble +\file{etoc.tex}{\from{etoc.dtx}{tex}}% +\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% +\usepreamble\etocpkgpreamble +\file{etoc.sty}{\from{etoc.dtx}{package}}}% +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* etoc.sty} +\Msg{*} +\Msg{* To produce the documentation run latex thrice on file etoc.tex} +\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.} +\Msg{* etoc-DE.dvi} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} +\endbatchfile +\endinput +%% +%% End of file `etoc.ins'. diff --git a/Master/texmf-dist/tex/generic/etoc/etoc.sty b/Master/texmf-dist/tex/generic/etoc/etoc.sty deleted file mode 100644 index 172af134d4e..00000000000 --- a/Master/texmf-dist/tex/generic/etoc/etoc.sty +++ /dev/null @@ -1,1280 +0,0 @@ -%% -%% This is file `etoc.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% etoc.dtx (with options: `package') -%% -%% IMPORTANT NOTICE: -%% -%% For the copyright see the source file. -%% -%% Any modified versions of this file must be renamed -%% with new filenames distinct from etoc.sty. -%% -%% For distribution of the original source see the terms -%% for copying and modification in the file etoc.dtx. -%% -%% This generated file may be distributed as long as the -%% original source files, as listed above, are part of the -%% same distribution. (The sources need not necessarily be -%% in the same archive or directory.) -%% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{etoc} - [2015/03/10 v1.08 Completely customisable TOCs (jfB)] -%% -%% Package: etoc -%% Version: 1.08 (2015/03/10) -%% License: LPPL 1.3c or later (see etoc.dtx) -%% Copyright (C) 2012-2015 Jean-Francois Burnol -%% Copyright (C) 2014-2015 Christine Roemer -%% and collaborators for the translation into German of the documentation -%% -\RequirePackage{multicol} -\DeclareOption*{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} -\ProcessOptions\relax -\newtoks\Etoc@toctoks -\def\Etoc@par{\par} -\def\etocinline{\def\Etoc@par{}} -\let\etocnopar\etocinline -\def\etocdisplay{\def\Etoc@par{\par}}% 1.07m 2015/01/23 -\let\Etoc@global\@empty % 1.08 2015/03/10 -\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} -\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} -\newif\ifEtoc@jj % book -\newif\ifEtoc@j % part -\newif\ifEtoc@ % chapter -\newif\ifEtoc@i % section -\newif\ifEtoc@ii % subsection -\newif\ifEtoc@iii % subsubsection -\newif\ifEtoc@iv % paragraph -\newif\ifEtoc@v % subparagraph -\newif\ifEtoc@number -\newif\ifEtoc@hyperref -\newif\ifEtoc@parskip % 1.07d -\newif\ifEtoc@tocwithid -\newif\ifEtoc@standard -\newif\ifEtoc@skipprefix % 1.08 -\newif\ifEtoc@isfirst % 1.08 -\newif\ifEtoc@localtoc -\newif\ifEtoc@skipthisone -\newif\ifEtoc@stoptoc -\newif\ifEtoc@notactive -\newif\ifEtoc@mustclosegroup -\def\etoc@{\etoc@} -\newcounter{etoc@tocid} -\newcounter{etoc@tocdepth}% 1.07g -\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} -\def\Etoc@@minustwo@@{-\tw@} -\let\Etoc@@minusone@@\m@ne -\let\Etoc@@zero@@ \z@ -\let\Etoc@@one@@ \@ne -\let\Etoc@@two@@ \tw@ -\let\Etoc@@three@@ \thr@@ -\chardef\Etoc@@four@@ 4 -\chardef\Etoc@@five@@ 5 -\chardef\Etoc@@six@@ 6 -\let\Etoc@localtop\Etoc@@minustwo@@ -\def\Etoc@@minustwo@{minustwo} -\def\Etoc@@minusone@{minusone} -\def\Etoc@@zero@ {zero} -\def\Etoc@@one@ {one} -\def\Etoc@@two@ {two} -\def\Etoc@@three@ {three} -\def\Etoc@@four@ {four} -\def\Etoc@@five@ {five} -\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} -\expandafter\let\csname Etoc@-2@@\endcsname \Etoc@@minustwo@@ -\expandafter\let\csname Etoc@-1@@\endcsname \Etoc@@minusone@@ -\expandafter\let\csname Etoc@0@@\endcsname \Etoc@@zero@@ -\expandafter\let\csname Etoc@1@@\endcsname \Etoc@@one@@ -\expandafter\let\csname Etoc@2@@\endcsname \Etoc@@two@@ -\expandafter\let\csname Etoc@3@@\endcsname \Etoc@@three@@ -\expandafter\let\csname Etoc@4@@\endcsname \Etoc@@four@@ -\expandafter\let\csname Etoc@5@@\endcsname \Etoc@@five@@ -\expandafter\let\csname Etoc@6@@\endcsname \Etoc@@six@@ -\let\Etoc@all@@ \Etoc@@five@@ -\let\Etoc@none@@ \Etoc@minf -\let\Etoc@levellist\@empty -\def\Etoc@newlevel #1% -{\expandafter\def\expandafter\Etoc@levellist\expandafter - {\Etoc@levellist\Etoc@levellist@elt #1}% -} -\def\etocsetlevel#1#2{% - \expandafter\Etoc@newlevel\csname l@#1\endcsname - \ifcase#2\relax - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@zero@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@zero@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@one@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@one@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@two@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@two@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@three@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@three@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@four@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@four@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@five@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@five@ - \or - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@six@@ - \else - \ifnum#2=\m@ne - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minusone@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minusone@ - \else - \ifnum#2=-\tw@ - \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minustwo@@ - \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minustwo@ - \else - \PackageWarning{etoc} - {unexpected value `#2' in \string\etocsetlevel.^^J% - Should be -2,-1, 0, 1, 2, 3, 4, 5, or 6. Set to 6 (=ignored)}% - \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@@six@@ -\fi\fi\fi} -\etocsetlevel{book}{-2} -\etocsetlevel{part}{-1} -\etocsetlevel{chapter}{0} -\etocsetlevel{section}{1} -\etocsetlevel{subsection}{2} -\etocsetlevel{subsubsection}{3} -\etocsetlevel{paragraph}{4} -\etocsetlevel{subparagraph}{5} -\AtBeginDocument{% -\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% -\@ifpackageloaded{hyperref}{\Etoc@hyperreftrue - \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}% - \long\def\Etoc@gobblesixorfive#1#2#3#4#5#6{}} - {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}% - \long\def\Etoc@gobblesixorfive#1#2#3#4#5{}}% -} -\def\Etoc@setflags {% - \ifcase \Etoc@level - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@true - \or - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@itrue - \or - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iitrue - \or - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiitrue - \or - \global\Etoc@vfalse - \global\Etoc@ivtrue - \or - \global\Etoc@vtrue - \else - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@false - \ifnum\Etoc@level=\m@ne - \global\Etoc@jtrue - \else - \global\Etoc@jfalse - \global\Etoc@jjtrue - \fi - \fi} -\def\Etoc@doends {% - \ifcase \Etoc@level - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii\Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two\fi - \ifEtoc@i \Etoc@end@one\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii\Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii\Etoc@end@three\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv\Etoc@end@four\fi - \or - \ifEtoc@v \Etoc@end@five\fi - \or - \else - \ifEtoc@v \Etoc@end@five \fi - \ifEtoc@iv \Etoc@end@four \fi - \ifEtoc@iii\Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two \fi - \ifEtoc@i \Etoc@end@one \fi - \ifEtoc@ \Etoc@end@zero \fi - \ifnum \Etoc@level =-\tw@ - \ifEtoc@j \Etoc@end@minusone\fi - \fi - \fi -} -\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } -\def\Etoc@etoccontentsline #1{% - \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname - \Etoc@skipthisonefalse - \ifnum\Etoc@level=\Etoc@@six@@ - \Etoc@skipthisonetrue - \else - \ifEtoc@localtoc - \let\Etoc@next\relax - \ifEtoc@stoptoc - \Etoc@skipthisonetrue - \fi - \ifnum\Etoc@level<\Etoc@localtop - \def\Etoc@next{\global\Etoc@stoptoctrue}% - \Etoc@skipthisonetrue - \fi - \ifEtoc@notactive - \def\Etoc@next{\Etoc@setflags}% - \Etoc@skipthisonetrue - \fi - \Etoc@next - \fi - \fi - \let\Etoc@next\Etoc@gobblesixorfive - \ifnum\c@tocdepth<\Etoc@level - \else - \ifEtoc@skipthisone - \else - \ifEtoc@standard\let\Etoc@next\@thirdofthree - \else - \Etoc@doends - \let\Etoc@next\@empty - \Etoc@global\Etoc@isfirstfalse - \ifcase\Etoc@level - \ifEtoc@\else \def\Etoc@next{\Etoc@begin@zero}\fi - \or - \ifEtoc@i\else \def\Etoc@next{\Etoc@begin@one}\fi - \or - \ifEtoc@ii\else \def\Etoc@next{\Etoc@begin@two}\fi - \or - \ifEtoc@iii\else \def\Etoc@next{\Etoc@begin@three}\fi - \or - \ifEtoc@iv\else \def\Etoc@next{\Etoc@begin@four}\fi - \or - \ifEtoc@v\else \def\Etoc@next{\Etoc@begin@five}\fi - \else - \ifnum\Etoc@level=\m@ne - \ifEtoc@j\else \def\Etoc@next{\Etoc@begin@minusone}\fi - \else - \ifEtoc@jj\else \def\Etoc@next{\Etoc@begin@minustwo}\fi - \fi - \fi - \Etoc@setflags - \Etoc@next - \let\Etoc@next\@empty - \Etoc@global\expandafter\def\expandafter\Etoc@prefix\expandafter - {\csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname }% - \Etoc@global\expandafter\def\expandafter\Etoc@contents\expandafter - {\csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname }% - \ifEtoc@skipprefix \Etoc@global\let\Etoc@prefix\@empty\fi - \global\Etoc@skipprefixfalse - \fi\fi\fi - \Etoc@next - \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}% -} -\def\Etoc@lxyz #1#2{% - \Etoc@global\@namedef {etoclink }{\leavevmode}% fall-back - \Etoc@global\let\etocthelink \@empty % fall-back - \Etoc@global\@namedef {etocname }{\leavevmode #1}% fall-back (perhaps linked) - \Etoc@global\def\etocthename {#1}% (if link, will be removed later) - \Etoc@global\def\etocthelinkedname {#1}% will probably get redefined - \Etoc@global\@namedef {etocpage }{\leavevmode #2}% (perhaps linked) - \Etoc@getthepage #2\etoc@ % defines also \etocthelinkedpage (and \etoclink) - \Etoc@getnb #1\relax\relax\etoc@ % gets number *and* name, and \etoclink - \ifEtoc@number\else - \ifnum\Etoc@level=\m@ne - \Etoc@getit #1\hspace\relax\etoc@ % additional job for parts - \fi - \fi} -\def\Etoc@getthepage #1{% - \let\Etoc@next\Etoc@getthepage@nohyp - \ifEtoc@hyperref\ifx #1\hyper@linkstart - \let\Etoc@next\Etoc@getthepage@hyp - \fi\fi - \Etoc@next #1% -} -\def\Etoc@getthepage@nohyp #1\etoc@ {% - \Etoc@global\def\etocthepage {#1}% - \Etoc@global\def\etocthelinkedpage {#1}% -} -\def\Etoc@getthepage@hyp #1#2#3#4#5\etoc@ {% - \Etoc@global\@namedef{etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}% - \Etoc@global\def\etocthepage {#4}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedpage\expandafter - {\expandafter\hyperlink \Etoc@tmp{#4}}% -} -\def\Etoc@getnb #1{% - \let\Etoc@next\Etoc@getnb@nohyp - \ifEtoc@hyperref\ifx #1\hyper@linkstart - \let\Etoc@next\Etoc@getnb@hyp - \fi\fi - \Etoc@next #1% -} -\def\Etoc@getit #1{% - \let\Etoc@next\Etoc@getit@nohyp - \ifEtoc@hyperref\ifx #1\hyper@linkstart - \let\Etoc@next\Etoc@getit@hyp - \fi\fi - \Etoc@next #1% -} -\def\Etoc@getnb@nohyp #1#2#3\etoc@ {% - \def\Etoc@getname ##1\relax\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode ##1}% - \Etoc@global\def\etocthename {##1}% - \Etoc@global\def\etocthelinkedname {##1}% - }% - \ifx #1\numberline - \Etoc@global\@namedef {etocnumber }{\leavevmode #2}% - \Etoc@global\def\etocthenumber {#2}% - \Etoc@global\def\etocthelinkednumber {#2}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname #3\etoc@ - \else % then \etocthename and \etocthelinkedname already defined - \Etoc@global\@namedef {etocnumber }{\leavevmode}% - \Etoc@global\let\etocthenumber \@empty - \Etoc@global\let\etocthelinkednumber \@empty - \Etoc@global\Etoc@numberfalse - \fi -} -\def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {% - \Etoc@global\def\Etoc@getname ##1\relax\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\def\etocthename {##1}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedname\expandafter - {\expandafter\hyperlink \Etoc@tmp{##1}}% - }% - \def\Etoc@getnbr ##1##2##3\etoc@ {% - \ifx ##1\numberline - \Etoc@global\@namedef {etocnumber }{\leavevmode #1{#2}{#3}{##2}#5}% - \Etoc@global\def\etocthenumber {##2}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkednumber - \expandafter{\expandafter\hyperlink \Etoc@tmp{##2}}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname ##3\etoc@ - \else - \Etoc@global\@namedef {etocnumber }{\leavevmode}% - \Etoc@global\let\etocthenumber \@empty - \Etoc@global\let\etocthelinkednumber \@empty - \Etoc@global\Etoc@numberfalse - \Etoc@global\def\etocthename {#4}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedname - \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}% - \fi - }% - \Etoc@global\@namedef {etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}% - \Etoc@getnbr #4\relax\relax\etoc@ -} -\def\Etoc@getit@nohyp #1\hspace#2#3\etoc@ {% - \def\Etoc@getname ##1\hspace\relax\etoc@ {% - \Etoc@global\@namedef {etocname }{\leavevmode ##1}% - \Etoc@global\def\etocthename {##1}% - \Etoc@global\def\etocthelinkedname {##1}% - }% - \ifx\relax#2\else - \Etoc@global\@namedef {etocnumber }{\leavevmode #1}% - \Etoc@global\def\etocthenumber {#1}% - \Etoc@global\def\etocthelinkednumber {#1}% - \Etoc@global\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@ {% - \Etoc@global\@namedef {etocname }{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\def\etocthename {##1}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkedname - \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% - }% - \def\Etoc@getnbr ##1\hspace##2##3\etoc@ {% - \ifx\relax##2\else - \Etoc@global\@namedef {etocnumber }{\leavevmode #1{#2}{#3}{##1}#5}% - \Etoc@global\def\etocthenumber {##1}% - \edef\Etoc@tmp {{#3}}% - \Etoc@global\expandafter\def\expandafter\etocthelinkednumber - \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% - \Etoc@global\Etoc@numbertrue - \Etoc@getname ##3\etoc@ - \fi - }% - \Etoc@getnbr #4\hspace\relax\etoc@ -} -\let\etocthename \@empty -\let\etocthenumber \@empty -\let\etocthepage \@empty -\let\etocthelinkedname \@empty -\let\etocthelinkednumber \@empty -\let\etocthelinkedpage \@empty -\let\etocthelink \@empty -\DeclareRobustCommand*{\etocname} {} -\DeclareRobustCommand*{\etocnumber}{} -\DeclareRobustCommand*{\etocpage} {} -\DeclareRobustCommand*{\etoclink} {} -\DeclareRobustCommand*{\etocifnumbered} - {\ifEtoc@number\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} -\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname -\DeclareRobustCommand*{\etociffirst} - {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} -\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname -\def\Etoc@readtoc {% - \ifeof \Etoc@tf - \else - \read \Etoc@tf to \Etoc@buffer - \Etoc@toctoks=\expandafter\expandafter\expandafter - {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% - \expandafter\Etoc@readtoc - \fi -} -\Etoc@toctoks {}% (superfluous, but for clarity) -\AtBeginDocument{\IfFileExists{\jobname.toc} - {{\endlinechar=-1 - \makeatletter - \newread\Etoc@tf - \openin\Etoc@tf\@filef@und - \Etoc@readtoc - \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% - \closein\Etoc@tf}} - {\typeout{No file \jobname.toc.}}} -\def\Etoc@openouttoc{% - \ifEtoc@hyperref - \ifx\hyper@last\@undefined - \IfFileExists{\jobname .toc} - {\Hy@WarningNoLine - {old toc file detected, not used; run LaTeX again (cheers from etoc)}% - \global\Etoc@toctoks={}% - } - {}% - \fi - \fi - \if@filesw - \newwrite \tf@toc - \immediate \openout \tf@toc \jobname .toc\relax - \fi - \global\let\Etoc@openouttoc\empty -} -\def\Etoc@toctoc{% - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@false - \global\Etoc@jfalse - \global\Etoc@jjfalse -\the\Etoc@toctoks -\ifEtoc@notactive\else - \ifEtoc@v \Etoc@end@five\fi - \ifEtoc@iv \Etoc@end@four\fi - \ifEtoc@iii \Etoc@end@three\fi - \ifEtoc@ii \Etoc@end@two\fi - \ifEtoc@i \Etoc@end@one\fi - \ifEtoc@ \Etoc@end@zero\fi - \ifEtoc@j \Etoc@end@minusone\fi - \ifEtoc@jj \Etoc@end@minustwo\fi -\fi} -\def\etoc@@startlocaltoc#1#2{% -\let\Etoc@next\relax - \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 - \def\Etoc@next{\global\Etoc@notactivefalse - \global\Etoc@vfalse - \global\Etoc@ivfalse - \global\Etoc@iiifalse - \global\Etoc@iifalse - \global\Etoc@ifalse - \global\Etoc@false - \global\Etoc@jfalse - \global\Etoc@jjfalse}% - \fi - \fi\fi -\Etoc@next} -\let\etoc@startlocaltoc\@gobble -\def\Etoc@localtableofcontents#1{% - \edef\Etoc@tmp{#1}% - \ifnum\Etoc@tmp<\@ne - \PackageWarning{etoc} - {Unknown toc id: run LaTeX to get references right}% - \let\Etoc@next\@gobble\else\let\Etoc@next\@firstofone\fi - \Etoc@next - {\edef\etoc@startlocaltoc##1{% - \noexpand\etoc@@startlocaltoc{##1}{#1}} - \Etoc@localtoctrue - \let\Etoc@localtop\Etoc@@minustwo@@ - \global\Etoc@stoptocfalse - \global\Etoc@notactivetrue - \Etoc@tableofcontents}% - \endgroup\ifEtoc@mustclosegroup\endgroup\fi - \Etoc@aftertochook % 1.07h - \etocaftertochook % 1.07g -} -\def\Etoc@getrefno #1#2\etoc@ {#1} -\def\Etoc@getref #1{\@ifundefined{r@#1}{0}{\expandafter\expandafter\expandafter - \Etoc@getrefno\csname r@#1\endcsname\relax\etoc@}} -\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} -\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -\def\Etoc@t@bleofcontents{% - \ifx\Etoc@nexttoken\label - \def\Etoc@next{\expandafter\Etoc@label\@gobble}\else - \ifx\Etoc@nexttoken\@sptoken - \let\Etoc@next\Etoc@again\else - \ifEtoc@tocwithid - \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}% - \else - \ifx\Etoc@nexttoken\ref - \def\Etoc@next{\expandafter\Etoc@ref\@gobble}% - \else - \def\Etoc@next{\Etoc@localtocfalse - \global\Etoc@notactivefalse - \Etoc@tableofcontents - \endgroup - \ifEtoc@mustclosegroup\endgroup\fi - \Etoc@aftertochook % 1.07h - \etocaftertochook % 1.07g - }% - \fi - \fi\fi\fi\Etoc@next} -\def\Etoc@table@fcontents{% - \refstepcounter{etoc@tocid}% - \Etoc@tocwithidfalse - \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -\def\Etoc@localtable@fcontents{% - \refstepcounter{etoc@tocid}% - \addtocontents{toc} - {\string\etoc@startlocaltoc{\arabic{etoc@tocid}}}% - \Etoc@tocwithidtrue - \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} -\let\etocaftertitlehook \@empty -\let\etocaftercontentshook \@empty -\def\etoctableofcontents{% - \Etoc@openouttoc - \Etoc@par - \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents - \let\tof@begingroup\@empty - \let\tof@endgroup \@empty - \def\etoc@startlocaltoc##1{\etoc@@startlocaltoc{##1}{\c@etoc@tocid}}% - \@ifstar - {\def\Etoc@aftertitlehook{}\Etoc@table@fcontents} - {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@table@fcontents}} -\let\tableofcontents\etoctableofcontents -\newcommand*\localtableofcontents{% - \Etoc@openouttoc - \Etoc@par - \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents - \let\tof@begingroup\@empty - \let\tof@endgroup \@empty - \@ifstar - {\def\Etoc@aftertitlehook{}\Etoc@localtable@fcontents} - {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@localtable@fcontents}} -\long\def\Etoc@gobbletoetoc@ #1\etoc@ {} -\newcommand\etocsettocstyle[2]{% -\def\Etoc@tableofcontents -{% - \ifnum\c@tocdepth>\Etoc@minf\else - \expandafter\Etoc@gobbletoetoc@ - \fi - \etocbeforetitlehook % 1.07m - \Etoc@storetocdepth % 1.07g - \let\Etoc@savedcontentsline\contentsline % moved up here 1.08 - \let\contentsline\Etoc@etoccontentsline - \ifEtoc@standard - \else % moved here from \Etoc@toctoc (1.08) - \def\Etoc@levellist@elt####1{\let####1\Etoc@lxyz}% - \Etoc@levellist - \let\booknumberline\numberline - \let\partnumberline\numberline - \let\chapternumberline\numberline - \fi - #1% - \ifEtoc@parskip\parskip\z@skip\fi %1.07d - \Etoc@aftertitlehook - \Etoc@toctoc - \ifEtoc@tocwithid\else - \ifEtoc@localtoc - \ifEtoc@notactive - \Etoc@localtocfalse - \global\Etoc@notactivefalse - \Etoc@toctoc - \fi - \fi - \fi - \etocaftercontentshook - #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here - \Etoc@resettocdepth % 1.07g. moved here from before #2 by 1.08 - \ifx\Etoc@global\global\ifx\tof@finish\@empty\else - \global\let\contentsline\Etoc@savedcontentsline - \fi\fi - \@gobble\etoc@ -}% end of \Etoc@tableofcontents definition by \etocsettocstyle -} -\def\etocsetstyle{\Etoc@standardfalse\etoc@setstyle} -\long\def\etoc@setstyle#1#2#3#4#5{% - \long\expandafter\def - \csname Etoc@begin@\csname Etoc@#1@\endcsname\endcsname - {#2\Etoc@global\Etoc@isfirsttrue}% - \long\expandafter\def - \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname {#3}% - \long\expandafter\def - \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname {#4}% - \long\expandafter\def - \csname Etoc@end@\csname Etoc@#1@\endcsname\endcsname {#5}% -} -\def\etocfontminustwo {\normalfont \LARGE \bfseries} -\def\etocfontminusone {\normalfont \large \bfseries} -\def\etocfontzero {\normalfont \large \bfseries} -\def\etocfontone {\normalfont \normalsize \bfseries} -\def\etocfonttwo {\normalfont \normalsize} -\def\etocfontthree {\normalfont \footnotesize} -\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} -\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} -\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} -\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} -\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} -\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} -\def\etocbaselinespreadminustwo {1} -\def\etocbaselinespreadminusone {1} -\def\etocbaselinespreadzero {1} -\def\etocbaselinespreadone {1} -\def\etocbaselinespreadtwo {1} -\def\etocbaselinespreadthree {.9} -\def\etocminustwoleftmargin {1.5em plus 0.5fil} -\def\etocminustworightmargin {1.5em plus -0.5fil} -\def\etocminusoneleftmargin {1em} -\def\etocminusonerightmargin {1em} -\def\etoctoclineleaders - {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} -\def\etocabbrevpagename {p.~} -\def\etocpartname {\partname} -\def\etocbookname {Book} -\def\etocdefaultlines{\Etoc@standardfalse % -%% `book': -\etoc@setstyle{@minustwo} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@secpenalty} - {\begingroup - \etocfontminustwo - \addvspace{\etocsepminustwo}% - \parindent \z@ - \leftskip \etocminustwoleftmargin - \rightskip \etocminustworightmargin - \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocbookname\enspace\etocnumber:\quad}{}\etocname - \baselineskip\etocbaselinespreadminustwo\baselineskip - \par}% - \addpenalty\@M\addvspace{\etocsepminusone}% - \endgroup} - {}% -%% `part': -\etoc@setstyle{@minusone} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@secpenalty} - {\begingroup - \etocfontminusone - \addvspace{\etocsepminusone}% - \parindent \z@ - \leftskip \etocminusoneleftmargin - \rightskip \etocminusonerightmargin - \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}\etocname - \baselineskip\etocbaselinespreadminusone\baselineskip - \par}% - \addpenalty\@M\addvspace{\etocsepzero}% - \endgroup} - {}% -%% `chapter': -\etoc@setstyle{@zero} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@itempenalty} - {\begingroup - \etocfontzero - \addvspace{\etocsepzero}% - \parindent \z@ \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname - \baselineskip\etocbaselinespreadzero\baselineskip - \par}% - \endgroup} - {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% -%% `section': -\etoc@setstyle{@one} - {\addpenalty\@M\etocskipfirstprefix} - {\addpenalty\@itempenalty} - {\begingroup - \etocfontone - \addvspace{\etocsepone}% - \parindent \z@ \parfillskip \z@ - \setbox\z@\vbox{\parfillskip\@flushglue - \etocname\par - \setbox\tw@\lastbox - \global\setbox\@ne\hbox{\unhbox\tw@\ }}% - \dimen\z@=\wd\@ne - \setbox\z@=\etoctoclineleaders - \advance\dimen\z@\wd\z@ - \etocifnumbered - {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} - {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% - \advance\dimen\z@\wd\tw@ - \ifdim\dimen\z@ < \linewidth - \vbox{\etocname~% - \leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadone\baselineskip - \par} - \else - \vbox{\etocname~% - \leaders\copy\z@\hfil\break - \hbox{}\leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadone\baselineskip - \par} - \fi - \endgroup} - {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% -%% `subsection': -\etoc@setstyle{@two} - {\addpenalty\@medpenalty\etocskipfirstprefix} - {\addpenalty\@itempenalty} - {\begingroup - \etocfonttwo - \addvspace{\etocseptwo}% - \parindent \z@ \parfillskip \z@ - \setbox\z@\vbox{\parfillskip\@flushglue - \etocname\par\setbox\tw@\lastbox - \global\setbox\@ne\hbox{\unhbox\tw@}}% - \dimen\z@=\wd\@ne - \setbox\z@=\etoctoclineleaders - \advance\dimen\z@\wd\z@ - \etocifnumbered - {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} - {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% - \advance\dimen\z@\wd\tw@ - \ifdim\dimen\z@ < \linewidth - \vbox{\etocname~% - \leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadtwo\baselineskip - \par} - \else - \vbox{\etocname~% - \leaders\copy\z@\hfil\break - \hbox{}\leaders\box\z@\hfil\box\tw@ - \baselineskip\etocbaselinespreadtwo\baselineskip - \par} - \fi - \endgroup} - {\addpenalty\@secpenalty\addvspace{\etocsepone}}% -%% `subsubsection': -\etoc@setstyle{@three} - {\addpenalty\@M - \etocfontthree - \vspace{\etocsepthree}% - \noindent - \etocskipfirstprefix} - {\allowbreak\,--\,} - {\etocname} - {.\hfil - \begingroup - \baselineskip\etocbaselinespreadthree\baselineskip - \par - \endgroup - \addpenalty{-\@highpenalty}}% -\etoc@setstyle{@four}{}{}{}{}% -\etoc@setstyle{@five}{}{}{}{}% -} % end of \etocdefaultlines! -\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} -\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} -\def\etoccolumnsep{2em} -\def\etocmulticolsep{0ex} -\def\etocmulticolpretolerance{-1} -\def\etocmulticoltolerance{200} -\def\etocdefaultnbcol{2} -\def\etocinnertopsep{2ex} -\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% -\etocsettocstyle - {\let\etocoldpar\par - \addvspace{\etocabovetocskip}% - \ifnum #1>\@ne\let\Etoc@next\@firstoftwo - \else \let\Etoc@next\@secondoftwo\fi - \Etoc@next{% - \multicolpretolerance\etocmulticolpretolerance - \multicoltolerance\etocmulticoltolerance - \setlength{\columnsep}{\etoccolumnsep}% - \setlength{\multicolsep}{\etocmulticolsep}% - \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} - {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip - \@@par\endgroup - \fi - \nobreak\addvspace{\etocinnertopsep}% - \pretolerance\etocmulticolpretolerance - \tolerance\etocmulticoltolerance}} - {\ifnum #1>\@ne\let\Etoc@next\@firstofone - \else \let\Etoc@next\@gobble\fi - \Etoc@next{\end{multicols}}% - \addvspace{\etocbelowtocskip}}} -\def\etocinnerbottomsep{3.5ex} -\def\etocinnerleftsep{2em} -\def\etocinnerrightsep{2em} -\def\etoctoprule{\hrule} -\def\etocleftrule{\vrule} -\def\etocrightrule{\vrule} -\def\etocbottomrule{\hrule} -\def\etoctoprulecolorcmd{\relax} -\def\etocbottomrulecolorcmd{\relax} -\def\etocleftrulecolorcmd{\relax} -\def\etocrightrulecolorcmd{\relax} -\def\etoc@ruledheading #1{% - \hb@xt@\linewidth{\color@begingroup - \hss #1\hss\hskip-\linewidth - \etoctoprulecolorcmd\leaders\etoctoprule\hss - \phantom{#1}% - \leaders\etoctoprule\hss\color@endgroup}% - \nointerlineskip\nobreak\vskip\etocinnertopsep} -\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% -\etocsettocstyle - {\addvspace{\etocabovetocskip}% - \ifnum #1>\@ne\let\Etoc@next\@firstoftwo - \else \let\Etoc@next\@secondoftwo\fi - \Etoc@next - {\multicolpretolerance\etocmulticolpretolerance - \multicoltolerance\etocmulticoltolerance - \setlength{\columnsep}{\etoccolumnsep}% - \setlength{\multicolsep}{\etocmulticolsep}% - \begin{multicols}{#1}[\etoc@ruledheading{#2}]} - {\etoc@ruledheading{#2}% - \pretolerance\etocmulticolpretolerance - \tolerance\etocmulticoltolerance}} - {\ifnum #1>\@ne\let\Etoc@next\@firstofone - \else \let\Etoc@next\@gobble\fi - \Etoc@next{\end{multicols}}% - \addvspace{\etocbelowtocskip}}} -\def\etocframedmphook{\relax} -\long\def\etocbkgcolorcmd{\relax} -\long\def\Etoc@relax{\relax} -\newbox\etoc@framed@titlebox -\newbox\etoc@framed@contentsbox -\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% -\etocsettocstyle{% - \addvspace{\etocabovetocskip}% - \sbox\z@{#2}% - \dimen\z@\dp\z@ - \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi - \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup - \hss - \ifx\etocbkgcolorcmd\Etoc@relax\else - \sbox\tw@{\color{white}% - \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% - \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi - \box\tw@ - \hskip-\wd\z@ - \fi - \copy\z@ - \hss - \hskip-\linewidth - \etoctoprulecolorcmd\leaders\etoctoprule\hss% - \hskip\wd\z@ - \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% - \setbox\z@\hbox{\etocleftrule\etocrightrule}% - \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ - \advance\dimen\tw@-\etocinnerleftsep - \advance\dimen\tw@-\etocinnerrightsep - \setbox\etoc@framed@contentsbox=\vbox\bgroup - \hsize\dimen\tw@ - \kern\dimen\z@ - \vskip\etocinnertopsep - \hbox\bgroup - \begin{minipage}{\hsize}% - \etocframedmphook - \ifnum #1>\@ne\let\Etoc@next\@firstoftwo - \else \let\Etoc@next\@secondoftwo\fi - \Etoc@next - {\multicolpretolerance\etocmulticolpretolerance - \multicoltolerance\etocmulticoltolerance - \setlength{\columnsep}{\etoccolumnsep}% - \setlength{\multicolsep}{\etocmulticolsep}% - \begin{multicols}{#1}} - {\pretolerance\etocmulticolpretolerance - \tolerance\etocmulticoltolerance}} - {\ifnum #1>\@ne\let\Etoc@next\@firstofone - \else \let\Etoc@next\@gobble\fi - \Etoc@next{\end{multicols}\unskip}% - \end{minipage}% - \egroup - \vskip\etocinnerbottomsep - \egroup - \vbox{\hsize\linewidth - \ifx\etocbkgcolorcmd\Etoc@relax\else - \kern\ht\etoc@framed@titlebox - \kern\dp\etoc@framed@titlebox - \hb@xt@\linewidth{\color@begingroup - \etocleftrulecolorcmd\etocleftrule - \etocbkgcolorcmd - \leaders\vrule - \@height\ht\etoc@framed@contentsbox - \@depth\dp\etoc@framed@contentsbox - \hss - \etocrightrulecolorcmd\etocrightrule - \color@endgroup}\nointerlineskip - \vskip-\dp\etoc@framed@contentsbox - \vskip-\ht\etoc@framed@contentsbox - \vskip-\dp\etoc@framed@titlebox - \vskip-\ht\etoc@framed@titlebox - \fi - \box\etoc@framed@titlebox\nointerlineskip - \hb@xt@\linewidth{\color@begingroup - {\etocleftrulecolorcmd\etocleftrule}% - \hss\box\etoc@framed@contentsbox\hss - \etocrightrulecolorcmd\etocrightrule\color@endgroup} - \nointerlineskip - \vskip\ht\etoc@framed@contentsbox - \vskip\dp\etoc@framed@contentsbox - \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd - \leaders\etocbottomrule\hss\color@endgroup}} - \addvspace{\etocbelowtocskip}}} -\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \tableofcontents} -\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \tableofcontents*} -\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \localtableofcontents} -\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% - \etocmulticolstyle[#1]{#2}% - \localtableofcontents*} -\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \tableofcontents} -\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \tableofcontents*} -\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \localtableofcontents} -\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% - \etocruledstyle[#1]{#2}% - \localtableofcontents*} -\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \tableofcontents} -\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \tableofcontents*} -\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \localtableofcontents} -\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% - \etocframedstyle[#1]{#2}% - \localtableofcontents*} -\def\etocmulticol{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@multicoltoci} - {\etoc@multicoltoc}} -\def\etocruled{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@ruledtoci} - {\etoc@ruledtoc}} -\def\etocframed{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@framedtoci} - {\etoc@framedtoc}} -\def\etoclocalmulticol{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@local@multicoltoci} - {\etoc@local@multicoltoc}} -\def\etoclocalruled{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@local@ruledtoci} - {\etoc@local@ruledtoc}} -\def\etoclocalframed{\begingroup - \Etoc@mustclosegrouptrue - \@ifstar - {\etoc@local@framedtoci} - {\etoc@local@framedtoc}} -\def\etocarticlestyle{% - \etocsettocstyle - {\section *{\contentsname - \@mkboth {\MakeUppercase \contentsname} - {\MakeUppercase \contentsname}}} - {}} -\def\etocarticlestylenomarks{% - \etocsettocstyle - {\section *{\contentsname}} - {}} -\def\etocbookstyle{% - \etocsettocstyle - {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi - \chapter *{\contentsname - \@mkboth {\MakeUppercase \contentsname} - {\MakeUppercase \contentsname}}} - {\if@restonecol \twocolumn \fi}} -\def\etocbookstylenomarks{% - \etocsettocstyle - {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi - \chapter *{\contentsname}} - {\if@restonecol \twocolumn \fi}} -\let\etocreportstyle\etocbookstyle -\let\etocreportstylenomarks\etocbookstylenomarks -\def\etocmemoirtoctotocfmt #1#2{% - \def\Etoc@addsuitablecontentsline{\addcontentsline {toc}{#1}{#2}}% - \renewcommand*\etocaftertitlehook{% - \ifmem@em@starred@listof - \else\phantomsection\aftergroup\Etoc@addsuitablecontentsline\fi}} -\def\etocmemoirstyle{% - \etocsettocstyle - {\ensureonecol \par \begingroup \@nameuse {@tocmaketitle} - \Etoc@aftertitlehook\let\Etoc@aftertitlehook\relax - \parskip \cftparskip \@nameuse {cfttocbeforelisthook}} - {\@nameuse {cfttocafterlisthook}\endgroup\restorefromonecol}} -\def\etocscrartclstyle{% - \etocsettocstyle - {\let\if@dynlist\if@tocleft - \def\@currext{toc}% added 1.07m 2015/01/23 - \iftocfeature {toc}{onecolumn} - {\iftocfeature {toc}{leveldown} - {} - {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} - {}% - \iftocfeature {toc}{numberline}{\def \nonumberline {\numberline {}}}{}% - \tocbasic@listhead {\listoftocname}% - \begingroup \expandafter \expandafter \expandafter - \endgroup \expandafter - \ifx - \csname microtypesetup\endcsname \relax - \else - \iftocfeature {toc}{noprotrusion}{} - {\microtypesetup {protrusion=false}% - \PackageInfo {tocbasic}% - {character protrusion at toc deactivated}}% - \fi - \setlength {\parskip }{\z@ }% - \setlength {\parindent }{\z@ }% - \setlength {\parfillskip }{\z@ \@plus 1fil}% - \csname tocbasic@@before@hook\endcsname - \csname tb@toc@before@hook\endcsname} - {\csname tb@toc@after@hook\endcsname - \csname tocbasic@@after@hook\endcsname}} -\let\etocscrbookstyle\etocscrartclstyle -\let\etocscrreprtstyle\etocscrartclstyle -\def\etocstandarddisplaystyle{\etocarticlestyle} -\newcommand*\etocmarkboth[1]{% - \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} -\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} -\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% - {\csname #1\endcsname *{#3}}} -\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% - {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} -\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% - {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} -\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} - {\etocsetlevel{appendix}{0}% - \renewcommand*\etocfontone{\normalfont\normalsize} - \etocmemoirtoctotocfmt{chapter}{\contentsname}% - \renewcommand*\etocstandarddisplaystyle{\etocmemoirstyle} - \Etoc@redefetocstyle{chapter}}{} -\def\etoctocloftstyle {% - \etocsettocstyle - {\@cfttocstart\par\begingroup - \parindent\z@ \parskip\cftparskip \@cftmaketoctitle - \if@cfttocbibind\@cftdobibtoc\fi }% - {\endgroup\@cfttocfinish }% -} -\@ifclassloaded{memoir}{} -{\@ifpackageloaded{tocloft} - {\if@cftnctoc\else - \renewcommand*\etocstandarddisplaystyle{\etoctocloftstyle} - \AtBeginDocument{\let\tableofcontents\etoctableofcontents} - \fi } - {\AtBeginDocument - {\@ifpackageloaded{tocloft} - {\if@cftnctoc\else - \PackageWarning {etoc} - {Package `tocloft' was loaded after `etoc'!^^J% -**** to prevent it from overwriting \protect\tableofcontents, it will be tricked^^J% -**** into believing to have been loaded with option `titles'. For better^^J% -**** compatibility, please load `tocloft' before `etoc'}% - \AtEndDocument{\PackageWarning{etoc} - {Please load `tocloft' /before/ `etoc'!}}\fi - \@cftnctoctrue }% - {}% - }% - }% -} -\def\Etoc@addtocontents #1#2% - {\ifEtoc@hyperref - \addtocontents {toc}{\protect\contentsline - {#1}{#2}% - {\thepage }{\@currentHref }}% - \else - \addtocontents {toc}{\protect\contentsline - {#1}{#2}{\thepage }}% - \fi} -\def\Etoc@addcontentsline@ #1#2#3% - {\@namedef{toclevel@#1}{#3}% - \addcontentsline {toc}{#1}{#2}} -\DeclareRobustCommand*{\etoctoccontentsline} - {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} -\def\Etoc@storetocdepth {\global\c@etoc@tocdepth\c@tocdepth } -\def\Etoc@resettocdepth {\global\c@tocdepth\c@etoc@tocdepth } -\def\etocobeytoctocdepth {\def\etoc@settocdepth - {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} -\def\Etoc@@nottoodeep {\ifnum\c@tocdepth>\c@etoc@tocdepth - \global\c@tocdepth\c@etoc@tocdepth\fi } -\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } -\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } -\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup - \expandafter\Etoc@set@tocdepth@ - \else\expandafter\Etoc@set@toctocdepth - \fi } -\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} - {\PackageWarning{etoc} - {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} - {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% -} -\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } -\def\Etoc@set@toctocdepth@ #1{% - \@ifundefined{Etoc@#1@@}% - {\PackageWarning{etoc} - {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% - {\addtocontents {toc} - {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% -} -\def\etocdepthtag #1#{\Etoc@depthtag } % \etocdepthtag.toc {name} -\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} -\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } -\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } -\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% - {}% ignore in silence if tag has no associated depth - {\afterassignment\Etoc@@nottoodeep - \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% -} -\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% - {\PackageWarning{etoc} - {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% - {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% -} -\def\Etoc@tocvsec@err #1{\PackageError {etoc} - {the command \protect#1\space is incompatible with etoc} - {use \protect\etocsettocdepth.toc as replacement (check the manual)}% -}% -\AtBeginDocument {% - \@ifclassloaded{memoir} - {\PackageWarning{etoc}{You may consider using \protect\etocsettocdepth.toc - as a drop-in^^J - replacement to the memoir own \protect\settocdepth\space - if you wish to exploit etoc to its^^J - fullest. Similarly consider using - \protect\etocsettocdepth\space and - \protect\etocsetnexttocdepth^^J rather - than memoir's \protect\maxtocdepth.}} - {\@ifpackageloaded {tocvsec2} - {\def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% - \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% - \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% - {\Etoc@tocvsec@err \resettocdepth }% - }% - \def\save@tocdepth #1#2#3{}% % if etoc is added to file previously - \let\reset@tocdepth\relax % using tocvsec2 - \let\remax@tocdepth\relax - \let\tableofcontents\etoctableofcontents - \PackageWarning {etoc} - {package tocvsec2 detected and its modification of^^J - \protect\tableofcontents\space reverted. Use - \protect\etocsettocdepth.toc as a replacement^^J - for the tocvsec2 toc-related commands}}{}% - }% -}% -\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% -\def\invisiblelocaltableofcontents - {\etocsetnexttocdepth {-3}\localtableofcontents }% -\def\etocsetnexttocdepth #1{% - \@ifundefined{Etoc@#1@@} - {\PackageWarning{etoc} - {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} - {\edef\Etoc@aftertochook {\global\c@tocdepth\the\c@tocdepth\space - \let\noexpand\Etoc@aftertochook\noexpand\@empty }% - \global\c@tocdepth\csname Etoc@#1@@\endcsname}% -}% -\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% - {\let\protect\etoc@startlocaltoc\protect\@gobble - \let\protect\etoc@settocdepth\protect\@gobble - \let\protect\etoc@depthtag\protect\@gobble }{}}% -\def\etocstandardlines {\Etoc@standardtrue} -\def\etoctoclines {\Etoc@standardfalse} -\etocdefaultlines -\etocstandardlines -\etocstandarddisplaystyle -\etocobeytoctocdepth -\etocobeydepthtags -\let\Etoc@aftertochook\@empty % private for \etocsetnexttocdepth -\let\etocaftertochook \@empty % public for end user. -\let\etocbeforetitlehook \@empty % new with 1.07m -\endinput -%% -%% End of file `etoc.sty'. diff --git a/Master/texmf-dist/tex/latex/etoc/etoc.sty b/Master/texmf-dist/tex/latex/etoc/etoc.sty new file mode 100644 index 00000000000..867aa9278fd --- /dev/null +++ b/Master/texmf-dist/tex/latex/etoc/etoc.sty @@ -0,0 +1,1271 @@ +%% +%% This is file `etoc.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% etoc.dtx (with options: `package') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from etoc.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file etoc.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{etoc} + [2015/03/13 v1.08a Completely customisable TOCs (jfB)] +%% +%% Package: etoc +%% Version: 1.08a (2015/03/13) +%% License: LPPL 1.3c or later (see etoc.dtx) +%% Copyright (C) 2012-2015 Jean-Francois Burnol +%% Copyright (C) 2014-2015 Christine Roemer +%% and collaborators for the translation into German of the documentation +%% +\RequirePackage{multicol} +\DeclareOption*{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessOptions\relax +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}}% 1.07m 2015/01/23 +\let\Etoc@global\@empty % 1.08 2015/03/10 +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@jj % book +\newif\ifEtoc@j % part +\newif\ifEtoc@ % chapter +\newif\ifEtoc@i % section +\newif\ifEtoc@ii % subsection +\newif\ifEtoc@iii % subsubsection +\newif\ifEtoc@iv % paragraph +\newif\ifEtoc@v % subparagraph +\newif\ifEtoc@number +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip % 1.07d +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standard +\newif\ifEtoc@skipprefix % 1.08 +\newif\ifEtoc@isfirst % 1.08 +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\def\etoc@{\etoc@} +\newcounter{etoc@tocid} +\newcounter{etoc@tocdepth}% 1.07g +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\def\Etoc@@minustwo@@{-\tw@} +\let\Etoc@@minusone@@\m@ne +\let\Etoc@@zero@@ \z@ +\let\Etoc@@one@@ \@ne +\let\Etoc@@two@@ \tw@ +\let\Etoc@@three@@ \thr@@ +\chardef\Etoc@@four@@ 4 +\chardef\Etoc@@five@@ 5 +\chardef\Etoc@@six@@ 6 +\let\Etoc@localtop\Etoc@@minustwo@@ +\def\Etoc@@minustwo@{minustwo} +\def\Etoc@@minusone@{minusone} +\def\Etoc@@zero@ {zero} +\def\Etoc@@one@ {one} +\def\Etoc@@two@ {two} +\def\Etoc@@three@ {three} +\def\Etoc@@four@ {four} +\def\Etoc@@five@ {five} +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\let\csname Etoc@-2@@\endcsname \Etoc@@minustwo@@ +\expandafter\let\csname Etoc@-1@@\endcsname \Etoc@@minusone@@ +\expandafter\let\csname Etoc@0@@\endcsname \Etoc@@zero@@ +\expandafter\let\csname Etoc@1@@\endcsname \Etoc@@one@@ +\expandafter\let\csname Etoc@2@@\endcsname \Etoc@@two@@ +\expandafter\let\csname Etoc@3@@\endcsname \Etoc@@three@@ +\expandafter\let\csname Etoc@4@@\endcsname \Etoc@@four@@ +\expandafter\let\csname Etoc@5@@\endcsname \Etoc@@five@@ +\expandafter\let\csname Etoc@6@@\endcsname \Etoc@@six@@ +\let\Etoc@all@@ \Etoc@@five@@ +\let\Etoc@none@@ \Etoc@minf +\let\Etoc@levellist\@empty +\def\Etoc@newlevel #1% +{\expandafter\def\expandafter\Etoc@levellist\expandafter + {\Etoc@levellist\Etoc@levellist@elt #1}% +} +\def\etocsetlevel#1#2{% + \expandafter\Etoc@newlevel\csname l@#1\endcsname + \ifcase#2\relax + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@zero@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@zero@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@one@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@one@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@two@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@two@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@three@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@three@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@four@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@four@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@five@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@five@ + \or + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@six@@ + \else + \ifnum#2=\m@ne + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minusone@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minusone@ + \else + \ifnum#2=-\tw@ + \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minustwo@@ + \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minustwo@ + \else + \PackageWarning{etoc} + {unexpected value `#2' in \string\etocsetlevel.^^J% + Should be -2,-1, 0, 1, 2, 3, 4, 5, or 6. Set to 6 (=ignored)}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@@six@@ +\fi\fi\fi} +\etocsetlevel{book}{-2} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref}{\Etoc@hyperreftrue + \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}% + \long\def\Etoc@gobblesixorfive#1#2#3#4#5#6{}} + {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}% + \long\def\Etoc@gobblesixorfive#1#2#3#4#5{}}% +} +\def\Etoc@setflags {% + \ifcase \Etoc@level + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@true + \or + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@itrue + \or + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iitrue + \or + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiitrue + \or + \global\Etoc@vfalse + \global\Etoc@ivtrue + \or + \global\Etoc@vtrue + \else + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@false + \ifnum\Etoc@level=\m@ne + \global\Etoc@jtrue + \else + \global\Etoc@jfalse + \global\Etoc@jjtrue + \fi + \fi} +\def\Etoc@doends {% + \ifcase \Etoc@level + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii\Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two\fi + \ifEtoc@i \Etoc@end@one\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii\Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii\Etoc@end@three\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv\Etoc@end@four\fi + \or + \ifEtoc@v \Etoc@end@five\fi + \or + \else + \ifEtoc@v \Etoc@end@five \fi + \ifEtoc@iv \Etoc@end@four \fi + \ifEtoc@iii\Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two \fi + \ifEtoc@i \Etoc@end@one \fi + \ifEtoc@ \Etoc@end@zero \fi + \ifnum \Etoc@level =-\tw@ + \ifEtoc@j \Etoc@end@minusone\fi + \fi + \fi +} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +\def\Etoc@etoccontentsline #1{% + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \Etoc@skipthisonefalse + \ifnum\Etoc@level=\Etoc@@six@@ + \Etoc@skipthisonetrue + \else + \ifEtoc@localtoc + \let\Etoc@next\relax + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \fi + \ifnum\Etoc@level<\Etoc@localtop + \def\Etoc@next{\global\Etoc@stoptoctrue}% + \Etoc@skipthisonetrue + \fi + \ifEtoc@notactive + \def\Etoc@next{\Etoc@setflags}% + \Etoc@skipthisonetrue + \fi + \Etoc@next + \fi + \fi + \let\Etoc@next\Etoc@gobblesixorfive + \ifnum\c@tocdepth<\Etoc@level + \else + \ifEtoc@skipthisone + \else + \ifEtoc@standard\let\Etoc@next\@thirdofthree + \else + \Etoc@doends + \let\Etoc@next\@empty + \Etoc@global\Etoc@isfirstfalse + \ifcase\Etoc@level + \ifEtoc@\else \def\Etoc@next{\Etoc@begin@zero}\fi + \or + \ifEtoc@i\else \def\Etoc@next{\Etoc@begin@one}\fi + \or + \ifEtoc@ii\else \def\Etoc@next{\Etoc@begin@two}\fi + \or + \ifEtoc@iii\else \def\Etoc@next{\Etoc@begin@three}\fi + \or + \ifEtoc@iv\else \def\Etoc@next{\Etoc@begin@four}\fi + \or + \ifEtoc@v\else \def\Etoc@next{\Etoc@begin@five}\fi + \else + \ifnum\Etoc@level=\m@ne + \ifEtoc@j\else \def\Etoc@next{\Etoc@begin@minusone}\fi + \else + \ifEtoc@jj\else \def\Etoc@next{\Etoc@begin@minustwo}\fi + \fi + \fi + \Etoc@setflags + \Etoc@next + \let\Etoc@next\@empty + \Etoc@global\expandafter\def\expandafter\Etoc@prefix\expandafter + {\csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname }% + \Etoc@global\expandafter\def\expandafter\Etoc@contents\expandafter + {\csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname }% + \ifEtoc@skipprefix \Etoc@global\let\Etoc@prefix\@empty\fi + \global\Etoc@skipprefixfalse + \fi\fi\fi + \Etoc@next + \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}% +} +\def\Etoc@lxyz #1#2{% + \Etoc@global\@namedef {etoclink }{\leavevmode}% fall-back + \Etoc@global\let\etocthelink \@empty % fall-back + \Etoc@global\def\etocthename {#1}% (if link, will be removed later) + \Etoc@global\def\etocthelinkedname {#1}% will probably get redefined + \Etoc@getthepage #2\etoc@ % defines \etocthelinkedpage (and \etoclink) + \Etoc@getnb #1\relax\relax\etoc@ % gets number *and* name, and \etoclink + \ifEtoc@number\else + \ifnum\Etoc@level=\m@ne + \Etoc@getit #1\hspace\relax\etoc@ % additional job for parts + \fi + \fi + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + } +\def\Etoc@getthepage #1{% + \let\Etoc@next\Etoc@getthepage@nohyp + \ifEtoc@hyperref\ifx #1\hyper@linkstart + \let\Etoc@next\Etoc@getthepage@hyp + \fi\fi + \Etoc@next #1% +} +\def\Etoc@getthepage@nohyp #1\etoc@ {% + \Etoc@global\def\etocthepage {#1}% + \Etoc@global\def\etocthelinkedpage {#1}% +} +\def\Etoc@getthepage@hyp #1#2#3#4#5\etoc@ {% + \Etoc@global\@namedef{etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% + \Etoc@global\def\etocthepage {#4}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedpage\expandafter + {\expandafter\hyperlink \Etoc@tmp{#4}}% +} +\def\Etoc@getnb #1{% + \let\Etoc@next\Etoc@getnb@nohyp + \ifEtoc@hyperref\ifx #1\hyper@linkstart + \let\Etoc@next\Etoc@getnb@hyp + \fi\fi + \Etoc@next #1% +} +\def\Etoc@getit #1{% + \let\Etoc@next\Etoc@getit@nohyp + \ifEtoc@hyperref\ifx #1\hyper@linkstart + \let\Etoc@next\Etoc@getit@hyp + \fi\fi + \Etoc@next #1% +} +\def\Etoc@getnb@nohyp #1#2#3\etoc@ {% + \def\Etoc@getname ##1\relax\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \Etoc@global\def\etocthelinkedname {##1}% + }% + \ifx #1\numberline + \Etoc@global\def\etocthenumber {#2}% + \Etoc@global\def\etocthelinkednumber {#2}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname #3\etoc@ + \else % then \etocthename and \etocthelinkedname already defined + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\let\etocthelinkednumber \@empty + \Etoc@global\Etoc@numberfalse + \fi +} +\def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {% + \def\Etoc@getname ##1\relax\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedname\expandafter + {\expandafter\hyperlink \Etoc@tmp{##1}}% + }% + \def\Etoc@getnbr ##1##2##3\etoc@ {% + \ifx ##1\numberline + \Etoc@global\def\etocthenumber {##2}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkednumber + \expandafter{\expandafter\hyperlink \Etoc@tmp{##2}}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname ##3\etoc@ + \else + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\let\etocthelinkednumber \@empty + \Etoc@global\Etoc@numberfalse + \Etoc@global\def\etocthename {#4}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedname + \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}% + \fi + }% + \Etoc@global\@namedef {etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}% + \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}% + \Etoc@getnbr #4\relax\relax\etoc@ +} +\def\Etoc@getit@nohyp #1\hspace#2#3\etoc@ {% + \def\Etoc@getname ##1\hspace\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \Etoc@global\def\etocthelinkedname {##1}% + }% + \ifx\relax#2\else + \Etoc@global\def\etocthenumber {#1}% + \Etoc@global\def\etocthelinkednumber {#1}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname #3\etoc@ + \fi +} +\def\Etoc@getit@hyp #1#2#3#4#5#6\etoc@ {% + \def\Etoc@getname ##1\hspace\relax\etoc@ {% + \Etoc@global\def\etocthename {##1}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkedname + \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% + }% + \def\Etoc@getnbr ##1\hspace##2##3\etoc@ {% + \ifx\relax##2\else + \Etoc@global\def\etocthenumber {##1}% + \edef\Etoc@tmp {{#3}}% + \Etoc@global\expandafter\def\expandafter\etocthelinkednumber + \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}% + \Etoc@global\Etoc@numbertrue + \Etoc@getname ##3\etoc@ + \fi + }% + \Etoc@getnbr #4\hspace\relax\etoc@ +} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@empty +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@number\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected, not used; run LaTeX again (cheers from etoc)}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +\def\Etoc@toctoc{% + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@false + \global\Etoc@jfalse + \global\Etoc@jjfalse +\the\Etoc@toctoks +\ifEtoc@notactive\else + \ifEtoc@v \Etoc@end@five\fi + \ifEtoc@iv \Etoc@end@four\fi + \ifEtoc@iii \Etoc@end@three\fi + \ifEtoc@ii \Etoc@end@two\fi + \ifEtoc@i \Etoc@end@one\fi + \ifEtoc@ \Etoc@end@zero\fi + \ifEtoc@j \Etoc@end@minusone\fi + \ifEtoc@jj \Etoc@end@minustwo\fi +\fi} +\def\etoc@@startlocaltoc#1#2{% +\let\Etoc@next\relax + \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 + \def\Etoc@next{\global\Etoc@notactivefalse + \global\Etoc@vfalse + \global\Etoc@ivfalse + \global\Etoc@iiifalse + \global\Etoc@iifalse + \global\Etoc@ifalse + \global\Etoc@false + \global\Etoc@jfalse + \global\Etoc@jjfalse}% + \fi + \fi\fi +\Etoc@next} +\let\etoc@startlocaltoc\@gobble +\def\Etoc@localtableofcontents#1{% + \edef\Etoc@tmp{#1}% + \ifnum\Etoc@tmp<\@ne + \PackageWarning{etoc} + {Unknown toc id: run LaTeX to get references right}% + \let\Etoc@next\@gobble\else\let\Etoc@next\@firstofone\fi + \Etoc@next + {\edef\etoc@startlocaltoc##1{% + \noexpand\etoc@@startlocaltoc{##1}{#1}} + \Etoc@localtoctrue + \let\Etoc@localtop\Etoc@@minustwo@@ + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \Etoc@tableofcontents}% + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@aftertochook % 1.07h + \etocaftertochook % 1.07g +} +\def\Etoc@getrefno #1#2\etoc@ {#1} +\def\Etoc@getref #1{\@ifundefined{r@#1}{0}{\expandafter\expandafter\expandafter + \Etoc@getrefno\csname r@#1\endcsname\relax\etoc@}} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@t@bleofcontents{% + \ifx\Etoc@nexttoken\label + \def\Etoc@next{\expandafter\Etoc@label\@gobble}\else + \ifx\Etoc@nexttoken\@sptoken + \let\Etoc@next\Etoc@again\else + \ifEtoc@tocwithid + \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}% + \else + \ifx\Etoc@nexttoken\ref + \def\Etoc@next{\expandafter\Etoc@ref\@gobble}% + \else + \def\Etoc@next{\Etoc@localtocfalse + \global\Etoc@notactivefalse + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@aftertochook % 1.07h + \etocaftertochook % 1.07g + }% + \fi + \fi\fi\fi\Etoc@next} +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc} + {\string\etoc@startlocaltoc{\arabic{etoc@tocid}}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@par + \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents + \let\tof@begingroup\@empty + \let\tof@endgroup \@empty + \def\etoc@startlocaltoc##1{\etoc@@startlocaltoc{##1}{\c@etoc@tocid}}% + \@ifstar + {\def\Etoc@aftertitlehook{}\Etoc@table@fcontents} + {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@table@fcontents}} +\let\tableofcontents\etoctableofcontents +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@par + \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents + \let\tof@begingroup\@empty + \let\tof@endgroup \@empty + \@ifstar + {\def\Etoc@aftertitlehook{}\Etoc@localtable@fcontents} + {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@localtable@fcontents}} +\long\def\Etoc@gobbletoetoc@ #1\etoc@ {} +\newcommand\etocsettocstyle[2]{% +\def\Etoc@tableofcontents +{% + \ifnum\c@tocdepth>\Etoc@minf\else + \expandafter\Etoc@gobbletoetoc@ + \fi + \etocbeforetitlehook % 1.07m + \Etoc@storetocdepth % 1.07g + \let\Etoc@savedcontentsline\contentsline % moved up here 1.08 + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standard + \else % moved here from \Etoc@toctoc (1.08) + \def\Etoc@levellist@elt####1{\let####1\Etoc@lxyz}% + \Etoc@levellist + \let\booknumberline\numberline + \let\partnumberline\numberline + \let\chapternumberline\numberline + \fi + #1% + \ifEtoc@parskip\parskip\z@skip\fi %1.07d + \Etoc@aftertitlehook + \Etoc@toctoc + \ifEtoc@tocwithid\else + \ifEtoc@localtoc + \ifEtoc@notactive + \Etoc@localtocfalse + \global\Etoc@notactivefalse + \Etoc@toctoc + \fi + \fi + \fi + \etocaftercontentshook + #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here + \Etoc@resettocdepth % 1.07g. moved here from before #2 by 1.08 + \ifx\Etoc@global\global\ifx\tof@finish\@empty\else + \global\let\contentsline\Etoc@savedcontentsline + \fi\fi + \@gobble\etoc@ +}% end of \Etoc@tableofcontents definition by \etocsettocstyle +} +\def\etocsetstyle{\Etoc@standardfalse\etoc@setstyle} +\long\def\etoc@setstyle#1#2#3#4#5{% + \long\expandafter\def + \csname Etoc@begin@\csname Etoc@#1@\endcsname\endcsname + {#2\Etoc@global\Etoc@isfirsttrue}% + \long\expandafter\def + \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname {#3}% + \long\expandafter\def + \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname {#4}% + \long\expandafter\def + \csname Etoc@end@\csname Etoc@#1@\endcsname\endcsname {#5}% +} +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {\partname} +\def\etocbookname {Book} +\def\etocdefaultlines{\Etoc@standardfalse % +%% `book': +\etoc@setstyle{@minustwo} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocbookname\enspace\etocnumber:\quad}{}\etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% +%% `part': +\etoc@setstyle{@minusone} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}\etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +%% `chapter': +\etoc@setstyle{@zero} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +%% `section': +\etoc@setstyle{@one} + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par} + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par} + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +%% `subsection': +\etoc@setstyle{@two} + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par} + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par} + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +%% `subsubsection': +\etoc@setstyle{@three} + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}}% +\etoc@setstyle{@four}{}{}{}{}% +\etoc@setstyle{@five}{}{}{}{}% +} % end of \etocdefaultlines! +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne\let\Etoc@next\@firstoftwo + \else \let\Etoc@next\@secondoftwo\fi + \Etoc@next{% + \multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\let\Etoc@next\@firstofone + \else \let\Etoc@next\@gobble\fi + \Etoc@next{\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne\let\Etoc@next\@firstoftwo + \else \let\Etoc@next\@secondoftwo\fi + \Etoc@next + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\let\Etoc@next\@firstofone + \else \let\Etoc@next\@gobble\fi + \Etoc@next{\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax\else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss% + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne\let\Etoc@next\@firstoftwo + \else \let\Etoc@next\@secondoftwo\fi + \Etoc@next + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\let\Etoc@next\@firstofone + \else \let\Etoc@next\@gobble\fi + \Etoc@next{\end{multicols}\unskip}% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax\else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +\def\etocarticlestyle{% + \etocsettocstyle + {\section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}} + {}} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\section *{\contentsname}} + {}} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}} + {\if@restonecol \twocolumn \fi}} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \chapter *{\contentsname}} + {\if@restonecol \twocolumn \fi}} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirtoctotocfmt #1#2{% + \def\Etoc@addsuitablecontentsline{\addcontentsline {toc}{#1}{#2}}% + \renewcommand*\etocaftertitlehook{% + \ifmem@em@starred@listof + \else\phantomsection\aftergroup\Etoc@addsuitablecontentsline\fi}} +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \@nameuse {@tocmaketitle} + \Etoc@aftertitlehook\let\Etoc@aftertitlehook\relax + \parskip \cftparskip \@nameuse {cfttocbeforelisthook}} + {\@nameuse {cfttocafterlisthook}\endgroup\restorefromonecol}} +\def\etocscrartclstyle{% + \etocsettocstyle + {\let\if@dynlist\if@tocleft + \def\@currext{toc}% added 1.07m 2015/01/23 + \iftocfeature {toc}{onecolumn} + {\iftocfeature {toc}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% + \iftocfeature {toc}{numberline}{\def \nonumberline {\numberline {}}}{}% + \tocbasic@listhead {\listoftocname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \iftocfeature {toc}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at toc deactivated}}% + \fi + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@toc@before@hook\endcsname} + {\csname tb@toc@after@hook\endcsname + \csname tocbasic@@after@hook\endcsname}} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +\def\etocstandarddisplaystyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +\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} + {\etocsetlevel{appendix}{0}% + \renewcommand*\etocfontone{\normalfont\normalsize} + \etocmemoirtoctotocfmt{chapter}{\contentsname}% + \renewcommand*\etocstandarddisplaystyle{\etocmemoirstyle} + \Etoc@redefetocstyle{chapter}}{} +\def\etoctocloftstyle {% + \etocsettocstyle + {\@cfttocstart\par\begingroup + \parindent\z@ \parskip\cftparskip \@cftmaketoctitle + \if@cfttocbibind\@cftdobibtoc\fi }% + {\endgroup\@cfttocfinish }% +} +\@ifclassloaded{memoir}{} +{\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \renewcommand*\etocstandarddisplaystyle{\etoctocloftstyle} + \AtBeginDocument{\let\tableofcontents\etoctableofcontents} + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarning {etoc} + {Package `tocloft' was loaded after `etoc'!^^J% +**** to prevent it from overwriting \protect\tableofcontents, it will be tricked^^J% +**** into believing to have been loaded with option `titles'. For better^^J% +**** compatibility, please load `tocloft' before `etoc'}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' /before/ `etoc'!}}\fi + \@cftnctoctrue }% + {}% + }% + }% +} +\def\Etoc@addtocontents #1#2% + {\ifEtoc@hyperref + \addtocontents {toc}{\protect\contentsline + {#1}{#2}% + {\thepage }{\@currentHref }}% + \else + \addtocontents {toc}{\protect\contentsline + {#1}{#2}{\thepage }}% + \fi} +\def\Etoc@addcontentsline@ #1#2#3% + {\@namedef{toclevel@#1}{#3}% + \addcontentsline {toc}{#1}{#2}} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +\def\Etoc@storetocdepth {\global\c@etoc@tocdepth\c@tocdepth } +\def\Etoc@resettocdepth {\global\c@tocdepth\c@etoc@tocdepth } +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\c@tocdepth>\c@etoc@tocdepth + \global\c@tocdepth\c@etoc@tocdepth\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +\def\etocdepthtag #1#{\Etoc@depthtag } % \etocdepthtag.toc {name} +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {the command \protect#1\space is incompatible with etoc} + {use \protect\etocsettocdepth.toc as replacement (check the manual)}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageWarning{etoc}{You may consider using \protect\etocsettocdepth.toc + as a drop-in^^J + replacement to the memoir own \protect\settocdepth\space + if you wish to exploit etoc to its^^J + fullest. Similarly consider using + \protect\etocsettocdepth\space and + \protect\etocsetnexttocdepth^^J rather + than memoir's \protect\maxtocdepth.}} + {\@ifpackageloaded {tocvsec2} + {\def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% % if etoc is added to file previously + \let\reset@tocdepth\relax % using tocvsec2 + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarning {etoc} + {package tocvsec2 detected and its modification of^^J + \protect\tableofcontents\space reverted. Use + \protect\etocsettocdepth.toc as a replacement^^J + for the tocvsec2 toc-related commands}}{}% + }% +}% +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\edef\Etoc@aftertochook {\global\c@tocdepth\the\c@tocdepth\space + \let\noexpand\Etoc@aftertochook\noexpand\@empty }% + \global\c@tocdepth\csname Etoc@#1@@\endcsname}% +}% +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble }{}}% +\def\etocstandardlines {\Etoc@standardtrue} +\def\etoctoclines {\Etoc@standardfalse} +\etocdefaultlines +\etocstandardlines +\etocstandarddisplaystyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\Etoc@aftertochook\@empty % private for \etocsetnexttocdepth +\let\etocaftertochook \@empty % public for end user. +\let\etocbeforetitlehook \@empty % new with 1.07m +\endinput +%% +%% End of file `etoc.sty'. -- cgit v1.2.3