diff options
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/etoc/etoc.dtx | 7007 |
1 files changed, 1499 insertions, 5508 deletions
diff --git a/Master/texmf-dist/source/latex/etoc/etoc.dtx b/Master/texmf-dist/source/latex/etoc/etoc.dtx index ed175a0bab4..f956e6ee9c6 100644 --- a/Master/texmf-dist/source/latex/etoc/etoc.dtx +++ b/Master/texmf-dist/source/latex/etoc/etoc.dtx @@ -2,28 +2,29 @@ % N.B.: this dtx file is NOT for use with \DocInput. The latex source of the % user manual is not prefixed with percent signs. %<*none> -\def\etocdtxtimestamp {Time-stamp: <23-09-2021 at 19:28:24 CEST>}% +\def\etocdtxtimestamp {Time-stamp: <30-08-2022 at 21:00:50 CEST>}% %</none> %<*!readme> %% %% Package: etoc -%% Version: 1.09e +%% Version: 1.09f %% License: LPPL 1.3c -%% Copyright (C) 2012-2021 Jean-Francois Burnol +%% Copyright (C) 2012-2022 Jean-Francois Burnol %% <jfbu at free dot fr> -%% Copyright (C) 2014-2015 Christine Roemer and collaborators -%% <Christine_Roemer at t-online dot de> -%% (translation into German of the documentation) %</!readme> %<*none> -\def\etocpkgdate {2021/09/23} -\def\etocdocdate {2021/09/23} -\def\etocpkgversion {v1.09e} +\def\etocpkgdate {2022/08/30} +\def\etocdocdate {2022/08/30} +\def\etocpkgversion {1.09f} \def\etocpkgdescription {Completely customisable TOCs (JFB)} -\def\etocDEpkgdate {23.09.2021}% METTRE À JOUR À CHAQUE BUMP! -\def\etocDEdocdate {23.09.2021} -\def\etocDEDEdocdate {09.04.2015}% -\def\etocDEDEpkgversion {v1.08d}% +%% German translation was last udpated on April 2015 and all new material +%% was included since in English. During 2020/2021/2022 emerged a still +%% unresolved texdoc problem which always displays etoc-DE.pdf preferentially. +%% On 2022/08/26, decision is made to stop shipping this etoc-DE.pdf. +%% The dtx gets purged from its soure as well. +%% Not sure if I will make pdf available for download from some web site, +%% but this can always be done if requests emerge; but I hesitate for +%% the location. % Definition of \etocLicense % -------------------------- \begingroup @@ -32,12 +33,9 @@ \catcode32=13\catcode`\\=12^^Brelax^^A ^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A {% Package: etoc -% Version: 1.09e +% Version: 1.09f % License: LPPL 1.3c -% Copyright (C) 2012-2021 Jean-Francois Burnol <jfbu at free dot fr> -% Copyright (C) 2014-2015 Christine Roemer and collaborators -% <Christine_Roemer at t-online dot de> -% (translation into German of the documentation) +% Copyright (C) 2012-2022 Jean-Francois Burnol <jfbu at free dot fr> % % This Work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, in its @@ -48,34 +46,26 @@ % 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: +% The Author of this Work is: % Jean-Francois Burnol <jfbu at free dot fr> -% for the source code and English documentation, and -% Christine Roemer <Christine_Roemer at t-online dot de> and collaborators -% for the translation into German of the documentation. % % This Work consists of the main source file etoc.dtx and the derived -% files etoc.sty, etoc.tex, etoc-DE.tex, etoc.pdf, etoc-DE.pdf, -% etoc.dvi, etoc-DE.dvi, README.md. +% files etoc.sty, etoc.tex, etoc.pdf, etoc.dvi, README.md. % % Running etex (or latex or pdflatex) on etoc.dtx extracts etoc.sty, -% etoc.tex, etoc-DE.tex, and README.md. See README.md for -% further instructions. +% etoc.tex and README.md. See README.md for further instructions. }}% \bgroup\catcode2 0 \catcode`\\ 12 ^^Biffalse %</none> %<*readme> <!-- --> - Source: etoc.dtx (v1.09e) + Source: etoc.dtx (1.09f) Author: Jean-Francois Burnol - Author: Christine Roemer et al. (German tranlation) Info: Completely customisable TOCs License: LPPL 1.3c - Copyright (C) 2012-2021 Jean-Francois Burnol. - Copyright (C) 2014-2015 Christine Roemer and collaborators - (translation into German of the documentation) - <jfbu at free dot fr> <Christine_Roemer at t-online dot de> + Copyright (C) 2012-2022 Jean-Francois Burnol. + <jfbu at free dot fr> ABSTRACT ======== @@ -125,7 +115,7 @@ the file etoc.tex which was extracted from `etex etoc.dtx` step. Options can be set in etoc.tex: -- scrdoc class options (paper size, font size, ...) +- scrartcl class options (paper size, font size, ...) - with or without source code, - with dvipdfmx or with latex+dvips or pdflatex. @@ -139,7 +129,6 @@ 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. @@ -160,22 +149,52 @@ 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: +The Author of this Work is Jean-Francois Burnol <jfbu at free dot fr> -- Jean-Francois Burnol `<jfbu at free dot fr>` for the source code - and English documentation, and -- Christine Roemer `<Christine_Roemer at t-online dot de>` and - collaborators for the translation into German of the documentation. - -This Work consists of the main source file etoc.dtx and the -derived files etoc.sty, etoc.tex, etoc-DE.tex, -etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. +This Work consists of the main source file etoc.dtx and the derived files +etoc.sty, etoc.tex, etoc.pdf, etoc.dvi. RECENT CHANGES ============== -v1.09e \[2021/09/23\] ---------------------- +1.09f \[2022/08/30\] +-------------------- + +No more shipping of a German translation of the documentation, as +it was last updated in April 2015. + +(etoc.pdf) User level commands hyperlink from their code source +definitions to their descriptions in the documentation part. Macros +used in the code source hyperlink to where they first got defined +there. + +Wrap the `\etocpartname` (from etoc's package provided toc line style) +together with the part number in a potential common hyperlink. + +Try to sync the emulation of the global display style with KOMA-script +`v3.37` (in particular regarding the `noparskipfake` KOMA toc feature). + +Improve documentation of some aspects under `memoir` class. + +Remove the `\nonumberline` token, even though empty, from the meaning of +`\etocthename` (KOMA-script classes). + +Add `\etocimmediatedepthtag.toc` to work around problems related to +`\include` (see user doc). Thanks to Norman Ramsey who reported the problem +and proposed a work-around in July 2016. Apologies for the somewhat longish +delay in incorporating it... + +Also add `\etocimmediatesettocdepth.toc`. + +Also add `\etocimmediatetoccontentsline` and its starred variant. + +Also add `\etocimmediatesetlocaltop.toc`. + +Fix an obscure bug (see source code comments) in the `\etocsetlocaltop.toc` +mechanism. + +1.09e \[2021/09/23\] +-------------------- Needed (if etoc is used without hyperref) updates to internal macros to prepare for the upcoming LaTeX November @@ -183,8 +202,8 @@ internal macros to prepare for the upcoming LaTeX November Related updates to the user macro `\etoctoccontentsline`. -v1.09d \[2021/07/13\] ---------------------- +1.09d \[2021/07/13\] +-------------------- Some minor synching with tableof 1.4c. @@ -196,33 +215,10 @@ Thanks to Denis Bitouzé for report. Usage: `\usepackage{etoc}\etockeeporiginaltableofcontents`, then however you must employ `\etoctableofcontents`, not `\tableofcontents`. -v1.09c \[2020/05/15\] ---------------------- - -Syncs with KOMA-script deprecation of `\iftocfeature`. - -v1.09a, v1.09b \[2019/11/17\] ------------------------------ - -Sync with `memoir v3.7i` which has a better location of the TOC -hyperref anchor. The `\etocaftertitlehook` can now freely be -used also with memoir class (formerly its usage in case of -memoir class was preempted by etoc itself). For more details -refer to the section "Compatibility with the memoir class". - -v1.09 \[2019/03/09\] +1.09c \[2020/05/15\] -------------------- -New features: `\etoclocaltop`, `\localtableofcontentswithrelativedepth`. -Thanks to Tony Roberts for feature request. - -Note to hackers: internal control sequence `\Etoc@localtop` is gone. - -etoc now requires e-TeX (`\numexpr`, `\unless`). - -Note: the German version of the documentation was last updated -at the time of the v1.08d \[2015/04/09\] release. Since then -all additions to it have been left in English language. +Syncs with KOMA-script deprecation of `\iftocfeature`. %</readme> %<*tex>------------------------------------------------------------------------- %% run pdflatex thrice on this file etoc.tex to produce the documentation @@ -232,36 +228,13 @@ all additions to it have been left in English language. \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} +\PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrartcl} \PassOptionsToPackage {ngerman,english}{babel} -\chardef\ForEnglish 1 % (\ForEnglish and \ForDeutsch flags can't be BOTH 1 ...) -\chardef\ForDeutsch 0 % \input etoc.dtx %%% Local Variables: %%% mode: latex %%% End: %</tex>------------------------------------------------------------------------- -%<*DEtex>----------------------------------------------------------------------- -%% run pdflatex thrice on this file etoc-DE.tex to produce the German -%% documentation etoc-DE.pdf (without source code). -%% -%% Um etoc-DE.pdf zu erzeugen ist pdflatex dreimal mit etoc-DE.tex laufen -%% zu lassen. -%% -\chardef\Withdvipdfmx 0 % replace 0 by 1 for using latex+dvipdfmx -\chardef\NoSourceCode 1 % replace 1 by 0 for the doc *with* the source code -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile {etoc-DE.tex}[Driver for etoc German documentation]% -%% or with german rather than ngerman in the two lines below -\PassOptionsToClass {a4paper,fontsize=11pt,twoside,ngerman}{scrdoc} -\PassOptionsToPackage {english,ngerman}{babel} -\chardef\ForEnglish 0 % (\ForEnglish and \ForDeutsch flags can't be BOTH 1 ...) -\chardef\ForDeutsch 1 % -\input etoc.dtx -%%% Local Variables: -%%% mode: latex -%%% End: -%</DEtex>----------------------------------------------------------------------- %<*none>------------------------------------------------------------------------ ^^Bfi^^Begroup % @@ -277,12 +250,10 @@ all additions to it have been left in English language. \chardef\extractfiles 1 % 1 = extract files and typeset manual, 2 = only typeset \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips, 1 = dvipdfmx \chardef\NoSourceCode 1 % 0 = include source code, 1 = do not - \chardef\ForEnglish 1 - \chardef\ForDeutsch 0 \NeedsTeXFormat {LaTeX2e}% - \PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc}% + \PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrartcl}% \PassOptionsToPackage {ngerman,english}{babel}% - \else % latex run is on etoc.tex or etoc-DE.tex + \else % latex run is on etoc.tex \chardef\extractfiles 2 % do not extract files, only typeset \fi \ProvidesFile{etoc.dtx}% @@ -301,9 +272,6 @@ all additions to it have been left in English language. \Msg{* To produce the documentation with source code included run pdflatex^^J}% \Msg{* thrice on file etoc.tex^^J}% \Msg{*^^J}% -\Msg{* To produce the German documentation run pdflatex thrice on file^^J}% -\Msg{* etoc-DE.tex^^J}% -\Msg{*^^J}% \Msg{* Happy TeXing!^^J}% \Msg{*^^J}% \Msg{********************************************************************^^J}% @@ -314,12 +282,11 @@ all additions to it have been left in English language. \def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% \string\NeedsTeXFormat{LaTeX2e}^^J% \string\ProvidesPackage{etoc}^^J% - \space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% + \space[\etocpkgdate\space v\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}}}% \endgroup @@ -339,9 +306,146 @@ all additions to it have been left in English language. \ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi %------------------------------------------------------------------------------- % START OF USER MANUAL TEX SOURCE -\documentclass[abstract]{scrdoc} +\documentclass[abstract]{scrartcl} -\ifnum\NoSourceCode=1 \OnlyDescription\fi +\makeatletter +%%% START OF CUSTOM doc.sty LOADING (May 21, 2022 in xint.dtx) +%%% (August 26, 2022 here, comments trimmed) +% +% For some legacy reason (because I started like this and it +% worked to my satisfaction) I had used scrdoc.cls all those +% years, without in fact needing most of its features. +% +% It loads ltxdoc class, from which again I need very little. On +% testing May 20, 2022 the upcoming LaTeX 2022-06-01 I had some +% problems with ltxdoc not having suitable interface for rolling +% back to doc=V2. +% +% ... +% +% Thus it turns out I need very little of doc.sty, and almost +% nothing of ltxdoc.cls and scrdoc.cls. +% +% (maybe provisory, try to see if usage of cross-hyperlinking +% as in sourcexint.pdf makes sense here for rendering of +% implementation part - loading time of etoc.pdf in viewer +% in increased, though. 2022/08/26) +% +% Let's load the doc=V2 version to avoid having to work around +% hypdoc loading interfering with my use of hyperref. +\ifdefined\IfFormatAtLeastTF + \IfFormatAtLeastTF{2022/06/01}% + {% + \IfFileExists{doc-2021-06-01.sty}% + {\usepackage{doc}[=v2]}% +% Why on earth do I lose my time doing this? + {\GenericError + {(xint build doc)\@spaces}% + {xint build error: % + Your LaTeX installation seems to be broken, format is\MessageBreak + 2022-06-01 or later but `doc' package in its `v2' version\MessageBreak + seems to not be available. \space Will try with `doc' but if\MessageBreak + its `v3' is used there will be an option clash error\MessageBreak + regarding hyperref.}% + {}% + {Please make sure `doc' package matches your LaTeX format.}% + \usepackage{doc}% + }% + }% + {\usepackage{doc}}% +\else +\usepackage{doc} +\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% MACROS OF doc.sty WILL BE HACKED (2022/06/06) FOR THE IMPLEMENTATION PART +% +% First we want to turn CodelineNo into a real LaTeX counter +% This will spare defining an extra counter for the hyperlinks with \hyperref +\begingroup\let\newcount\@gobble\@definecounter{CodelineNo}\endgroup +% Let's now reenact the doc.sty default for \theCodeLineNo +\def\theCodelineNo{\reset@font\scriptsize\arabic{CodelineNo}} +% But as we will reset CodelineNo at each style file we need some unique id +\def\theHCodelineNo{\the\value{section}.\the\value{CodelineNo}} +% This is all for now. +% The further hacks are to be found after the \StopEventually (i.e. a few +% thousands lines down from here if you don't have access to the private +% sources, which is probably the case if you are not the author). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% As explained above I was formerly using scrdoc hence ltxdoc indirectly. +% Let's emulate here the little I appear to need from ltxdoc.cls and +% srcdoc.cls. +% +\AtBeginDocument{\MakeShortVerb{\|}} +\DeclareFontShape{OT1}{cmtt}{bx}{n}{<-> ssub * cmtt/m/n}{} +\DeclareFontFamily{OMS}{cmtt}{\skewchar\font 48} % '60 +\DeclareFontShape{OMS}{cmtt}{m}{n}{<-> ssub * cmsy/m/n}{} +\DeclareFontShape{OMS}{cmtt}{bx}{n}{<-> ssub * cmsy/b/n}{} +\DeclareFontShape{OT1}{cmss}{m}{it}{<->ssub*cmss/m/sl}{} +\ifnum\NoSourceCode=1 + \OnlyDescription +\fi +\CodelineNumbered +\EnableCrossrefs % but this will be hacked +% \setcounter{StandardModuleDepth}{1} % we don't use this mechanism currently +\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}} +\def\cmd@to@cs#1#2{\char\number`#2\relax} +% Here I am loading doc=v2 but formerly I was using ltxdoc via scrdoc +% which I dropped at release 1.4l (2022-05-29) and without much +% thinking I had kept this. +\DeclareRobustCommand\cs[1]{\texttt{\bslash#1}} +% As I may have the * active, or macro names with _ or ^, I should +% add \detokenize. But see below for a redefinition anyhow. +% +% More urgent is that I am also using hyperref and this definition gives wrong +% bookmarks if \cs is used in section titles. As I had very very few usags of +% \cs in the whole of xint.dtx, it took me a while to realize the problem +% here. Turns out that doc=v3 by default loads hypdoc which includes this +% configuation for hyperref compatibility: +\AtBeginDocument{% +\pdfstringdefDisableCommands{\def\cs#1{\textbackslash\detokenize{#1}}}% +}% +% As I have not loaded hyperref yet I must delay it to AtBeginDocument. +%%%%%%%% +%% This is xint.dtx only stuff, not used here +%% % Late May, early June 2022 I added to my custom \verb automated detection +%% % of potential hyperlinks. So I decided to replace \cs ltxdoc definition +%% % by suitable \verb usage. It is not important to be efficient here, +%% % I can leave some \expandafter, in fact there are a handful of uses. +%% \DeclareRobustCommand\cs[1]{\expandafter\verb\expandafter~\bslash#1~} +%% % As my \verb does a verbatimizing \scantokens I don't need to worry +%% % here about active characters but I need in the PDF string, hence +%% % the \detokenize above. +%%%%%%%% +\providecommand\marg[1]{% + {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}} +\providecommand\oarg[1]{% + {\ttfamily[}\meta{#1}{\ttfamily]}} +\providecommand\parg[1]{% + {\ttfamily(}\meta{#1}{\ttfamily)}} +% \@addtoreset{CodelineNo}{part}% No need for this here +% \def\partname{File}% \partname is "fixed" somewhere further down anyhow +% No need for this, anyhow I don't build the indices +% \gdef\codeline@wrindex#1{\if@filesw +% \begingroup +% \let\protect\noexpand +% \immediate\write\@indexfile +% {\string\indexentry{#1}% +% {\filesep\number\c@CodelineNo}}% +% \endgroup\fi} +% \let\filesep\@empty + +% There is very little we seem to need from the scrdoc extras: page geometry +% is set by geometry package and a4paper option from xint.tex file. So it +% seems I only need the hologo loading: +\usepackage{hologo} +\DeclareRobustCommand*{\eTeX}{\hologo{eTeX}}% +\DeclareRobustCommand*{\LuaTeX}{\hologo{LuaTeX}}% +% +\makeatother +%%% end of ltxdoc+srcdoc emulation from June 2022 xint.dtx, +%%% copied over almost verbatim to etoc.dtx on 2022/08/26. +%%% See after \StopEventually for doc.sty hacks. \usepackage{ifpdf} \ifpdf\chardef\Withdvipdfmx 0 \fi @@ -543,7 +647,8 @@ all additions to it have been left in English language. }{} \usepackage{xspace} -\usepackage[dvipsnames]{xcolor} +% added svgnames 2022/08/26 on occasion of transfer from xint colouring scheme +\usepackage[dvipsnames,svgnames]{xcolor} \usepackage{graphicx} \usepackage[inline]{enumitem} \usepackage{array} @@ -557,15 +662,12 @@ all additions to it have been left in English language. \usepackage {babel} % ngerman and english options have been passed to babel \AtBeginDocument { %% ATTENTION à ce que fait la classe scrdoc: File/Datei pour \partname !!! -%% Je l'avais oublié pour 1.08 lorsque je suis passé à ngerman. +%% Je l'avais oublié pour 1.08 lorsque je suis passé à ngerman. (obsolète) %% Attention aussi au fait qu'il faut faire le \renewcommand\partname %% ET le mettre dans les \captions... %% - \ifnum\ForEnglish=1 \renewcommand\partname{Part}\fi - \ifnum\ForDeutsch=1 \renewcommand\partname{Teil}\fi + \renewcommand\partname{Part}% \addto\captionsenglish {\renewcommand\partname{Part}} - \addto\captionsgerman {\renewcommand\partname{Teil}} - \addto\captionsngerman {\renewcommand\partname{Teil}} } \usepackage{tikz} @@ -576,13 +678,13 @@ all additions to it have been left in English language. % \usepackage{etex} % % car erreur de compilation avec la pre-release 2015 de TeXLive à cause d'un -% missing \locbox avec forest 2014/03/07 v1.05. +% missing \locbox avec forest 2014/03/07 1.05. % % Dû au fait que etoolbox 2015/03/19 v2.1d ne charge plus etex lorsqu'il % détecte le nouveau format LaTeX 2015/01/01 qui a été diffusé sur CTAN aux % alentours de 2015/03/31 et qui est intégré à TeXLive 2015. % -% Note 12 mai 2015: la version 2015/05/04 v1.06 de forest fait maintenant +% Note 12 mai 2015: la version 2015/05/04 1.06 de forest fait maintenant % explicitement \RequirePackage {etex}. Il y a un nouveau package elocalloc de % David Carlisle, donc forest devrait plutôt tester si \locbox est défini % après avoir chargé etoolbox et sinon faire \RequirePackage {elocalloc}. @@ -606,39 +708,20 @@ all additions to it have been left in English language. % 12 mars 2015, pour 1.08a, see http://tex.stackexchange.com/a/232584/4686 \usetikzlibrary{mindmap} -%18 mai 2014: pdfinfo différent suivant anglais ou allemand -\ifnum\ForEnglish=1 -\usepackage[pdfencoding=pdfdoc]{hyperref} +\usepackage{hyperref}% I had used [pdfencoding=pdfdoc] until 1.09f \hypersetup{% linktoc=all,% why is the important stuff -%% bookmarksdepth=3,% (not needeed anymore now, v1.07g) +%% bookmarksdepth=3,% (not needeed anymore now, 1.07g) breaklinks=true,% colorlinks,% linkcolor=RoyalBlue,% Orchid urlcolor=OliveGreen,% -pdfauthor={Jean-Fran\c cois Burnol},% +pdfauthor={Jean-François Burnol},% on peut y aller maintenant avec ç en 2022... 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} @@ -649,15 +732,11 @@ pdfpagemode=UseOutlines} \usepackage{etoc} % loads multicol % for etoc's own default line styles. <1.08b had \partname by default but this % does not work well with babel+frenchb hence the default is now simply Part. -% Here we can use \partname as we do the documentation for English or German. -% Careful with the customization of \partname done by scrdoc class ! +% Here we can use \partname as we do (did) the documentation for English or German. +% Careful with the customization of \partname done by scrdoc class! (obsolete remark) \renewcommand{\etocpartname}{\partname} % see the \AtBeginDocument with \addto\captionsngerman etc... -\ifnum\ForDeutsch=1 - \renewcommand*{\etocabbrevpagename}{S.~} -\fi - %-------- % 10 octobre 2013: @@ -762,7 +841,6 @@ pdfpagemode=UseOutlines} \sbox{\lastnameii}{\etocname}% \sbox{\lastnumberii}{\etocnumber}} {} -\ifnum\ForEnglish=1 \etocsetstyle{section} {} {} @@ -784,32 +862,6 @@ pdfpagemode=UseOutlines} ``\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}% @@ -834,82 +886,17 @@ pdfpagemode=UseOutlines} \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}% #1\expandafter {\tmpstuff }% } +% for 1.09f mind map on title page +\def\prependpart #1#2#3{% + \edef\tmpstuff {child [branch color = #3]{\the#2} \the#1}% + #1\expandafter {\tmpstuff }% +} % Vendredi 13 mars 2015 à 18:10:40 % POUR LA TOC DE TITLE PAGE \usepackage{eso-pic} \usepackage{picture} -\newcount\tikznumberofcurrentgrandchild - -% copié de http://tex.stackexchange.com/a/232914 -\def\tikzmycustomgrowth {% - \pgftransformreset - \ifnum\tikztreelevel=1 -% \pgftransformrotate{55+((\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild)}% -% -90 Dimanche 25 septembre 2016 à 17:18:50. Non finalement zero. Non -36 -% **** -% Bon finalement 1.09 n'utilise plus cette customgrowth -% **** - \pgftransformrotate{-36+((\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild)}% - \pgftransformxshift{\the\tikzleveldistance}% - \fi - \ifnum\tikztreelevel=2 - \pgfmathsetmacro\tikzoffsetofcurrentchild{(\tikzsiblingdistance)*(6+\tikznumberofcurrentgrandchild)}% - \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight - \pgftransformxshift{\tikzlevelwidth/2} - \pgftransformyshift{-\tikzlevelheight/2+\tikzoffsetofcurrentchild} - \else - \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelheight}% - \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelwidth - \pgftransformxshift{\tikzlevelwidth/2-\tikzoffsetofcurrentchild} - \pgftransformyshift{\tikzlevelheight/2} - \else - \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelwidth}% - \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight - \pgftransformxshift{-\tikzlevelwidth/2} - \pgftransformyshift{\tikzlevelheight/2-\tikzoffsetofcurrentchild} - \else - \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelheight}% - \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelwidth - - \pgftransformxshift{-\tikzlevelwidth/2+\tikzoffsetofcurrentchild} - \pgftransformyshift{-\tikzlevelheight/2} - \else - \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelwidth}% - %\ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight - \pgftransformxshift{\tikzlevelwidth/2} - \pgftransformyshift{-\tikzlevelheight/2+\tikzoffsetofcurrentchild} - %\fi - \fi\fi\fi\fi - \global\advance\tikznumberofcurrentgrandchild by1 - \fi -} - -%version circulaire utilisée avec les version 1.08a--1.08f du manuel. -\def\tikzmycustomgrowth {% - \pgftransformreset - \ifnum\tikztreelevel=1 - \pgftransformrotate {126+(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild-1)}% - \fi - \ifnum\tikztreelevel=2 - \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(2+\tikznumberofcurrentgrandchild)}% - \global\advance\tikznumberofcurrentgrandchild by 1 - \fi - \pgftransformxshift {\the\tikzleveldistance}% -} - -\newcounter{partco} -% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 -\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} - -% For etoc.toctree file was used to test the Mind map separately -%\newwrite\TOCasTree - -\newbox\TitlePageMindmapTOC - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\etoc{% \texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}}{etoc}\xspace} @@ -922,10 +909,9 @@ pdfpagemode=UseOutlines} \newcommand\csbhyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} -\newcommand\toc{\csa{table\-of\-con\-tents}\xspace} -\newcommand\localtoc{\csa{local\-table\-of\-con\-tents}\xspace} -\newcommand\localtocwrdp - {\csa{local\-table\-of\-con\-tents\-with\-rel\-a\-tive\-depth}\xspace} +\newcommand\toc{\csa{tableofcontents}\xspace} +\newcommand\localtoc{\csa{localtableofcontents}\xspace} +\newcommand\localtocwrdp{\csa{localtableofcontentswithrelativedepth}\xspace} \newcommand\lowast{\raisebox{-.25\height}{*}} \newcommand\starit[1]{\csa{#1\lowast}} @@ -973,6 +959,8 @@ etoc-depth-tag etoc-set-tag-depth etoc-obey-depth-tags etoc-ig-nore-depth-tags +etoc-toc-con-tents-line +etoc-set-local-top etoc-stan-dard-dis-playstyle etoc-ar-ti-cle-style etoc-book-style @@ -1046,10 +1034,15 @@ etoc-bot-tom-rule-col-or-cmd etoc-bkg-col-or-cmd etoc-framed-mp-hook etoc-keep-orig-i-nal-table-of-con-tents +etoc-im-me-di-ate-set-toc-dep-th +etoc-im-me-di-ate-depth-tag +etoc-im-me-di-ate-toc-con-tents-line +etoc-im-me-di-ate-set-local-top } \hyphenation{next-toc-with-tags} -\frenchspacing +% removed, 2022/08/26 +% \frenchspacing \renewcommand\familydefault\sfdefault @@ -1083,38 +1076,139 @@ etoc-keep-orig-i-nal-table-of-con-tents \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 +\newcount\tikznumberofcurrentgrandchild +\newcount\tikzdeltaofcurrentgrandchild +%\newcount\tikzoffset +% copié de http://tex.stackexchange.com/a/232914 +% THIS WAS NOT USED FOR 1.08a--1.09e RELEASES AND IS NOW AGAIN USED AT 1.09f, +% BUT IS MANUALLY ADJUSTED TO HANDLE ESPECIALLY THE "Surprising" +% (now rather "Examples") AND "Tip" PARTS +% AND FALL-BACK FOR THEM TO CIRCULAR GROWTH FUNCTION +% hence stuff is hard-coded and interacts with other hard-coded things +% further down; in particular with the configuration of depth tags, +% here all sections are included (except the first two, "Foreword" and "License", +% which are not in any part). +% But etoc documentation is not likely to receive new sections soon. +\def\tikzmycustomgrowth {% + \pgftransformreset + \ifnum\tikztreelevel=1 + \pgftransformrotate{-65.4545+((\pgfkeysvalueof{/tikz/sibling angle})*(1+\tikznumberofcurrentchild)}% + \pgftransformxshift{\the\tikzleveldistance}% + \fi + \ifnum\tikztreelevel=2 + % hard-coded section numbers for branching + \if1\ifnum\tikznumberofcurrentgrandchild>2 + \ifnum\tikznumberofcurrentgrandchild<6 0% + \else + \ifnum\tikznumberofcurrentgrandchild>21 + \ifnum\tikznumberofcurrentgrandchild<28 0% + \else + \ifnum\tikznumberofcurrentgrandchild>51 + \ifnum\tikznumberofcurrentgrandchild<58 0% + \fi\fi\fi\fi\fi\fi + 1% +% le "9+" choisi manuellement jusqu'à obtenir quelque chose de bien + \pgfmathsetmacro\tikzoffsetofcurrentchild{(\tikzsiblingdistance)*(7+\tikznumberofcurrentgrandchild + +\tikzdeltaofcurrentgrandchild)}% + \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight + \pgftransformxshift{\tikzlevelwidth/2} + \pgftransformyshift{-\tikzlevelheight/2+\tikzoffsetofcurrentchild} + \else + \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelheight}% + \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelwidth + \pgftransformxshift{\tikzlevelwidth/2-\tikzoffsetofcurrentchild} + \pgftransformyshift{\tikzlevelheight/2} + \else + \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelwidth}% + \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight + \pgftransformxshift{-\tikzlevelwidth/2} + \pgftransformyshift{\tikzlevelheight/2-\tikzoffsetofcurrentchild} + \else + \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelheight}% + \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelwidth + + \pgftransformxshift{-\tikzlevelwidth/2+\tikzoffsetofcurrentchild} + \pgftransformyshift{-\tikzlevelheight/2} + \else + \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelwidth}% + %\ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight + \pgftransformxshift{\tikzlevelwidth/2} + \pgftransformyshift{-\tikzlevelheight/2+\tikzoffsetofcurrentchild} + %\fi + \fi\fi\fi\fi + \else + % NEW BRANCH ADDED AT 1.09f + \ifnum\tikznumberofcurrentgrandchild<6 + \tikzset{level distance=8cm}% TikZ est tout de même assez génial dans l'interface + \fi + \pgftransformrotate {\ifnum\tikznumberofcurrentgrandchild<6 -12 + \else\ifnum\tikznumberofcurrentgrandchild<28 180 + \else0\fi\fi + + \pgfkeysvalueof{/tikz/sibling angle}*\tikznumberofcurrentgrandchild}% + \pgftransformxshift {\the\tikzleveldistance}% + \ifnum\tikznumberofcurrentgrandchild=5 + \global\advance\tikzdeltaofcurrentgrandchild by-3 + \fi + \ifnum\tikznumberofcurrentgrandchild=27 + \global\advance\tikzdeltaofcurrentgrandchild by-6 + \fi + \ifnum\tikznumberofcurrentgrandchild=57 + \global\advance\tikzdeltaofcurrentgrandchild by-6 + \fi + \fi + \global\advance\tikznumberofcurrentgrandchild by1 + \fi +} + +%version circulaire utilisée avec les version 1.08a--1.09e du manuel. +% \def\tikzmycustomgrowth {% +% \pgftransformreset +% \ifnum\tikztreelevel=1 +% \pgftransformrotate {126+(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild-1)}% +% \fi +% \ifnum\tikztreelevel=2 +% \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(2+\tikznumberofcurrentgrandchild)}% +% \global\advance\tikznumberofcurrentgrandchild by 1 +% \fi +% \pgftransformxshift {\the\tikzleveldistance}% +% } + +\newcounter{partco} +% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3 +\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax} + +% For etoc.toctree file was used to test the Mind map separately +%\newwrite\TOCasTree + +\newbox\TitlePageMindmapTOC + + \etocsetstyle{part} {\etocskipfirstprefix} {\ifcase\pseudomodthree{\value{partco}}% - \or \appendpart\treetok\parttok {teal!60}% first + \or \appendpart\treetok\parttok {teal!30}% first (60 avant 1.09f) \or \appendpart\treetok\parttok {yellow!80}% second - \else\appendpart\treetok\parttok {green!50}% third and next ... + \else\appendpart\treetok\parttok {green!50}% third \fi } {\stepcounter{partco}% \edef\treenode{node - {\unexpanded\expandafter{\etocthelinkednumber}. - \unexpanded\expandafter{\etocthelinkedname}}}% + {\noexpand\textbf{\etocifnumbered{\unexpanded\expandafter{\etocthelinkednumber}.}{} + \unexpanded\expandafter{\etocthelinkedname}}}}% +%**** Cette remarque est obsolète depuis 1.09f et la partie pour le foreword % 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 ... + {% 1.09f prepends... + \ifcase\pseudomodthree{\value{partco}}% + \or \prependpart\treetok\parttok {teal!30}% first (60 avant 1.09f) + \or \prependpart\treetok\parttok {yellow!80}% second + \else\prependpart\treetok\parttok {green!50}% third \fi } @@ -1122,36 +1216,47 @@ etoc-keep-orig-i-nal-table-of-con-tents {} {} {% define the section node - \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} - \unexpanded\expandafter{\etocthelinkedname}}}}% - %\ifnum\value{partco}<9 % pour 1.08h + \edef\childnode{child {node + {\noexpand\itshape\noexpand\bfseries + \unexpanded\expandafter{\etocthelinkedname}\hfil\break + p. \unexpanded\expandafter{\etocthelinkedpage}}} + }% \appendtotok\parttok\childnode - %\fi } {} \etocsetnexttocdepth{section} +% title page toc +% 1.09f uses a prepend for last part so we need to delay +% start of tree construction in \treetok +\treetok{} +\makeatletter \etocsettocstyle {\setcounter{partco}{0}% - \treetok{\node [root concept]{\normalfont{The \etoc package}\par {\normalsize\textsc + } + {% + \toks@{\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{ ;}} + {\normalsize Package version:\par \etocpkgversion{} (\etocpkgdate )\par}}% + }% + \global\treetok\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toks@\the\treetok;}% + } -\etocsettagdepth {preamble}{part} -\etocsettagdepth {overview}{part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {examples}{part} -\etocsettagdepth {surprising}{part} -\etocsettagdepth {linestyles}{part} -\etocsettagdepth {globalcmds}{part} -\etocsettagdepth {custom}{part} -\etocsettagdepth {tips}{part}% pour faire de la place pour 1.09 -\etocsettagdepth {etocandworld}{part} +% depth tags for title page toc +\etocsettagdepth {preamble}{section} +\etocsettagdepth {overview}{section} +\etocsettagdepth {arbitrarily}{section} +\etocsettagdepth {examples}{section} +\etocsettagdepth {surprising}{section} +\etocsettagdepth {linestyles}{section} +\etocsettagdepth {globalcmds}{section} +\etocsettagdepth {custom}{section} +\etocsettagdepth {tips}{section} +\etocsettagdepth {etocandworld}{section} \etocsettagdepth {code}{all} +% fill in the \treetok \etocinline\tableofcontents\label{toc:mindmaptitlepage} % \immediate\openout\TOCasTree=\jobname.toctree @@ -1159,48 +1264,59 @@ etoc-keep-orig-i-nal-table-of-con-tents \tikzset {branch color/.style={concept color=#1!white, - every child/.append style={concept color=#1!white!30!white}}, + every child/.append style={concept color=#1!white!30!white, + opacity=0.3, text opacity=1}, + }, % ajout pour version de 1.08g - level width/.store in=\tikzlevelwidth, - level height/.store in=\tikzlevelheight + level width/.store in=\tikzlevelwidth, + level height/.store in=\tikzlevelheight }% \global \setbox\TitlePageMindmapTOC\hbox {% -%\begingroup \resizebox{\dimexpr\paperwidth-1cm\relax}!{% \begin{tikzpicture}[mindmap, text width=2cm, align = flush center, % pour 1.09 je reviens à version circulaire simplifiée +% pour 1.09f je reviens à version rectangulaire 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/10},% passage de 9 à 10 pour 1.08h, je pourrais aussi le calculer -% level 1 concept/.append style={font=\Large, text width = -% 3cm}, -% ancienne version circulaire -% level 2/.append style={level distance=12.5cm, sibling angle=360/39},% + % root concept/.append style={font=\huge, text width = 6cm}, + root concept/.append style={font=\Large, text width = 5cm}, + % level 1/.append style={level distance=7cm, sibling + level 1/.append style={level distance=6cm, + sibling angle=360/11},% une partie de plus + % level 1 concept/.append style={font=\Large, text width = 3cm}, + % ancienne version circulaire + % level 2/.append style={level distance=12.5cm, sibling angle=360/39},% % % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment) % 39 hard coded mais je pourrais aussi le calculer -% pour version rectangulaire, par tâtonnements: - % level 2/.append style={level width=21cm, - % level height=30cm, - % sibling distance=1cm},% - level 2/.append style={level distance=10cm, sibling angle=30},% +% + % pour version rectangulaire, par tâtonnements: + % réactivée pour 1.09f (étonnamment, juste quelques petits ajustements, mais ça + % a tout de même pris pas mal de temps...) + level 2/.append style={level width=21cm, + level height=30cm, + sibling distance=2.21cm,% ajusté à la + % main... dépend de ce qui qu'on conserve par + % les depth tags... + % 1.09f pour essayer certaines parties en circulaire + level distance=10cm,% DISTANCE DEPUIS LE CENTRE ! + sibling angle=12,% ajusté manuellement + }, level 2 concept/.append style={text width=2cm}, ] \the\treetok \end{tikzpicture}% }% -%\endgroup -} -\endgroup +}% end of \hbox +\endgroup% fin de la défintion de la mind map pour la page de titre \noindent\null +% On l'envoie au shipout \AddToShipoutPictureFG*{\put(.5\paperwidth,.5\paperheight) {\makebox(0,0){\box\TitlePageMindmapTOC}}} @@ -1251,6 +1367,11 @@ etoc-keep-orig-i-nal-table-of-con-tents % ATTENTION Vendredi 09 septembre 2016 à 21:46:51 \clearpage +% refactoring 2022/08/30 via ajout de ce \part* et déplacement de l'abstract +% pour avoir une TOC mindmap plus complète +\part*{\etoc} +\addcontentsline{toc}{part}{\etoc} + \phantomsection\addcontentsline{toc}{section}{\abstractname} \begin{abstract} @@ -1332,11 +1453,6 @@ manner: they are made available via the \csb{etocname}, |article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| and |memoir| classes. -% Starting with release |1.07k| it is possible to -% use \etoc concurrently with package |tocloft|. - -\clearpage - \section{License} \begingroup\ttfamily\small\hyphenchar\font -1 @@ -1344,6 +1460,7 @@ manner: they are made available via the \csb{etocname}, \obeyspaces\obeylines % \etocLicense\endgroup + \clearpage \etocsettocdepth {subsection} @@ -1418,7 +1535,7 @@ devoted to this, and some more is to be found in \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 +in the same document, \emph{using only one} |.toc| \emph{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 @@ -1442,7 +1559,7 @@ 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). +this way inside a group (\LaTeX's environments create scope limiting groups). Therefore the built-in ``line styles'' proposed by \etoc as an example (and which are illustrated\footnote{with a twist, subsections having @@ -1463,14 +1580,14 @@ 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}. +\csb{etocsettocstyle} (or some higher-level commands) and the +former by the command \csb{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 +The command to inform \etoc of what to do with \csb{etocname}, \csb{etocnumber}, +and \csb{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 @@ -1520,7 +1637,7 @@ This is activated by:\\ |% `toc display' as without \usepackage{etoc}| -If the command \csa{etocsetstyle} has \emph{not been used in the +If the command \csb{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 @@ -1528,13 +1645,13 @@ preamble} the package will be at |\begin{document}| in this |report|, |scrartcl|, |scrbook|, |scrreprt| and |memoir| classes. - Any use of \csa{etocsetstyle} in the \emph{preamble or body} of + Any use of \csb{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 + with the help of \csb{etocsetstyle}, if their scope was not limited to a group or environment. The command \csb{etocdefaultlines} resets the line styles as @@ -1740,9 +1857,47 @@ breaks. Also, they do not worry about potential multi-column use. \section{Linked list of the main package commands} -\begingroup\raggedcolumns -\advance\linewidth18pt -\begin{multicols}{3}\parindent0pt\relax + +% 2022/08/29 +% bataille avec multicols et LaTeX (j'ai essayé quote +% avec un \leftmargin négatif mais n'a pas donné résultat +% espéré) + +% mais comme il se trouve qu'il y a la place on va passer en deux, pas +% trois colonnes, donc je laisse tomber le parshape! + +% 2022/08/30 +% Je sépare les macros les plus essentielles pour les mettre en avant + +\begin{framed}\multicolsep0pt\relax + \begin{multicols}{3}\parindent0pt\relax +\flushleft + \csb{tableofcontents}\par + (optional \csa{ref} or \csa{label})\par + \csb{localtableofcontents}\par\columnbreak + \csb{etocsettocstyle}\par + \mbox{}\par + \csb{etocsetnexttocdepth}\par\columnbreak +\flushright + \makebox[\widthof{\csa{etocnumber}}][l]{\csb{etocname}}\par +% \llap does not trigger horizontal mode? + \noindent + \llap{\csb{etocsetstyle} +% \smash is not \long! + \smash{$\left\{\parbox{0pt}{\mbox{}\endgraf + %\mbox{}\endgraf + \mbox{}\endgraf + \mbox{}\endgraf + \mbox{}\endgraf}\right.$} + }% + \csb{etocnumber}\par + \makebox[\widthof{\csa{etocnumber}}][l]{\csb{etocpage}}\par + \end{multicols} +\end{framed} + +%\parshape 1 -1.5cm \dimexpr\linewidth+3cm\relax +%\begin{minipage}{\dimexpr\linewidth+3cm\relax} +\begin{multicols}{2}\parindent0pt\relax \csb{etocaftercontentshook}\par \csb{etocaftertitlehook}\par \csb{etocaftertochook}\par @@ -1756,6 +1911,10 @@ breaks. Also, they do not worry about potential multi-column use. \csb{etocifnumbered}\par \csb{etocignoredepthtags}\par \csb{etocignoretoctocdepth}\par + \csb{etocimmediatedepthtag.toc}\par + \csb{etocimmediatesettocdepth.toc}\par + \csb{etocimmediatetoccontentsline}\par + \csb{etocimmediatesetlocaltop.toc}\par \csb{etocinline}\par \csb{etoclink}\par \csb{etoclocalframed}\par @@ -1766,17 +1925,19 @@ breaks. Also, they do not worry about potential multi-column use. \csb{etocmulticol}\par \csb{etocname}\par \csb{etocnumber}\par - \csb{etocobeydepthtags}\par + \csb{etocobeydepthtags}\par\columnbreak +\flushright \csb{etocobeytoctocdepth}\par \csb{etocpage}\par \csb{etocruledstyle}\par \csb{etocruled}\par \csb{etocsetlevel}\par + \csb{etocsetlocaltop.toc}\par \csb{etocsetnexttocdepth}\par \csb{etocsetstyle}\par \csb{etocsettagdepth}\par - \csb{etocsettocdepth.toc}\par \csb{etocsettocdepth}\par + \csb{etocsettocdepth.toc}\par \csb{etocsettocstyle}\par \csb{etocskipfirstprefix}\par \csb{etocstandarddisplaystyle}\par @@ -1791,12 +1952,15 @@ breaks. Also, they do not worry about potential multi-column use. \csb{etoctoccontentsline}\par \csb{etoctoclines}\par \csb{localtableofcontents}\par - \csb{localtableofcontentswithrelativedepth}\par + \mbox{}\llap{\csb{localtableofcontentswithrelativedepth}}\par \csb{tableofcontents}\par %\vspace{5\baselineskip}\hrule height 0pt \end{multicols} -\endgroup +%\end{minipage}\par +The above is not an exhaustive list of all the package user commands, although +for legacy arbitrary reasons some of the more obscure commands are included +here. \clearpage % 15 octobre, je teste les tags @@ -1888,11 +2052,20 @@ example the table of contents of \end{filecontentsdef} \filecontentsexec\foo -We used this: -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} -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}|. +We used this: \filecontentsprint\foo +\attachfile{etocsnippet-\the\value{section}.tex} In the above example, not +only did we use |\ref{toc:c}| to print here the distant (local) table of +contents which has been labeled |toc:c| but we added a (possibly confusing) +|\label{toc:d}|. This is done for the down-to-earth reason of being able +to use, as we did in the previous paragraph, |\vpageref{toc:d}|. +But if one wants to clone +again the original local table of contents, one must reference its original +label: \toc|\ref{toc:c}|.% +% +\footnote{Why does this author always give +complicated examples rather than down-to-earth ones?} +% +This original local table of contents is to be found \vpageref{toc:c}. \section{A powerful functionality of \etoc: the re-assignment of levels with \csbhyp{etocsetlevel}} @@ -1948,8 +2121,7 @@ table of contents of all the paragraphs from the document! 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} +\section{The \csbhyp{etocsettocdepth} and \csbhyp{etocsetnexttocdepth} commands} \label{etocsettocdepth} \label{etocsetnexttocdepth} @@ -2025,8 +2197,11 @@ 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}} +\section[The command \csbhyp{etocsettocdepth.toc}]{The command + \csbhyp{etocsettocdepth.toc} and + \csbhyp{etocimmediatesettocdepth.toc}} \label{etocsettocdepth.toc} +\label{etocimmediatesettocdepth.toc} This command \csb{etocsettocdepth.toc} implements some functionality of |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. I thank Denis \textsc{Bitouzé} for drawing @@ -2057,58 +2232,67 @@ tables of contents of the sub-sub-sections of a given chapter. This {\fbox{gets executed in ALL tables of contents.}} +Also \csb{etocimmediatesettocdepth.toc} is provided. For explanations, +refer to the discussion of \csb{etocimmediatedepthtag.toc} in the +next section. + \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 +\csb{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}} +\section[The commands \csbhyp{etocdepthtag.toc} and \csbhyp{etocsettagdepth}]{The commands + \csbhyp{etocdepthtag.toc}, \csbhyp{etocimmediatedepthtag.toc} and + \csbhyp{etocsettagdepth}} \label{etocdepthtag.toc} +\label{etocimmediatedepthtag.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*} +% 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 +% \csb{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). +allows to control dynamically the which contents end up included in the +displayed TOCs (this documentation also decribed formerly a way +using \csb{etocsettocdepth.toc} with some dummy level name, which got +then set via \csb{etocsetlevel} according to what was locally needed, +but it was too hacky and I am not sure if it was understandable). + +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 (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 @@ -2119,6 +2303,60 @@ redefined or seeing their scope expire via the closing of a group or of a surrounding environment. For an example, see \autoref{ssec:tocwithdepthtags}. +When using \csb{etocdepthtag.toc} in combination with \LaTeX's |\include|, +data may not end up in the |.toc| file in the correct order. For example in +this situation: +\begin{verbatim} + \clearpage % or anything ending up causing its presence here right before + % the \etocdepthtag.toc + \etocdepthtag.toc{sometag} + \include{some file starting with sections} +\end{verbatim} +The tag will end up in the |.toc| file \emph{after} all section headings from +the included file. The cause is that \LaTeX\ inserts immediately in the +main auxiliary file a command to input the auxiliary file of the included file +(which in turn, contains instructions to add data to the |.toc| file). But +\csb{etocdepthtag.toc} does not internally use such immediateness, as it uses +the same interface as |\section| and alike commands when they want to write +extra data to the |.toc| file. + +So% +% +\footnote{Thanks to Norman \textsc{Ramsey} who reported this problem, together + with a fix, in July\dots 2016. Sorry for long delay before updating + \etoc six years later\dots} +% +|1.09f| adds \csb{etocimmediatedepthtag.toc} which will force the tag to be written +immediately to the |.toc| file (well, rather immediately to the |.aux| file, +so before the inclusion of the auxiliary file of the included file). + +One should not use this variant systematically. For example if your document +looks like: +\begin{verbatim} +\clearpage + +\section{bbbb} + +Some text + +\etocdepthtag.toc{sometag} +\etocimmediatedepthtag.toc{someimmediatetag} +\section{cccc} + +Some text + +\end{document} +\end{verbatim} +then the |someimmediatetag| will end up being inserted in |.toc| file +\emph{before} the |bbbb| section. This is because \LaTeX's |\section| +uses a \emph{delayed} write, not an \emph{immediate} one. And +\csb{etocdepthtag.toc} wisely uses a \emph{delayed} write. + +As it seems very hard programmatically to identify automatically if the +\emph{immediate} variant of \csb{etocdepthtag.toc} should be used, the package +provides two separate commands and it is up to user to make the correct +choice. + \subsection{The commands \csbhyp{etocobeydepthtags} and \csbhyp{etocignoredepthtags}} \label{etocobeydepthtags} @@ -2144,12 +2382,12 @@ problems in certain contexts such as TOC as tables (\autoref{sec:tocastable}, \a with |enumitem| \emph{inline} variants of its standard environments, because the command |\item| then closes a group (see \autoref{etocthelink}). -After \csa{etocglobaldefs}, \etoc will make its definitions of \csb{etocname} +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 \csa{etoclocaldefs}. Note that both -\csa{etocglobaldefs} and \csa{etoclocaldefs} actions are local to the +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. @@ -2164,7 +2402,7 @@ local tables of contents are empty and in case of emptiness to print nothing at all.\footnote{Thanks to Paul Gaborit who asked for such a feature.} This can be useful to authors of \LaTeX{} classes who for example wish to have a -|\chapter| command doing systematically a \csa{localtableofcontents}, or for +|\chapter| command doing systematically a \localtoc, or for people producing files via automatic conversions and some of those might have sectioning commands and others not. @@ -2176,12 +2414,12 @@ the |.toc| file. See \autoref{sec:addingtotoc} in this context. \begin{enumerate} \item the \csb{etocifwasempty} command discussed below can be used from inside \csb{etocaftertochook}, and even from inside \csb{etocbeforetitlehook}. -\item there is also \csa{etocdoesnotcheckemptiness} (since |1.08i|.) +\item there is also \csb{etocdoesnotcheckemptiness} (since |1.08i|.) \end{enumerate} The suppression of the heading (more precisely of the toc display style elements) may be effective only for the final \LaTeX{} runs. For example in -the situation of a \csa{tableofcontents}|\ref{foo}| where the label |foo| is +the situation of a \toc|\ref{foo}| where the label |foo| is not yet recognized, the heading (but not the contents) is printed and the TOC is declared non-empty. Or, if one adds a \localtoc to a document, on the next run, the test for emptiness will in fact apply to the next one, and the last @@ -2394,17 +2632,17 @@ beginning of \autoref{part:globalcmds}. \section{Another compatibility mode}\label{sec:anothercompat} As explained in \autoref{subs:compat}, the commands -\csa{etocstandardlines} and \csa{etocstandarddisplaystyle} tell \etoc to, +\csb{etocstandardlines} and \csb{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. +possible, or the user has specified the layout in \csb{etocsetstyle} commands +(and \csb{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 +\csb{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] @@ -2465,10 +2703,10 @@ be used directly in the line styles, because their meanings are not modified anymore by \etoc during its TOC typesetting.} 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} +\csb{etocnumber} with \csb{etocthenumber} will give a TOC where the numbers are +not links anymore, but the names still are. Or one may decide to use \csb{etocthename} and keep an hyperlinked number with -\csa{etocnumber}. +\csb{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 @@ -2520,7 +2758,7 @@ close to but not completely identical with the design implemented by the standard classes, such as |book|. I can recommend package |tocloft| for this, as it is compatible with \etoc (see \autoref{subs:tocloft}) and thus \etoc will obey the |tocloft| customizations (as long as no use has been made of -\csa{etocsetstyle}). It is also possible to modify only the style for, say, +\csb{etocsetstyle}). It is also possible to modify only the style for, say, sections and leave the parts, chapters, subsections as in the document class, via the technique from \autoref{sec:anothercompat}. @@ -2658,7 +2896,7 @@ The whole thing was encapsulated in \csa{TOCglobalstyle}, because we also want a \csa{TOClocalstyle} for local tables of contents which typically will want to use |\section*| rather than |\chapter*| and not insert page marks in the headers. The \csa{TOClocalstyle} is to be issued once, after the main document -TOC, or rather before using \csa{localtableofcontents}. If one wants a full +TOC, or rather before using \localtoc. If one wants a full TOC at end of document one will naturally have to issue again \csa{TOCglobalstyle} there. @@ -2796,7 +3034,7 @@ line styles and some colors added (it has been put in a float which appears \section{Another 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 +the \csb{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}. @@ -2813,7 +3051,7 @@ slightly revised to use more \LaTeX-commands and less \TeX-primitives. Similar code is used also for \hyperref[toc:clone]{this other toc}. % archivage de commentaires -% v1.07l on the occasion of traduction into German documentation: +% 1.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. @@ -3013,10 +3251,10 @@ it here we just wrote:\par\smallskip 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 + from inside \csb{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 + \csb{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 @@ -3041,7 +3279,7 @@ it here we just wrote:\par\smallskip 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 + \csb{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 @@ -3092,8 +3330,11 @@ The \autoref{subsec:interverting} gives another use of the shuffling of levels. -\section{Arbitrary ``Lists Of...'', \csbhyp{etoctoccontentsline}} +\section[Arbitrary ``Lists Of...'', \csbhyp{etoctoccontentsline}]{% + Arbitrary ``Lists Of...'', \csbhyp{etoctoccontentsline} and + \csbhyp{etocimmediatetoccontentsline}} \label{etoctoccontentsline} +\label{etocimmediatetoccontentsline} This idea of interverting the levels is very powerful and allows to let \etoc display lists of arbitrary things contained in the @@ -3110,15 +3351,15 @@ of all these exercises. For this we put in the preamble: \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} +In this way, \csb{etocname} will give the exercise number (but \csb{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 +the exercise number would then have been available via \csb{etocnumber}, and +\csb{etocname} would have been empty. It doesn't matter which one of the two +methods is used. The \etoc command \csb{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 @@ -3157,12 +3398,16 @@ typeset with the following code: \end{filecontentshere} \attachfile{etocsnippet-\the\value{section}.tex} +A related command \csb{etocimmediatetoccontentsline} (and its starred version) +is also provided. For discussion and the meaning of ``immediate'', refer to +the analogous case of \csb{etocimmediatedepthtag.toc}. + \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 +use the \etoc modified command \toc 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 @@ -3170,7 +3415,7 @@ 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} +Putting the \csb{etocnumber} and \csb{etocname} commands in \csa{treetok} would be of no use: to which number or name would they then refer to, in a delayed execution? @@ -3179,8 +3424,8 @@ 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} +commands \csb{etocname}, etc\dots, are robust, it is easier to work with +\csb{etocthelinkednumber}, \csb{etocthelinkedname}, and \csb{etocthelinkedpage} which contain the same information in an easier accessible form. For this |forest| tree we have designed very special \etoc styles for sections @@ -3635,23 +3880,47 @@ conditions and a few caveats: is (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. +Here is an example of a TOC as a |longtable| (yes this is only \emph{one} table), +as is possible relatively simply now with |1.08|. The code follows. \begin{filecontentsdef}{etocsnippet-\the\value{section}-A.tex}{\foo} \begingroup \etocglobaldefs % necessary for \etocname etc... to survive & +\makeatletter +% hack into longtable \hline to avoid annoying (here) stray lines at top +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \global\let\@gtempb\@firstofone %%% ADDED + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \global\let\@gtempb\@gobble %%% ADDED + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \@gtempb{% %%% ADDED + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + }% %%% ADDED + \@gtempa} +\makeatother % observe the locations of the \\ \etocsetstyle{part} {} - {\\\hline} - {\strut\etocnumber &\bfseries\etocname&\etocpage } + {} + {\\\hline\multicolumn{3}{c}{\bfseries\vrule height6ex depth3ex width0pt + \etocifnumbered{\etocnumber. }{}\etocname}} {} \etocsetstyle{section} {} - {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}} + {\etociffirst{\\\hline}{\\}} {\etocnumber&\etocname &\etocpage } {} @@ -3709,18 +3978,18 @@ sections which are used to insert the missing |\hline| (this is done with the help of the \csb{etociffirst} conditional). -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. +% obsolète avec la nouvelle \part* "\etoc" avant l'abstract (1.09f) +% 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 +Last technical note: because we put the |\\\hline| 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}. +For the hardliner's old way see \autoref{ssec:tocastableold}. Here is also a much simpler example. It is a local table of contents. @@ -3966,18 +4235,22 @@ levels of the standard document classes: from \emph{part} (or 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 +level toc entry. In the meantime 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, +\csb{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}.) +links are kept in the commands \csb{etocname}, \csb{etocnumber} and +\csb{etocpage} (this last one will have a link only if |hyperref| was passed +option \emph{linktoc=all}.)% +% +\footnote{In case of \emph{linktoc=page}, only \csb{etocpage} is an hyperlink; +see the discussion of \csb{etoclink} on how to create (possibly also with the +\emph{name} or \emph{number}) hyperlinks with the same target.} \section{The \csbhyp{etocskipfirstprefix} and \csbhyp{etociffirst} commands} \label{etocskipfirstprefix} @@ -4016,8 +4289,8 @@ syntax {\ttfamily label=\char32} from the package |enumitem|: {\etocname{} (page \etocpage)} {\end{enumerate}} \end{verbatim} -Rather than just \csa{etocnumber} we then used something like -|\fbox{\etocnumber}|. Note that \csa{etocnumber} is a robust +Rather than just \csb{etocnumber} we then used something like +|\fbox{\etocnumber}|. Note that \csb{etocnumber} is a robust command which explains why it can be used inside the label specification without needing an added |\protect|. @@ -4083,21 +4356,26 @@ preceded by |\protect|. \section{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. Since |etoc 1.08j| it contains the link +The command \csb{etoclink}\marg{text} can be used in the line style +specifications in a manner analogous to \csb{etocname}, \csb{etocnumber} and +\csb{etocpage}. It creates a link (if such a link was added by |hyperref| to +the |.toc| file entry) whose target is the corresponding document unit and +whose name is the given \meta{text} mandatory argument. + +Hence |\etoclink{\etocthename}| is under default conditions of |hyperref| like +the original |\etocname|, because the latter is already hyperlinked. Under +\emph{linktoc=page} context |\etoclink{\etocthename}| adds the hyperlink which +is missing from \csb{etocname}. Similarly under the default |hyperref| +condition (\emph{linktoc=section}) \csb{etocpage} is not an hyperlink, but one +can use |\etoclink{\etocthepage}|. + +If \csa{hypersetup} is used with \emph{linktoc=none} then no miracle happens, +\csb{etoclink} does nothing special and none of \csb{etocname}, +\csb{etocnumber} and \csb{etocpage} are links. + + + +The command \csb{etoclink} is robust. Since |etoc 1.08j| it contains the link destination in an already expanded form, so for example can be used even after a |&| in a tabular construction, if \csb{etocglobaldefs} was issued. @@ -4113,13 +4391,16 @@ These macros are fragile and contain the link destination in already expanded form. So their meaning can be stored for delayed usage. For example this is done here when doing the \hyperref[tocastree]{examples with trees}. -Notice though that for example \csa{etocthelinkednumber} is really a link only -if |hyperref| was configured to let the numbered heading be linked (which is -the default). Similarly for the others. +Notice though that \csb{etocthelinkednumber} and \csb{etocthelinkedname} are +hyperlinks only if |hyperref| was configured to let the heading name be +linked (this is the default). So under |hyperref| option \emph{linktoc=page}, +both \csb{etocthelinkednumber} and \csb{etocthelinkedname} are no different +from respectively \csb{etocthenumber} and \csb{etocthename}. -\csa{etocthelink} will fetch the link destination if available from name or -page number and allows via |\etocthelink{foo}| to link an arbitrary text to -the same destination inside the produced PDF. +For this reason, a further macro is provided: \csb{etocthelink} will fetch +the link destination if available be it from the name or from the page number. +Then |\etocthelink{foo}| hyperlinks an arbitrary text to the target destination +inside the produced PDF. All these commands are fragile. The \csb{etocname}, \csb{etocnumber}, \csb{etocpage} and \csb{etoclink} are simply their robust variants. They too @@ -4161,7 +4442,7 @@ Obsolete example of \begingroup \etoc |1.08a| offers a simpler way to the same result: thanks to \csb{etocglobaldefs} there is no need -anymore here for \csa{etocthelinkedname}, as \csa{etocname} works. +anymore here for \csb{etocthelinkedname}, as \csb{etocname} works. \begin{verbatim} Example of \begingroup\etocglobaldefs % <-- NEW mit etoc 1.08. @@ -4207,7 +4488,7 @@ See \autoref{sec:anothercompat} for usage. 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: +command with \csb{etocsetlevel}. For example: \begin{verbatim} \etocsetlevel{cell}{0} \etocsetlevel{molecule}{1} @@ -4222,9 +4503,9 @@ 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 +\csb{etocsetstyle}|{molecule}{..}{..}{..}{..}| after +\csb{etocsetlevel}|{molecule}{1}| if +\csb{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 @@ -4240,7 +4521,7 @@ does: \etocsetlevel{paragraph}{4} \etocsetlevel{subparagraph}{5} \end{verbatim} -\etoc own custom styles are activated by \csa{etocdefaultlines}. They +\etoc own custom styles are activated by \csb{etocdefaultlines}. They are illustrated by the main table of contents of this document. @@ -4414,7 +4695,7 @@ nothing. No, one must do something like this: 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 +\csb{etocsettocstyle} as a lower-level routine, to start a \texttt{multi\-cols} environment in \marg{before\_toc} and close it in \marg{after\_toc}. @@ -4440,13 +4721,13 @@ configured: \leaders\hrule height1pt\hfill \MakeUppercase{Table of Contents}} \end{verbatim} -After \csa{etocmulticolstyle} all future \csa{tableofcontents} will use the +After \csb{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}} +\centerline{\csb{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} And there is also -\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}. +\csb{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}. \subsection{The command \csbhyp{etoctocstyle}} \label{etoctocstyle} @@ -4478,12 +4759,12 @@ which does not uppercase. \paragraph{really?} -\subsection{The commands \csbhyp{etocruledstyle}, \csbhyp{etocruled} and \csbhyp{etoclocal\-ruled}} +\subsection{The commands \csbhyp{etocruledstyle}, \csbhyp{etocruled} and \csbhyp{etoclocalruled}} \label{etocruledstyle} \label{etocruled} \label{etoclocalruled} -The general format of \csa{etocruledstyle} is:\\ +The general format of \csb{etocruledstyle} is:\\ \centerline{\csb{etocruledstyle}% \oarg{number of columns}\marg{title of the toc}} \noindent @@ -4510,7 +4791,7 @@ 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}} +\subsection{The commands \csbhyp{etocframedstyle}, \csbhyp{etocframed}, and \csbhyp{etoclocalframed}} \label{etocframedstyle} \label{etocframed} \label{etoclocalframed} @@ -4522,12 +4803,12 @@ 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 +|\begingroup...\endgroup|; there is also \csb{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 +argument to \csb{etocframedstyle} or \csb{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}). @@ -4558,13 +4839,13 @@ 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} + \csb{etocoldpar} (= working \csa{par} in the argument to + \csb{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 +value \csb{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 +\csb{etocmulticolstyle} (it is not allowed to insert an empty line in this argument). On the other hand the commands \csb{etocruledstyle} and @@ -4597,10 +4878,10 @@ class should be obeyed, too. \dots} These are the commands used internally by \etoc in compatibility mode -depending on the document class. For example \csa{etocarticlestyle} instructs +depending on the document class. For example \csb{etocarticlestyle} instructs \etoc to use |\section*{\contentsname}| (with marks on the page) and -\csa{etocbookstyle} says to use |\chapter*{\contentsname}|. It can prove -useful to issue \csa{etocarticlestyle} for a \csa{localtableofcontents} inside +\csb{etocbookstyle} says to use |\chapter*{\contentsname}|. It can prove +useful to issue \csb{etocarticlestyle} for a \csa{localtableofcontents} inside a chapter, in |book| class and compatibility mode for the global TOC display style. @@ -4627,7 +4908,7 @@ mode before typesetting the TOC title and contents. \label{etocaftercontentshook} \label{etocaftertochook} -The \toc, \localtoc, \csa{etocmulticol}, and all their cousins have starred +The \toc, \localtoc, \csb{etocmulticol}, and all their cousins have starred variants (the star must be before the other arguments). The non-starred variants execute the \csb{etocaftertitlehook}, whose default definition is to do nothing. The starred variants do not execute this hook. @@ -4649,7 +4930,7 @@ then automatically create suitable anchor and one should \emph{not} use explicitly \cs{phantomsection} here (it would let the anchor be located below not above the title). -With this set-up issuing \localtoc|*| will ignore the \csa{etocaftertitlehook} +With this set-up issuing \localtoc|*| will ignore the \csb{etocaftertitlehook} hence not send the local toc title to the |.toc| file. This mimicks the |memoir| class behavior, and can also be used with it. For more on |memoir| class with \etoc, see \autoref{ssec:memoir}. @@ -4690,51 +4971,51 @@ contents command was starred.% \subsection{Setting up local styles} \hbox{\color{green}\fboxrule1pt\fboxsep1em -\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname}}% +\setbox0\hbox{\csb{etocthename}, \csb{etocthenumber}, \csb{etocthepage}, \csb{etoclink}\marg{linkname}}% \framebox[\linewidth][c] {\vbox{\hsize\wd0\normalcolor\noindent -\csa{etocsetstyle}\marg{levelname}% +\csb{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} +\csb{etocname}, \csb{etocnumber}, \csb{etocpage}, +\csb{etocifnumbered}\marg{A}\marg{B}\\ +\csb{etocthename}, \csb{etocthenumber}, \csb{etocthepage}, \csb{etoclink}\marg{linkname} }}} \subsection{Setting up toc display styles} \medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em -\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{kind}% +\setbox0\hbox{\csb{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}% +\csb{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}\\ +\csb{etoctocstyle}\oarg{kind}\marg{number\_of\_columns}\marg{title}\\ +\csb{etoctocstylewithmarks}\oarg{kind}\marg{number\_of\_columns}% \marg{title}\marg{mark}\\ -\csa{etoctocstylewithmarksnouc}\oarg{kind}\marg{number\_of\_columns}% +\csb{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}}}} +\csb{etocruledstyle}\oarg{number\_of\_columns}\marg{title}\\ +\csb{etocframedstyle}\oarg{number\_of\_columns}\marg{title}\\ +\csb{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}}} \subsection{Displaying tables of contents} \medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em - \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, - \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \setbox0\hbox{\csb{etocname}, \csb{etocnumber}, + \csb{etocpage}, \csb{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}\\ + \csb{etocmulticol}\oarg{number\_of\_columns}\marg{heading}\\ + \csb{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}\\ + \csb{etocruled}\oarg{number\_of\_columns}\marg{title}\\ + \csb{etoclocalruled}\oarg{number\_of\_columns}\marg{title}\\ + \csb{etocframed}\oarg{number\_of\_columns}\marg{title}\\ + \csb{etoclocalframed}\oarg{number\_of\_columns}\marg{title}\\ \hbox{}{\itshape\ttfamily\ \ \ \ and their starred variants} }}} @@ -4745,8 +5026,8 @@ The commands (starred or not) to actually display the table of contents can be followed with optional labels or references:\par \medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em - \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, - \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \setbox0\hbox{\csb{etocname}, \csb{etocnumber}, + \csb{etocpage}, \csb{etocifnumbered}\marg{A}\marg{B}}% \framebox[\linewidth][c] {\vbox{\hsize\wd0\normalcolor\noindent \toc \csa{label}|\{toc:here\}|\\ @@ -4756,7 +5037,7 @@ can be followed with optional labels or references:\par \localtoc \csa{ref}|\{toc:far\}| \\ \localtoc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }% - \csa{etocmulticol}{\itshape\ttfamily\ etc . . . } + \csb{etocmulticol}{\itshape\ttfamily\ etc . . . } }}} @@ -4785,9 +5066,9 @@ 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 +Activating their use is done via \csb{etocdefaultlines}, or +\csb{etoctoclines} if the line styles have not been modified with +\csb{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; @@ -4813,9 +5094,9 @@ 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 +\csb{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 +medium series; we modify the \csb{etocfontone} command for that. Also we use dot leaders which are less spread out than in the package default. @@ -4881,7 +5162,7 @@ package. Customizing them goes through suitable \newcommand*\etoctoclineleaders {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} \newcommand*\etocabbrevpagename{p.~} % initial of "page" -\newcommand*\etocpartname{Part} % prior to v1.08b, was \partname +\newcommand*\etocpartname{Part} % prior to 1.08b, was \partname % but this didn't make sense e.g. with babel+frenchb whose \frenchpartname % takes into account the value of the part counter. \newcommand*\etocbookname{Book} % to be modified according to language @@ -4889,23 +5170,23 @@ package. Customizing them goes through suitable 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 +\csb{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 + \csb{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}, +The \csb{etocstandardlines} compatibility mode will work also with +sectioning commands made known to \etoc via \csb{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 +Using the command \csb{etocsetstyle}, be it in the preamble or in the body of the document, has the secondary effect of switching off the compatibility mode. @@ -4966,8 +5247,8 @@ 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 +the title argument to \csb{etocruledtoc} or +\csb{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 @@ -4983,7 +5264,7 @@ accepted here. \section{One more example of colored TOC layout} \label{ssec:tocclone} -The command \csa{etocframedstyle} puts the title on the top +The command \csb{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} @@ -5064,7 +5345,7 @@ the frame. \attachfile{etocsnippet-\the\value{section}.tex} \filecontentsexec\filecontentsheremacro -% v1.07l on the occasion of traduction into German documentation +% 1.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. @@ -5101,8 +5382,11 @@ use or not colors is left to the user. %\section{... and tricks} -\section{The \csbhyp{etocsetlocaltop.toc} command} +\section[The \csbhyp{etocsetlocaltop.toc} command] + {The \csbhyp{etocsetlocaltop.toc} and + \csbhyp{etocimmediatesetlocaltop.toc} commands} \label{etocsetlocaltop.toc} +\label{etocimmediatesetlocaltop.toc} It is important to understand that \csb{localtableofcontents} works entirely from data \emph{in the |.toc| file}. If the document, say with |article| @@ -5110,20 +5394,16 @@ class, contains starred sectioning commands, which are not accompanied by suitable \csa{addcontentsline}, then these units are completely transparent to \csb{localtableofcontents}: \begin{itemize} -\item If it is issued before |\section*{Foo}|, say locally to a |\section|, +\item If \localtoc is issued before |\section*{Foo}|, say locally to a |\section|, then the local TOC will include not only the |subsection|s between the - |\section| and the |\section*{Foo}| but also those following, and be stopped - uniquely by a later |\section| or |\part| from the document's body. + |\section| and the |\section*{Foo}| but also those following, and it will + stop only at encountering a later |\section| or |\part| from the document's body. \item If the command is issued right after |\section*{Foo}| and the later was itself subsequent to a (numbered) |\subsection|, then \etoc will think it - must display a TOC local to that \emph{subsection} level. + must display a TOC local to the \emph{subsection}. \end{itemize} -Before concluding that \etoc is buggy, imagine how the global TOC of the -document would look like in such circumstances: the \csb{localtableofcontents} -does exactly the job of extracting from that global TOC various local TOCs; it -works only from material in that (virtual) global TOC. -Since relase |1.08k|, \etoc provides the one-argument command +Since release |1.08k|, \etoc provides the one-argument command \csb{etocsetlocaltop.toc} to insert into the |.toc| file a kind of ``ghost'' of a given sectioning unit. Here is an example: @@ -5133,56 +5413,83 @@ of ``ghost'' of a given sectioning unit. Here is an example: \localtableofcontents \end{verbatim} -Then in this example, \csb{localtableofcontents} will be stopped -by the next |\part| (naturally a numbered one or a |\part*| followed by -suitable |\addcontentsline|) or also by a later |\etocsetlocaltop.toc{part}|. +So with no |\part| heading inserted into the table of contents via an +|\addcontentsline|, still \localtoc will know it is local to a part. In this +example the local contents will be delimited by the next numbered |\part|, or +|\part*| with |\addcontentsline|, or also by a later, second, +|\etocsetlocaltop.toc{part}|. -This is all fine but keep in mind again that \csb{localtableofcontents} can -only display units which have been pushed to the |.toc| file, so that |\part*| -must be followed by numbered sections or |\section*/\addcontentsline| pairs if -\csb{localtableofcontents} is to display anything useful. One can not use -\etoc to typeset data not actually there in the |.toc| file! +As a (counter)-example consider this document: +\begin{verbatim} +\documentclass{article} +\usepackage{etoc} +\begin{document} +\tableofcontents -Thus, in the situation above, one may wonder why the document does not use -|\addcontentsline| after the |\part*| as it must do so for sub-sectioning -units if they are to appear in the local TOC. +\part*{A} +\etocsetlocaltop.toc{part} +\localtableofcontents -One may imagine some document where all |Part|s are non-numbered but -nevertheless the user wants its \csb{localtableofcontents} for each one: then -indeed \csb{etocsetlocaltop.toc} will help in that case. +\section{I} -There are at least two more methods to handle this situation: -\begin{itemize} -\item the first one is simply to use the |\addcontentsline{toc}{part}{..}| - commands, and to set the |part| style to do nothing, so that the main TOC - will not display them, -\item the second one does not add the |\addcontentsline{toc}{part}{...}| but - uses ``depth tags'' (\autoref{ssec:tocwithdepthtags}) and multiple - \csb{tableofcontents} (not \csb{localtableofcontents}), one for each desired - local TOC. -\end{itemize} +\section{II} -There is a variant of the first method which would set the level of |part| -temporarily to |6| for the typesetting of the main TOC. But then the |chapter| -toc line style will execute inside the main TOC only once its \emph{start} and -\emph{finish} parts (see \autoref{sec:etocsetstyle}). This is actually also a -problem of the second method. +\part*{B} -But not of the first method which uses -\centeredline{\csb{etocsetstyle}|{part}{}{}{}{}|} nor of the approach with -\csb{etocsetlocaltop.toc}: the \emph{start} and \emph{finish} portions of the -|chapter| toc line style will get executed at the appropriate times in the -main, global, TOC. +\section{III} -Be aware however that this use of \csb{etocsetlocaltop.toc}|{part}| will also -cause the main global TOC to execute (once) the \emph{start} and \emph{finish} -portions of the |part| toc line style (assuming here again it is not typeset in -compatibility mode). +\part*{C} -Final remark: usage of \csb{etocsetlocaltop.toc} interferes with -\csb{etocchecksemptiness} only to the extent that it modifies (as explained in -this section) the selection made by \csb{localtableofcontents}, hence the -decision whether the local TOC is empty or not. +\section{IV} +\end{document} +\end{verbatim} +It uses only |\part*|. Thanks to the \csb{etocsetlocaltop.toc} the \localtoc +knows it should report only sections. But the other |\part*| are invisible to +it as nothing is recorded in the |.toc| file. So the local table of contents +in this example will list \emph{all} sections not only |I| and |II|. To fix thix one may +e.g.\@ insert another |\etocsetlocaltop.toc{part}|, this time after |\part*{B}| +(or make this a numbered part, or use |\addcontentsline| for it). + +The above document amended with added |\etocsetlocaltop.toc{part}| after each +unnumbered part will thus have its main TOC without any |Part| heading, but +each |\part| can show a correct \localtoc. The simpler +approach would be to use |\addcontentsline| with each unnumbered |\part| so +that it ends up in the |.toc| file, but \etoc is keen on allowing the most +diverse point of views. + +It should be stressed that the various |\etocsetlocaltop.toc|\marg{sect. unit} +do impact the global \toc: they really act like actual sectioning units, +except for not inducing any typesetting. In usual document classes, this +would appear to mean that they are completely transparent to the global \toc. +Not the case with \etoc, which adds a virtual assembly of levels: the |.toc| +data originating in |\etocsetlocaltop.toc|\marg{sect. unit} will trigger the +execution of the \marg{finish} parts of the line styles of finer sectioning +units encountered before (either in the global \toc or in an active +\localtoc); and it triggers the \marg{start} parts of the line styles of finer +units encountered after it (again in the global \toc, but also in any +\localtoc which is already activated at a coarser lever). + +Depending on how the toc line styles are configured this may translate into +some visual effect; for example with the \etoc own line styles the +\marg{start} and \marg{finish} mostly insert penalties or vertical spaces. + +It is a matter of debate if this is good design; a variant serving purely to +influence boundaries of local table of contents with no collateral effects +could be provided. And the name of the macro was perhaps not so well chosen +as it suggests it acts as would such an hypothetical variant. In absence of +feature requests we leave the matter standing for now.% +% +\footnote{This documentation was updated and this paragraph added for the + |1.09f| release.} + +Usage of \csb{etocsetlocaltop.toc} interacts with +\csb{etocchecksemptiness} in the expected way: it modifies (as explained +above) the selection made by \csb{localtableofcontents}, hence the decision +whether this local TOC will end up empty or not. + +There is also \csb{etocimmediatesetlocaltop.toc}. This may be useful in some +very special circumstances involving |\include|. For related discussion see +the documentation of \csb{etocimmediatedepthtag.toc}. \section{Hacking framed parboxes} @@ -5470,7 +5777,13 @@ 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 +coded in the old days.% +% +\footnote{At release |1.09f| the design of the TOC from + \autoref{sec:tocastable} was modified; the code here reproduces + the former looks.} +% +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, @@ -5579,7 +5892,7 @@ Also a |\else| immediately following \csa{tableofcontents} or style (and thus still within a group.) Prepending is less of a problem (and anyhow there is also - \csa{etocbeforetitlehook} available to the user). + \csb{etocbeforetitlehook} available to the user). Under certain circumstances \etoc imposes its views on \csa{tableofcontents} at the time of |\begin{document}|. You may thus have @@ -5587,8 +5900,8 @@ Also a |\else| immediately following \csa{tableofcontents} or non-recommendable) patches. Patching after |\begin{document}| is naturally possible but I feel almost a rebel to mention this to \LaTeX{} users! \end{framed} -\footnotetext{contrarily to \csa{etocaftertochook}, - \csa{etocaftercontentshook} is not executed if the |tocdepth| did not +\footnotetext{contrarily to \csb{etocaftertochook}, + \csb{etocaftercontentshook} is not executed if the |tocdepth| did not allow the printing of the TOC.} \etoc \textbf{requires} the |.toc| file to use the \csa{contentsline} @@ -5617,7 +5930,7 @@ should work. Please inform the author in case of issues: \etoc was from the start designed to be |100%| compatible with package |hyperref|. -The macros \csa{etocname}, \csa{etocnumber}, and \csa{etocpage} contain the +The macros \csb{etocname}, \csb{etocnumber}, and \csb{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 @@ -5681,58 +5994,51 @@ kinds of divisions. The |memoir| mechanism relative to \toc versus \toc|*| is obeyed automatically, and applies with \localtoc too. -A weird situation arises under 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) a chapter heading which is written to the -|.toc| (because \etoc by default obeys |memoir| class behaviour). 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. - -Actually, that \localtoc by default uses like \toc a chapter style is often -inconvenient. One can use the |memoir| macros to modify this: according to -|memoir| documentation, |\tocheadstart| and |\printtoctitle| seem to be the -most relevant. If you do that you will probably want the added line in |.toc| -file to use |{section}| not |{chapter}|. \etoc provides to this effect -\csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name} whose first argument +But, attention, this means that \localtoc should preferentially be used with +the |*|. Else the |memoir| mechanism will insert a specific line in the +|.toc| file, using by default the |chapter| sectioning level. But \etoc has +already written to the |.toc| file an instruction that the user wants a local +table of contents. As a result, the fake |chapter| will let \etoc consider +that the \localtoc has empty contents, except if it used in a |\part| or +|\book|. + +This may even cause successive document builds to never stabilize if +\csb{etocchecksemptiness} was issued in the preamble: as the local TOC is +empty, on next run the extra entry in |.toc| is absent, so the local TOC is +not empty and is typeset, but then |.toc| changes, so the rerunfilecheck +mechanism instructs to compile once more, and we end in a never stabilizing +conundrum. + +Thus we see that the fact that \localtoc by default use like the global \toc a +chapter style is inconvenient. One can use the |memoir| macros to modify this: +according to |memoir| documentation, |\tocheadstart| and |\printtoctitle| seem +to be the most relevant. If you do that you will probably want the added line +in |.toc| file to use |{section}| not |{chapter}|. \etoc provides to this +effect \csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name} whose first argument \meta{kind} is |chapter|, |section|, |subsection|, etc... and the second -argument stands for the title and thus \csa{contentsname} is appropriate. Hence +argument stands for the title and thus \csa{contentsname} is +appropriate. Hence \begin{verbatim} \etocmemoirtoctotocfmt{section}{\contentsname} \end{verbatim} seems the natural choice in this context as an addition to the customizing the |memoir| toc related macros to achieve a section like rendering (for more -details on the latter, please refer to |memoir| manual). +details on the latter, please refer to |memoir| manual). This is appropriate +for local TOCs in chapters. Adapt to finer sectioning levels. -A completely different approach, arguably simpler, is to overrule the \etoc -default under |memoir| (after the main document \toc which should still use a -chapter styling) via these simple -commands: +Another approach is to overrule the \etoc +default under |memoir| like this \begin{verbatim} \etocarticlestyle % means to use \section*{\contentsname} (and marks) \renewcommand{\etocaftertitlehook}{\addcontentsline{toc}{section}{\contentsname}} \end{verbatim} -exactly as one would do with |book| class for example. Don't use any -|\phantomsection| in there, |hyperref| hyperlinks will work just fine (and the -anchor will be slightly above toc title, not below). - -Notice that prior to \etoc |1.09b|, the \csb{etocaftertitlehook} macro was -used by \etoc itself under the |memoir| class. Hence \localtoc obeyed the -|memoir| mechanism relative to starred or not starred, even after issuing -\csa{etocarticlestyle}, as long as the user did not redefine -\csb{etocaftertitlehook}. Starting with |1.09b| (which syncs with a |memoir| -change at |v3.7i|) it is needed in a case like here where the user issues -\csa{etocarticlestyle} to also configure explicitly the -\csa{etocaftertitlehook} to achieve the ``insert title in |.toc|'' effect (if -so wished), because \etoc uses another mechanism and does not pre-empt usage -of this user macro anymore. - -To recover the \etoc default under |memoir| class one can issue -\csa{etocmemoirstyle} and then -\csa{etocmemoirtoctotocfmt}|{chapter}{\contentsname}| (but attention that a -custom \csb{etocaftertitlehook} will still be obeyed; for info: it will get -executed before the \cs{cfttocbeforelisthook}). +exactly as one would do with |book| class for example. This emulates the +default under memoir that table of contents write a line to the |.toc| file representing +themselves, except that |chapter| has been replaced by |section|. So we can +use \localtoc after a \csa{chapter}. But if you want one after a +\csa{section}, you should modify \csb{etocaftertitlehook} to assign +|subsection| level to the \localtoc own styling. + \subsection{Compatibility with package \texttt{tocvsec2}} @@ -5791,9 +6097,9 @@ contents will be displayed only on the next |latex| run. \section{Errors and catastrophes} - After using \csa{etocsetstyle} for one level, the remaining + After using \csb{etocsetstyle} for one level, the remaining uncustomized levels use the \etoc default styles (those - which are activated by \csa{etocdefaultlines}). One has to + which are activated by \csb{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''. @@ -5823,4775 +6129,13 @@ This is the documentation as of \texttt{\etocdocdate}, printed from the source file with the time stamp \texttt{\etocdtxtimestamp}. The package version is \texttt{\etocpkgversion}, of \texttt{\etocpkgdate}. -% STOP ENGLISH VERSION -^^Afi - -^^Acatcode92 12 - -^^Aifnum^^AForDeutsch=1 - - ^^Acatcode92 0 - - -% START GERMAN (DEUTSCH) VERSION - -% Note for translation (March 2015) -% One should use "= and not - : for example -% not \etocsetstyle-Befehl but rather \etocsetstyle"=Befehl. -% This is important for hyphenation. - -\bookmark[named=FirstPage,level=1]{Titelseite}% 10 octobre 2013. - -\begingroup - -\etocsetstyle{part} - {\etocskipfirstprefix} - {\ifcase\pseudomodthree{\value{partco}}% - \or \appendpart\treetok\parttok {teal!60}% first - \or \appendpart\treetok\parttok {yellow!80}% second - \else\appendpart\treetok\parttok {green!50}% third and next ... - \fi - } - {\stepcounter{partco}% - \edef\treenode{node - {\unexpanded\expandafter{\etocthelinkednumber}. - \unexpanded\expandafter{\etocthelinkedname}}}% -% grosse astuce: la première Partie ne sera pas embêtée par les trois sections -% avant car ce qu'elles auront mis dans \parttok va être effacé. - \parttok\expandafter{\treenode}} - {\ifcase\pseudomodthree{\value{partco}}% - \or \appendpart\treetok\parttok {teal!60}% first - \or \appendpart\treetok\parttok {yellow!80}% second - \else\appendpart\treetok\parttok {green!50}% third and next ... - \fi - } - -\etocsetstyle{section} - {} - {} - {% define the section node - \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber} - \unexpanded\expandafter{\etocthelinkedname}}}}% - %\ifnum\value{partco}<9 - \appendtotok\parttok\childnode - %\fi - } - {} - -\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 \etocpkgversion{} (\etocDEpkgdate )\par}}}} - {\global\appendtotok\treetok{ ;}} - -\etocsettagdepth {preamble}{part} -\etocsettagdepth {overview}{part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {examples}{part} -\etocsettagdepth {surprising}{part} -\etocsettagdepth {linestyles}{part} -\etocsettagdepth {globalcmds}{part} -\etocsettagdepth {custom}{part} -\etocsettagdepth {tips}{part} -\etocsettagdepth {etocandworld}{part} -\etocsettagdepth {code}{all} - -\etocinline\tableofcontents\label{toc:mindmaptitlepage} - -\tikzset {branch color/.style={concept color=#1!white, - every child/.append style={concept color=#1!white!30!white}}, -% ajout pour version de 1.08g - level width/.store in=\tikzlevelwidth, - level height/.store in=\tikzlevelheight - }% - -\global -\setbox\TitlePageMindmapTOC\hbox {% -%\begingroup -\resizebox{\dimexpr\paperwidth-1cm\relax}!{% -\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/10},% passage de 9 à 10 pour 1.08h, je pourrais aussi le calculer - level 2/.append style={level distance=10cm, sibling angle=30},% - level 2 concept/.append style={text width=2cm}, - ] -\the\treetok -\end{tikzpicture}% -}% -%\endgroup -} -\endgroup - -\noindent\null - -\AddToShipoutPictureFG*{\put(.5\paperwidth,.5\paperheight) - {\makebox(0,0){\box\TitlePageMindmapTOC}}} - -\clearpage - -\indent\null - -\etocdepthtag.toc {preamble} -%---- -% MAIN TOC -% -\etocsettocdepth {subsubsection} -\etoctoclines -\etocmarkboth\contentsname -\etocmulticolstyle[1] - {\noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Inhaltsverzeichnis}\let\thefootnote\empty - \footnote{Erzeugt von der Quelldatei mit Zeitstempel - ``\etocdtxtimestamp''.}\setcounter{footnote}{0}} - -\pdfbookmark[1]{Inhaltsverzeichnis}{MAINTOC}% - -\begin{otherlanguage}{english} -\begin{framed} - Übersetzt ins Deutsche von Felix Baral-Weber, Jenny Rothkrämer-Vogt, - Daniel Büttner, Claudia Dahl, Christian Otto und Christine Römer (FSU - Jena). Die letzte Aktualisierung der Übersetzung is vom - \texttt{\etocDEDEdocdate} (Paketversion \texttt{\etocDEDEpkgversion}). - Neuere Abschnitte bleiben auf English. Hinweise zur - Übersetzung an Christine\_Roemer at t-online dot de. - -\medskip - - Starting with |1.08h|, about 25 code samples (especially the longer - ones) are incorporated into the PDF file (thanks to \textsc{Scott - Pakin}'s \href{http://www.ctan.org/pkg/attachfile}{attachfile} - package) as \emph{file attachement annotations}. Each file is represented - by an icon after the verbatim rendering of the corresponding code. - Clicking suitably on the icon will open a dialog to open or save the - file contents. This is much better than copy-paste which loses - indentation. There is also in some viewer a \emph{Comment pane} which can - be opened on the right side of the main window and which provides a - convenient clickable list of all these \emph{attachments annotations}. - - PDF viewers unable to make these attachments accessible to the - user may replace the clickable icons by some blank space. -\end{framed} -\end{otherlanguage} - -\begingroup - \etocsetlevel{subsection}{3} - \etocsetlevel{subsubsection}{6} -\tableofcontents \label{toc:main} -\endgroup - -% Attention Vendredi 09 septembre 2016 à 21:49:17 -\clearpage - -\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.% -% -\footnote{Except if \texttt{\string\etockeeporiginaltableofcontents} - (\textcolor{Green}{\bfseries New with 1.09d}) is issued in the preamble - after package loading. Then the macro \texttt{\string\etoctableofcontents}, - not \texttt{\string\tableofcontents}, must be used if the \etoc features - are to apply to the global TOC. This was added to fix a compatiblity issue - with \texttt{listings}'s \texttt{\string\lstlistoflistings}, as it needs the - \texttt{\string\tableofcontents} macro to keep its original meaning.} -% - 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. - -\clearpage - -\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. - -\begin{otherlanguage}{english} - An even closer emulation of the |book| class design is now included in - this documentation as \autoref{sec:thirdexample}. -\end{otherlanguage} - -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}, die in \autoref{toc:allsubsections} und auch -die in \autoref{etocthelink}, \texttt{enumerate}- oder -\texttt{itemize}-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{subs: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. - -\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -\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{filecontentsdef} - -\filecontentsexec\foo - -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. - -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. - -Hier der Code: - -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} - -\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. - -\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -\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}% not needed explicitely, keeps value -%\etocsettagdepth {arbitrarily}{none} -%\etocsettagdepth {examples} {none} -%\etocsettagdepth {surprising} {none} -\etocsettagdepth {linestyles} {subsection} -%\etocsettagdepth {globalcmds} {subsection} -\etocsettagdepth {custom} {none} -%\etocsettagdepth {tips} {none} -%\etocsettagdepth {etocandworld}{none} -%\etocsettagdepth {code} {none} - -\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} -\etocsetnexttocdepth {subsection} -\tableofcontents -\endgroup -\end{filecontentsdef} - -\filecontentsexec\foo - -Der Code: -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} - -\section{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{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -\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{filecontentsdef} - -\filecontentsexec\foo - -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} - - -% \clearpage % ATTENTION 28 mars 2015 - -\section{Verlinkte Liste der Hauptbefehle} -% 16 octobre - -\begingroup\raggedcolumns -\advance\linewidth18pt -\begin{multicols}{3}\parindent0pt\relax - \csb{etocaftercontentshook}\par - \csb{etocaftertitlehook}\par - \csb{etocaftertochook}\par - \csb{etocbeforetitlehook}\par - \csb{etocdefaultlines}\par - \csb{etocdepthtag.toc}\par - \csb{etocdisplay}\par - \csb{etocframedstyle}\par - \csb{etocframed}\par - \csb{etociffirst}\par - \csb{etocifnumbered}\par - \csb{etocignoredepthtags}\par - \csb{etocignoretoctocdepth}\par - \csb{etocinline}\par - \csb{etoclink}\par - \csb{etoclocaltop}\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 - \csb{localtableofcontents}\par - \csb{localtableofcontentswithrelativedepth}\par - \csb{tableofcontents}\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{Die \toc-, \localtoc- und \localtocwrdp"=Befehle} -\label{tableofcontents} -\label{localtableofcontents} -\label{localtableofcontentswithrelativedepth} - -\begin{description} -\item[\toc] \etoc erlaubt beliebig viele \csa{tableofcontents}"=Befehle in -ihrem Dokument. Die Zeilen- und Inhaltsangabenstile können -natürlich dazwischen geändert werden. -\item[\localtoc] 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.% -\begin{otherlanguage}{english} -\footnote{As is explained in \autoref{sec:labeling} the syntax allows to - create somewhere a local table of contents and to display it at some other - location either before or after its origin.}% -% -\footnote{As is explained in \autoref{sec:tocdepth} \etoc allows at anytime to - locally redefine the numeric levels associated to named ones, which brings - great flexibility to achieve special effects, all done using only a single - auxiliary file, the standard |.toc| file.} -% -\item[\localtocwrdp\marg{number}] can be used to override the document or - current tocdepth setting (see \autoref{sec:tocdepth} for a discussion of - tocdepth) to become relative to where the local TOC originates. For example, - assuming the default numeric level assignments to standard sectioning units -\begin{verbatim} -\section{This is a section} -\localtableofcontentswithrelativedepth{+2} -\end{verbatim} - will create a local table of contents taking into account the subsections - and subsubsections inside this section, independently of what is the value - of the |tocdepth| counter at this position in the document. If the numeric - argument had been |3|, the local TOC would have displayed also paragraphs. - If the section had been a chapter, and again for a relative tocdepth of |2|, - the taken into account levels would have been sections and subsections.% -% -\footnote{The situation may be more complex, as the |.toc| file itself may - well contain \texttt{\string\setcounter\{tocdepth\}\{...\}} commands. This - is not recommended pratice with \etoc. See the discussion of - \csb{etocsettocdepth.toc} and \csb{etocdepthtag.toc} for more on this.} -\end{otherlanguage} -\end{description} - -The macro \localtocwrdp is \textbf{new with |1.09|}.% -% -\footnote{Thanks to Tony \textsc{Roberts} for feature request.} -% - -\section{Beschriften und anderswo wieder benutzen} -\label{sec:labeling} - -\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{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -\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{filecontentsdef} - -\filecontentsexec\foo - -Wir benutzen dies: -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} -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}} -\label{sec:tocdepth} - -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.\footnote{In the standard classes (at least), it also influences the - \csa{listoftables} and \csa{listoffigures}, via \csa{@dottedtocline}.} 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|. - -% -\begin{otherlanguage}{english} - -\begin{framed} - It is possible to use \csb{etocsettocdepth} inside the first argument of - \csb{etocsettocstyle} (possibly in conjunction with checking the - \csb{etoclocaltop} value, \emph{which however will be up-to-date there only if - \csb{etocchecksemptiness} was executed}). There is no worry then about - possible impact on hyperref bookmarks later on, because \etoc always resets - the |tocdepth| counter after typesetting a TOC to the value it had before - it. - - Since |1.09| the macro \csb{etocsetnexttocdepth} works also if located in - first argument of \csb{etocsettocstyle}, but there is no reason to use it - there as \csb{etocsettocdepth} has no durable effet on the |tocdepth| - counter if executed there. - - Check \csb{localtableofcontentswithrelativedepth} for a simpler way to - control the depth of local tables of contents. This has the advantage of - working reliably whether or not the \csb{etocchecksemptiness} is used. -\end{framed} -\end{otherlanguage} - -\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 Denis \textsc{Bitouzé} - 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{Die Befehle \csbhyp{etocglobaldefs} und \csbhyp{etoclocaldefs}} -\label{etocglobaldefs} -\label{etoclocaldefs} - -In \LaTeX{} verschwindet die Bedeutung eines Befehls, definiert -via |\newcommand\foo{...}| in einer Umgebung (oder Gruppe), vom -\TeX-Speicher beim Austritt aus dieser Umgebung (oder Gruppe). -Manchmal ist es jedoch erforderlich, Definitionen mit globaler -Reichweite zu geben, für diese hat \TeX{} primitive Präfixe -|\global|. - -Standardmäßig sind die \etoc-Definitionen von \csb{etocname} etc. -\ldots{} lokal, Dies verursacht Probleme in bestimmten -Zusammenhängen: bei TOCs als Tabellen (\autoref{sec:tocastable}, \autoref{ssec:tocastableold}), oder -auch mit |enumitem|-\emph{inline}-Varianten der -Standardumgebungen, weil der Befehl |\item| dann eine Gruppe -schließt (siehe \autoref{etocthelink}). - -Nach \csa{etocglobaldefs} wird \etoc seine Definitionen von -\csb{etocname} etc. \ldots{} vornehmen, sie haben eine globale -Reichweite. Für den normalen Gebrauch ist das nicht notwendig. Es -tut nicht weh, beides systematisch zu aktivieren. - -Um zur Standardeinstellung zurückzukehren, nehmen Sie -\csa{etoclocaldefs}. Beachten Sie, dass beide, -\csa{etocglobaldefs} and \csa{etoclocaldefs}, lokal für die -Umgebung oder Gruppe sind, in der sie verwendet werden. - -\begin{otherlanguage}{english} -\section{Not displayed empty TOCs} - -\subsection{The \csbhyp{etocchecksemptiness} command} -\label{etocchecksemptiness} - -The user needs to issue \csb{etocchecksemptiness} to tell \etoc to check whether -local tables of contents are empty and in case of emptiness to print nothing -at all.\footnote{Thanks to Paul Gaborit who asked for -such a feature.} This -can be useful to authors of \LaTeX{} classes who for example wish to have a -|\chapter| command doing systematically a \csa{localtableofcontents}, or for -people producing files via automatic conversions and some of those might have -sectioning commands and others not. - -«Emptiness» means that no \csa{contentsline} command would get executed within -the scope of the local table of contents --- empty line styles by themselves do -not make the TOC empty. \etoc always executes the \csb{etocaftertochook} -command; and the test for emptiness itself executes everything else found in -the |.toc| file. See \autoref{sec:addingtotoc} in this context. -\begin{enumerate} -\item the \csb{etocifwasempty} command discussed below can be used from inside -\csb{etocaftertochook}. -\item there is no \csa{etocdoesnotcheckemptiness} but if there was one -it would do |\makeatletter\Etoc@checksemptinessfalse\makeatother|. -\end{enumerate} - -The suppression of the heading (more precisely of the toc display style -elements) may be effective only for the final \LaTeX{} runs. For example in -the situation of a \csa{tableofcontents}|\ref{foo}| where the label |foo| is -not yet recognized, the heading (but not the contents) is printed and the TOC -is declared non-empty. Or, if one adds a \localtoc to a document, on the next -run, the test for emptiness will in fact apply to the next one, and the last -local TOC of the document will have its contents temporarily unknown to \etoc, -hence will be declared non empty, and the heading will be printed. - -For a finalized document compiled with initially no auxiliary files, the first -\LaTeX{} run will declare all local TOCs non empty and print for each of them a -heading (and no contents naturally). The second \LaTeX{} run will then -correctly decide which local TOC is empty or not. - -\subsection{The \csbhyp{etocnotocifnotoc} command} -\label{etocnotocifnotoc} - -The user can then extend the emptiness-checking to the global TOCs with -\csb{etocnotocifnotoc}. May I respectfully give the advice then to rather do -none of |\usepackage{etoc}| nor \toc ? |;-)|. Well, there is always the case -of batch conversions of documents having or not sectioning units. - -\subsection{The \csbhyp{etocifwasempty} command} -\label{etocifwasempty} -\label{etocxifwasempty} - -The command \csb{etocifwasempty}\marg{YES}\marg{NO} executes \meta{YES} if -the previous TOC was found to be empty and \meta{NO} if its was not so. This -may serve to act appropriately after a truly empty TOC. If -\csb{etocchecksemptiness} has not been issued, this conditional always -executes the \meta{NO} branch. - -This command is robust, and \csb{etocxifwasempty} is its expandable -version. - -\fbox{Do not forget the second argument: at least an empty pair of braces |{}| - must be present.} - -This conditional may wrongly say that the local TOC is empty or not empty -until \LaTeX{} compilations stabilize. But if it says that a local TOC is -empty, this does mean that \etoc considered the just encountered local table -of contents to be empty (for that run) and thus printed nothing (not even a -|\par|). - -% pas traduit -\section{The \csbhyp{etoclocaltop} command} -\label{etoclocaltop} - -\textbf{New with 1.09 (2019/03/09)}. - -Within either the TOC style -(\csb{etocsettocstyle}) or the local title styles (\csb{etocsetstyle}), the -control sequence \csb{etoclocaltop} is made equivalent for the duration of -\csb{localtableofcontents} to a numeric (self-delimiting) denotation of the -current top level. - -Thus: it will in numeric contexts (|\ifnum|, |\ifcase|, ...) represent zero -for a local TOC corresponding to chapter, or one if in a section, or two if in -a subsection, etc..., assuming of course here that the default levels are -obeyed (see \autoref{sec:tocdepth}). - -\begin{framed} - \csb{etoclocaltop} from inside the TOC heading (first argument of - \csb{etocsettocstyle}) has the correct value \emph{only under - \csb{etocchecksemptiness} regime}. Special circumstances correspond to - some special values: - \begin{description}[nolistsep] - \item[|-3|] (|-\thr@@|)\newline - signals that \etoc considers the local TOC to be - ``unknown''; this happens at the last local TOC, for the first \LaTeX\ run - after adding a new \localtoc to the document. In doubt, \etoc assumes the - TOC will prove non empty, hence it prints (independently of whether the - check for emptiness was activated or not) the heading as specified by - \csb{etocsettocstyle}. Thus, check if \csb{etoclocaltop} gives |-3| as a - a \meta{number} to detect that situation from within the first argument of - \csb{etocsettocstyle}, if desired. - \item[|-1000|](|-\@m|)\newline is in case of a \localtoc - being considered ``known'' (although it may still refer to the data in the - |.toc| file from the previous run) but without the check for emptiness - having been executed. - \item[|-10000|](|-\@M|)\newline is the value when accessed from the title - of a global TOCs. - \end{description} -\end{framed} -\begin{framed} - When executed from within a local table of contents \textbf{line styles} - (\csb{etocsetstyle}), \csb{etoclocaltop} always will hold the correct value, - whether or not the emptiness check was executed. - - For a global table of contents however, it will always keep the value |-3|. -\end{framed} - -Attention! \cs{etoclocaltop} is only to be queried; modifying it is strictly -forbidden and falls under the most rigorous prosecution allowed by federal -law. -\end{otherlanguage} - -\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). - - -\clearpage -\etocdepthtag.toc {examples} -\part{Beispiele}\label{part:examples} - -\thispartstats %% (pas de sous-section) - -\etocstandardlines -\etocsettocstyle {}{\medskip} -\localtableofcontents - -\begin{otherlanguage}{english} - We present some additional examples. To understand all code snippets in - detail, one will possibly need to have first browsed through - \autoref{part:linestyles} and \autoref{part:globalcmds}. -\end{otherlanguage} - -\section{Über\-prü\-fen des Kom\-pa\-tibilitäts\-modus} - -Als weiteres 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} -\begingroup % to keep in particular toc=left with local effect -\KOMAoptions{toc=left} -\etocstandarddisplaystyle % wird benötigt, damit toc=left gilt -\etocstandardlines -\tableofcontents \ref{toc:globalcmds} -\endgroup -\end{verbatim} -\begingroup -\KOMAoptions{toc=left} -\etocstandarddisplaystyle -\etocstandardlines -\tableofcontents \ref{toc:globalcmds} -\endgroup - -\section{Ein weiterer Kompatibilitätsmodus}\label{sec:anothercompat} - -Wie in \autoref{subs: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. - -\begin{otherlanguage}{english} - This has become easier since release |1.08k| as now \etoc preserves -automatically in \csb{etocsavedsectiontocline}, \csb{etocsavedchaptertocline} -etc... the meaning of the \LaTeX\ |\l@section|, |\l@chapter|, etc... macros as -they were at the time the TOC is typeset. -\end{otherlanguage} - -Man nimmt in die Präambel: -\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex} -\makeatletter -\newcommand{\MyStandardTOC}{% - \begingroup - % for the book or article classes: - %\etocsetstyle{part}{}{} - % {\etocsavedparttocline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}% - % for the scrbook or scrartcl classes: - \etocsetstyle{part}{}{} - {\etocsavedparttocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - % following is identical in book/article/scrbook/scrartcl classes: - \etocsetstyle{chapter}{}{} %%% only for book and scrbook - {\etocsavedchaptertocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \etocsetstyle{section}{}{} - {\etocsavedsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - \etocsetstyle{subsection}{}{} - {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% - % etc... if further sectioning units are used - \etocstandarddisplaystyle % this is for the title, page-marks, etc... - \tableofcontents - \endgroup} -\makeatother -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-A.tex} - - -One can add to the above arbitrary text formatting commands, for example -replace |\etocpage| by |\textcolor{blue}{\etocpage}|. - -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{For the -|memoir| class, one needed prior to \etoc |1.08k| a bit more: each of the command \csa{booknumberline}, -\csa{partnumberline} and \csa{chapternumberline} had to be saved. They can now -be used directly in the line styles, because their meanings are not modified -anymore by \etoc during its TOC typesetting.} -Die Anzahl und die Namen der einzelnen Einträge sind jeweils separat in einem -|hyperref|-Link, wie es immer der Fall bei \etoc ist, wenn man nicht im -Kompatibilitätsmodus ist. Ersetzt man \csa{etocnumber} mit \csa{etocthenumber}, -dann ergibt es ein Inhaltsverzeichnis, wo die Zahlen nicht mehr verlinkt sind, -aber die Namen noch. Oder man kann sich entscheiden, \csa{etocthename} zu -verwenden und eine Hyperlink"=Nummer mit \csa{etocnumber} zu erhalten. - -Hier ist ein subtiles Beispiel, wo nur geringfügig die "`sections"' modifiziert -wurden (hinzufügen von Farbe für die Nummer und das Entfernen des -|hyperref|-Links) und die Unterabschnitte, wie in der Standardeinstellung, -\emph{mit Ausnahme} von einer bestimmte "`section"' im Layout komplett geändert -wurde: \MyQuasiStandardTOC{\ref{toc:overview}} \bigskip Dieses Beispiel hat nur -Abschnitte und Unterabschnitte und der in \csa{MyStandardTOC} verwendete Code -war: -% corrected section number in verbatim code: 4 not 3 (2015/03/18) -\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex} -\etocsetstyle{section}{} - {\ifnum\etocthenumber=4 - \etocsetstyle{subsection} - {\par\nopagebreak\begingroup - \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue - \parindent 0pt \normalfont\normalsize\rmfamily\itshape - % \columnsep1em - % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}% - % \begin{multicols}{2}% - \etocskipfirstprefix} - {\allowbreak\,--\,} - {\etocname\ \textup{(\etocnumber)}} - {.\par\endgroup}% - % {.\par\end{multicols}\end{minipage}\par\endgroup}% - \else - \etocsetstyle{subsection} - {}{} - {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}} - {}% - \fi} - {\etocsavedsectiontocline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} - {}% -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-B.tex} -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. - -\begin{otherlanguage}{english} -\section{Emulating the book class}\label{sec:thirdexample} - -As explained in \autoref{subs:compat}: without explicit use of an -\csb{etocsetstyle} command the package will leave to the document class the -hand regarding the ``toc line styles''. It is sometimes asked by users (for -example those using \etoc for its \csb{localtableofcontents}) how to stay -close to but not completely identical with the design implemented by the -standard classes, such as |book|. I can recommend package |tocloft| for this, -as it is compatible with \etoc (see \autoref{sec:kompatmitanderen}) and thus \etoc will -obey the |tocloft| customizations (as long as no use has been made of -\csa{etocsetstyle}). It is also possible to modify only the style for, say, -sections and leave the parts, chapters, subsections as in the document class, -via the technique from \autoref{sec:anothercompat}. - -But for complete control, here is a translation of the |book| class code into -\etoc lingua. It is then easy to modify the relevant lengths or adjust the -used fonts. I thank \textsc{Denis Bitouzé} for prompting me to include this in -the \etoc manual, as it resulted from some conversation we had about this. The -code is not 100\% faithful to the |book| class, and particularly its rendering -of (multi-line) non-numbered units differs (... I think, as I copied pasted as -is the code from where I had stored it and did not do much thinking about it -again). Some proficiency in low-level \TeX\ and \LaTeX\ macros is needed to -understand what the code says, but for modifying fonts or some lengths such -in-depth understanding is not needed. - -With some extra code one can \emph{automatically adjust the widths} assigned -to typesetting sectioning numbers in order to prevent overflows, even with for -example \MakeUppercase{\romannumeral 38}; but this is a more advanced feature -which I have moved to \autoref{sec:thirdexampleextra}. - -First we set up some lengths. I use macro registers, not real \LaTeX\ lengths. -When using |em|'s however, this means that one must pay attention to when the -actual dimension assignment is made, as this will then depend upon the current -font settings. In the code below, at the location where the \csa{TOCnumwidthB} -and \csa{TOCnumwidthC} will be used, the |1em| from their specification will -be matched to the normal medium series font, not the bold font; this is -deliberate so that one can compare more readily with the other dimensions; -besides, with the \csa{TOCcomputenumwidths} from -\autoref{sec:thirdexampleextra} these macros will actually hold a dimension -using |pt| as dimensional unit. -\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex} -% it will be easy to globally shift the TOC horizontally if needed -\def\TOCleftmargin {0pt} -\def\TOCrightmargin {2.55em}% like LaTeX's \@tocrmarg - -% this is for dotted leaders -\newbox\TOCleaderbox -\def\TOCleaderboxwidth {0.7777em}% about like what standard classes do - -% vertical spacing -\def\TOCverysmallvskip {0pt plus .2pt} -\def\TOCmedvskip {1em plus 1pt} -\def\TOCbigvskip {2.25em plus 1pt} - -% the ``numwidths'' for typesetting the numbering of division units. -% I don't recall exactly how (and for which fonts) these figures were chosen. -% They quickly prove too small if using Roman numerals (as do too the book -% class defaults even though they are a bit larger). -\def\TOCnumwidthB {1.5em} % chapter -\def\TOCnumwidthC {2.278em}% section, I think default is 2.3em -\def\TOCnumwidthD {3.056em}% analog in standard class is 3.2em -\def\TOCnumwidthE {3.833em}% analog in standard class is 4.1em -\def\TOCnumwidthF {4.611em}% analog in standard class is 5em -\def\TOCnumwidthG {5.389em}% analog in standard class is 6em - -%The code for the ``global toc style''. - -\newcommand*\TOCglobalstyle {% -\etocsettocstyle - {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi - \parindent\z@ \leftskip\z@skip \rightskip \z@skip - \setbox\TOCleaderbox\hbox to \TOCleaderboxwidth{\hss.\hss}% - \chapter *{\noindent\kern\TOCleftmargin\relax % uses "pt"... - \contentsname - \@mkboth {\MakeUppercase \contentsname}{\MakeUppercase \contentsname}}% - \rightskip \TOCrightmargin\relax - \parfillskip -\rightskip % or a smaller value if desired - \leftskip \TOCleftmargin \relax } - {\if@restonecol \twocolumn \fi\cleardoublepage}% -% -\etocsetstyle{part} - {} - {\addpenalty {-\@highpenalty}% - \addvspace \TOCbigvskip - \leavevmode - {\large \bfseries % use a group to limit font change - \interlinepenalty\@M - \etocifnumbered{\etocnumber\hspace{1em}}{}% - \etocname - \nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}}\par - \nobreak - } - {} - {}% -% -\etocsetstyle{chapter} - {\advance\leftskip\TOCnumwidthB\relax} - {\addpenalty {-\@highpenalty }% - \vskip \TOCmedvskip\relax - \leavevmode - {\interlinepenalty\@M - \etocifnumbered - {\llap{\makebox[\TOCnumwidthB][l]{\bfseries\etocnumber}}} - {\advance\leftskip-\TOCnumwidthB\relax}% - \bfseries\etocname - \nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}\par }% - \penalty \@highpenalty - } - {} - {\advance\leftskip-\TOCnumwidthB\relax}% -% - \TOCsetlinestyle {section} {\TOCnumwidthC}% - \TOCsetlinestyle {subsection} {\TOCnumwidthD}% - \TOCsetlinestyle {subsubsection}{\TOCnumwidthE}% - \TOCsetlinestyle {paragraph} {\TOCnumwidthF}% - \TOCsetlinestyle {subparagraph} {\TOCnumwidthG}% -}% end of \TOCglobalstyle - -% The common code for line styles is abstracted into a macro: - -\newcommand\TOCsetlinestyle [2]{% #1= unit, #2= numwidth as macro -\etocsetstyle{#1} - {\advance\leftskip#2\relax} - {\vskip \TOCverysmallvskip\relax - \leavevmode - {\interlinepenalty\@M - \etocifnumbered - {\llap{\makebox[#2][l]{\etocnumber}}}{\advance\leftskip-#2\relax}% - \etocname - \nobreak\leaders \copy\TOCleaderbox - \hfil\makebox[-\parfillskip][r]{\etocpage}% - \par }% - } - {} - {\advance\leftskip-#2\relax}% -} -\makeatother -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-A.tex} -Nota Bene: the code deliberately handles the non-numbered sectioning units -unlike the way of the standard document classes (particularly regarding the -alignment of multi-line headings.) - -The whole thing was encapsulated in \csa{TOCglobalstyle}, because we also want -a \csa{TOClocalstyle} for local tables of contents which typically will want -to use |\section*| rather than |\chapter*| and not insert page marks in the -headers. The \csa{TOClocalstyle} is to be issued once, after the main document -TOC, or rather before using \csa{localtableofcontents}. If one wants a full -TOC at end of document one will naturally have to issue again -\csa{TOCglobalstyle} there. - -\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex} -\makeatletter -\newcommand*\TOClocalstyle {% -\etocsettocstyle - {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi - \setbox\TOCleaderbox\hbox to \TOCleaderboxwidth{\hss.\hss}% - \parindent\z@ - \dimen@ 2.25em % for left indenting - \section *{\kern\dimen@ % use of \dimen@ works here by sheer luck - \contentsname - % un-comment this if marks are wanted: - %\@mkboth {\MakeUppercase \contentsname}{\MakeUppercase \contentsname}% - }% end of \section - \parskip \z@skip - \vspace{-1.25\baselineskip}% somewhat ad hoc - \leftskip 2.25em - \rightskip 4.5em - \advance\rightskip-\TOCrightmargin\relax - \leavevmode\leaders\hrule\@height\p@\hfill\kern\z@\par - \rightskip 4.5em - \parfillskip -\TOCrightmargin\relax } - {\nobreak\vskip-.5\baselineskip - \leavevmode\leaders\hrule\@height\p@\hfill\kern\z@\par - \bigskip - \if@restonecol \twocolumn \fi }% -% -\etocsetstyle{section} - {\advance\leftskip\TOCnumwidthC\relax} - {\addpenalty \@secpenalty - \etociffirst{}{\addvspace{\TOCmedvskip}}% - \leavevmode - {\interlinepenalty\@M - \bfseries\etocifnumbered - {\llap{\makebox[\TOCnumwidthC][l]{\etocnumber}}} - {\advance\leftskip-\TOCnumwidthC}% - \etocname\nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}\par }% - \penalty \@highpenalty } - {} - {\advance\leftskip-\TOCnumwidthC\relax}% -% the rest is identical with code for global tocs: - \TOCsetlinestyle {subsection} {\TOCnumwidthD}% - \TOCsetlinestyle {subsubsection}{\TOCnumwidthE}% - \TOCsetlinestyle {paragraph} {\TOCnumwidthF}% - \TOCsetlinestyle {subparagraph} {\TOCnumwidthG}% -}% end of \TOClocalstyle -\makeatother -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-B.tex} -As mentioned previously, this handles non-numbered (multi-line) sectioning -units somewhat differently from what happens in the standard document classes. - -For some reason this code has some hard-coded |2.25em| and |4.5em| which were -not abstracted into macros or lengths. The code inserts horizontal rules above -and below the TOC contents in a non-separable by pagebreak way. - -See \autoref{sec:thirdexampleextra} for more. - -\end{otherlanguage} - -\section{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{filecontentshere}{etocsnippet-\the\value{section}-A.tex} -\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 -\tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure} -\endgroup -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-A.tex} - -\filecontentsexec\filecontentsheremacro - -\section{Ein weiteres 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}. - -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. - -\begin{otherlanguage}{english} - The details of the line styles used here are a bit involved, they were - written by the author at some early stage of this documentation and have - only been slightly revised to use more \LaTeX-commands and less - \TeX-primitives. Similar code is used also for - \hyperref[toc:clone]{this other toc}. -\end{otherlanguage} - -\begin{filecontentshere}{etocsnippet-\the\value{section}.tex} -\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\relax - \makebox[1cm][l]{\color{subsecnum}\etocnumber}% - \color{black}\etocname - \nobreak\leaders\hbox to.2cm{\hss.}\hfill - \rlap{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}\par - \nointerlineskip\vskip3pt} -{} - -\etocsetstyle{subsection} -{\etocskipfirstprefix} -{\shiftedwhiterule{1.5cm}{6pt}} -{\sffamily\small - \leftskip1.5cm\hangindent.8cm\rightskip.5cm\relax - \makebox[.75cm][l]{\color{subsecnum}\etocnumber}% - \color{black}\etocname - \nobreak\leaders\hbox to.2cm{\hss.}\hfill - \rlap{\makebox[.5cm][r]{\etocpage\hspace{.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} - -\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\nobreak\hfill\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}% - \vskip6pt} -{} - -\etocframedstyle[1]{} -\tableofcontents \label{toc:floating} \ref{toc:overview} -\vspace{-\baselineskip} -\centeredline{|\tableofcontents \ref{toc:overview}| -(\emph{cf.} \hyperref[toc:clone]{this other toc})} -\end{figure} -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} - -\filecontentsexec\filecontentsheremacro - - -\section{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. - -\begin{filecontentsdef}{etocsnippet-\the\value{section}-B.tex}{\foo} -\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{filecontentsdef} - -\filecontentsexec\foo - -Zur Erzeugung dieses Inhaltsverzeichnisses wurde folgender Code genutzt: -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}-B.tex} - - -\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{filecontentshere}{etocsnippet-\the\value{section}.tex} - < 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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} -\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{filecontentshere}{etocsnippet-\the\value{section}.tex} - \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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} - -\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 Befehle \csa{etocname}, etc\dots sind robust. Es ist einfacher -mit \csa{etocthelinkednumber}, \csa{etocthelinkedname} und -\csa{etocthelinkedpage}, das die gleichen Informationen in einer -einfacher zugänglichen Form enthält. - -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. - -\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -% \newtoks\treetok % move this (uncommented) to preamble -% \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}[thp!]\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{filecontentsdef} - -\let\appendtotok\relax -\filecontentsexec\foo - -Der resultierende Baum wird in einem \hyperref[toc:forest]{Puffer} angelegt, welcher -\vpageref[oben]{toc:forest} erscheint. Hier ist der zur Herstellung notwendige Code: -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} -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. - -\let\appendchildtree\relax -\let\treenode\relax - -\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex} -% \newtoks\treetok % put this uncommented in preamble -% \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{ ;}} - -\begin{figure}[thp!]\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} -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-A.tex} - -\filecontentsexec\filecontentsheremacro - -% 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}. - -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} - -Das ist in dem gleichen Sinn wie das "`Molekül"'-Beispiel. Die -Verwendung des \eTeX -Primitivs-\csa{unexpanded} vereinfacht den -Code.\footnote{das "`Molekül"'-Beispiel wurde am |2015/03/11| in -diese Dokumentation aufgenommen . Das "`Mindmap"''-Beispiel wurde -motiviert von \url{http://tex.stackexchange.com/a/232584/4686}. -Weitere Hilfe kam damals via -\url{http://tex.stackexchange.com/q/232816/4686} und dies führte -zu dem weiteren Beispiel \hyperref[toc:mindmaptitlepage]{title -page}.} - -\let\childnode\relax -\let\appendchildtree\relax -\let\appendtotok\relax -\expandafter\let\csname c@partco\endcsname\relax - -\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -\begingroup -% \newtoks\treetok % in preamble -% \newtoks\parttok % in preamble - -\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}} - -\newcommand*{\appendchildtree}[3]{% -% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2 -% t1 and t2 are two toks variable (not macros) -% #3 = for example teal!60 - \edef\tmpstuff {\the#1 child [#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. - {\ifnum\value{partco}=3 - \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}% - \else -\ifcase\pseudomodthree{\value{partco}}% - \or \appendchildtree\treetok\parttok {branch color= teal!60}% first - \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second - \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ... - \fi\fi - } - {\stepcounter{partco}% -% customize manually some TikZ set-up (should be done inside the TikZ thing I guess) - \def\tmpoption {}% - \def\tmprotate {}% first - %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi - %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi -% 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 {branch color= teal!60}% first - \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second - \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ... - \fi - } - -\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} {part} -\etocsettagdepth {arbitrarily}{part} -\etocsettagdepth {examples} {section} -\etocsettagdepth {surprising} {part} -\etocsettagdepth {linestyles} {part} -\etocsettagdepth {globalcmds} {part} -\etocsettagdepth {custom} {section} -\etocsettagdepth {tips} {part} -\etocsettagdepth {etocandworld}{part} -\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}[thp!] -\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=40, text width=3cm}, - level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm}, - level 1 concept/.append style={font=\normalsize}, - ] -\the\treetok -\end{tikzpicture}}} -\end{figure} -\endgroup -\end{filecontentsdef} -\filecontentsexec\foo - -Es ist schwierig, alles auf eine Seite einzupassen. Da kommt \csa{resizebox} -zur Hilfe, das auch Hyperlings bewahrt. Dennoch habe ich für dieses Beispiel -einige Abschnitte von der Anzeige ausgeschlossen, dafür nehmend die Technik von -\etoc \hyperref[etocdepthtag.toc]{depth tags}. Das vollverlinkte TOC erscheint -hier \vpageref{toc:mindmap}. - -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} -Eine interessante Alternative zur Verwendung von \etoc ist, das -gesamte TOC in einen TikZ-Baum zu konvertieren (vielleicht mit -Ausnahme einiger Teile) und in eine Datei zu drucken, von der es -zurückgewonnen und durch den Autor direkt bearbeitet werden kann. -Dinge, stehend in der |.log|-Datei, verschaffen zerbrochene -Zeilen. Hier gibt es eine Technik, um zu nicht zerbrechenden -Zeilen zu kommen. Sobald \csa{treetok} von \etoc berechnet wurde -(wie im \hyperref[toc:molecule]{molecule}-Beispiel oder dem -aktuellen Beispiel), wird dieses folgende Code-Schnipsel -ausgegeben zur Dateierweiterung -\begin{verbatim} - \newwrite\TOCasTree - \immediate\openout\TOCasTree=\jobname.toctree - \immediate\write\TOCasTree{\the\treetok}% -\end{verbatim} -Der Autor kann sie von dort aus kopieren und -manuell anpassen, um ein geignetes TikZ-Bild zu erhalten. -Siehe auch -\centeredline{\url{http://tex.stackexchange.com/a/232792}} - -\section{Das TOC als eine Tabelle} -\label{sec:tocastable} - -Mit der Veröffentlichung-|1.08| ist es einfacher geworden, das TOC -als Tabelle zu setzen. Es ist nun möglich, eine Tabelle im -Titel-Teil des TOC zu eröffnen (das erste Argument zu -\csb{etocsettocstyle}) und zu schließen nach dem Inhalt (zweites -Argument von \csb{etocsettocstyle}) und es ist auch möglich, -Linienstile wie in Tabularen |&| und Tabellen am Ende der Zeilen -|\\| zu nehmen. Es gibt einige Bedingungen und ein paar -Einschränkungen: - -\begin{enumerate} -\item Es ist notwendig, \csb{etocglobaldefs} auszugeben für - \etoc-Definitionen, um einen globalen Skopus zu haben. -\item Es ist unmöglich, mit einer \meta{start}-, \meta{prefix}-, - \meta{contents}- oder \meta{finish}-Spezifikation mit einer - einzigen |\hline| zu beginnen, \emph{d.\,h.} eine nicht mit einem - |\\| vorausgehende (es ist aber möglich zu setzen |\\| am Ende - eines \meta{prefix} und von |\hline| am Beginn von - \meta{contents}). -\item So ist als nächstes zu erläutern, dass es empfehlenswert - ist, |\\| am Beginn der \meta{prefix}- oder - \meta{contents}-Spezifikationen zu verwenden, um die - \emph{vorherige} Reihe abzuschließen, nicht um die \emph{aktuelle} - Reihe zu beenden; wenn das TOC ein partielles (ein - \csa{localtableofcontents}) ist, wird dieser Ratschlag zur Pflicht - (in fast allen Situationen). -\end{enumerate} - -Hier ein Beispiel eines TOCs als ein |longtable|. - -\begin{filecontentsdef}{etocsnippet-\the\value{section}-A.tex}{\foo} -\begingroup -\etocglobaldefs % notwendig für \etocname etc... um zu überleben & - -% Beachten Sie die Positionierung der \\ -\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{filecontentsdef} - -\filecontentsexec\foo - -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}-A.tex} -Beim Untersuchen des Codes wird sich der Leser fragen, warum die -|\\| immer zuerst in \meta{prefix+contents} und nicht, wie es -intuitiver ist, ziemlich später gegeben wird. In vielen Fällen -kann man in der Tat die TOC-als-Tabellen mit |\\|, die am Ende der -Stilspezifikationen lokalisiert sind (aber fast nie für ein -\csa{localtableofcontents}) konstruieren. Das Problem bei dem -vorhergehenden Beispiel war die Positionierung der |\hline|'s. - -Aufgrund der technischen Aspekte, wie \TeX{} die Ausrichtung jeder -Definition oder Festsetzung definiert, nach einem |\\| beginnt -eine neue Reihe und so erzeugt |\hline| ein illegales Token (das -sieht aus wie ein |misplaced \noalign| Fehler). \etoc hat nicht -nur solche Definitionen um \csb{etocname} etc. \ldots{} zu -konstruieren, sondern es ist auch der Fall, dass einige Pakete -Dinge in die |.toc|-Datei tun und in der Folge gibt es keine -Garantie dafür, dass zwischen zwei \csa{contentsline} kein solches -Token wie |\relax| ist, wie in den Kontexten von "`alignments -forces"' macht es \TeX{} unmöglich, um eine Zelle zu beginnen, -dann setzen Sie eine |\hline|. - -Der sicherste Weg ist, jede Linienspezifikation zu beginnen mit -einem |\\|. Wir hatten ein kleines Problem mit dem Fakt, dass wir -Teile wollten, die nicht nur eine Regel darüber haben (einfach, -sie machen |\\\hline|), sondern auch darunter: Nach jedem Teil ist -ein Abschnitt, und es sind diese Abschnitte, die verwendet werden, -um die fehlende |\hline| einzufügen (dies wird unter Vorbehalt mit -Hilfe der \csb{etociffirst}-Bedingung getan). - -Der aufmerksame Leser wird eine letzte Feinheit bemerken: Dem -Titel, so wurde vermutet, sollten nicht eine sondern zwei -|\hline|'s folgen. Um dieses Problem zu lösen, könnten wir ein -einmaliges Makro verwenden, das sich redefiniert, aber wir -bemerkten, dass dem Titel ein nicht nummeriertes Abstrakt folgte, -mit dem \csb{etocifnumbered}-Schalter kam die Rettung. - -Eine letzte technische Anmerkung: Weil wir |\\| in die Äste setzen -setzen, bestand keine Notwendigkeit, die erweiterten Varianten -\csb{etocxiffirst} und \csb{etocxifnumbered} einzustellen. - -Für die Hardliner ist der alte Weg zur Erlangung des exakt -gleichen Resultats hier zu sehen \autoref{ssec:tocastableold}. - -Hier ist auch ein viel einfacheres Beispiel. Es ist ein lokales -Inhaltsverzeichnis. - -\begin{filecontentsdef}{etocsnippet-\the\value{section}-B.tex}{\foo} -\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{filecontentsdef} - -\filecontentsexec\foo - -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}-B.tex} - - -\begin{otherlanguage}{english} -\section{A TOC self-adjusting widths for its typesetting} -\label{sec:thirdexampleextra} - -This is a continuation of \autoref{sec:thirdexample}. The goal is to adjust -automatically the ``numwidths'' used for typesetting the unit numbers in the -(local) tables of contents. -\begin{filecontentshere}{etocsnippet-\the\value{section}.tex} -\makeatletter -\newcommand*\TOCcompute@numwidths [2]{% #1=empty/"local", #2=minimal indent - \begingroup - \def\TOCnumwidthB {0pt}% - \def\TOCnumwidthC {0pt}% - \def\TOCnumwidthD {0pt}% - \def\TOCnumwidthE {0pt}% - \def\TOCnumwidthF {0pt}% - \def\TOCnumwidthG {0pt}% - \etocsetstyle{part}{}{}{}{}% - \etocsetstyle{chapter}{} - {\setbox0\hbox{\bfseries\etocthenumber\kern#2}} - {\ifdim\wd0>\TOCnumwidthB\edef\TOCnumwidthB{\the\wd0}\fi}{}% - \etocsetstyle{section}{} - {\setbox0\hbox{\bfseries\etocthenumber\kern#2}} - {\ifdim\wd0>\TOCnumwidthC\edef\TOCnumwidthC{\the\wd0}\fi}{}% - \etocsetstyle{subsection}{} - {\setbox0\hbox{\etocthenumber\kern#2}} - {\ifdim\wd0>\TOCnumwidthD\edef\TOCnumwidthD{\the\wd0}\fi}{}% - \etocsetstyle{subsubsection}{} - {\setbox0\hbox{\etocthenumber\kern#2}} - {\ifdim\wd0>\TOCnumwidthE\edef\TOCnumwidthE{\the\wd0}\fi}{}% - \etocsetstyle{paragraph}{} - {\setbox0\hbox{\etocthenumber\kern#2}} - {\ifdim\wd0>\TOCnumwidthF\edef\TOCnumwidthF{\the\wd0}\fi}{}% - \etocsetstyle{subparagraph}{} - {\setbox0\hbox{\etocthenumber\kern#2}} - {\ifdim\wd0>\TOCnumwidthG\edef\TOCnumwidthG{\the\wd0}\fi}{}% - % - \etocsettocstyle{} - {\global\let\TOCnumwidthB\TOCnumwidthB - \global\let\TOCnumwidthC\TOCnumwidthC - \global\let\TOCnumwidthD\TOCnumwidthD - \global\let\TOCnumwidthE\TOCnumwidthE - \global\let\TOCnumwidthF\TOCnumwidthF - \global\let\TOCnumwidthG\TOCnumwidthG}% - \etocnopar - \csname #1tableofcontents\endcsname -\typeout{Next TOCs will use \TOCnumwidthB\space for chapter number width}% -\typeout{Next TOCs will use \TOCnumwidthC\space for section number width}% -\typeout{Next TOCs will use \TOCnumwidthD\space for subsection number width}% -\typeout{Next TOCs will use \TOCnumwidthE\space for subsubsection number width}% -\typeout{Next TOCs will use \TOCnumwidthF\space for paragraph number width}% -\typeout{Next TOCs will use \TOCnumwidthG\space for subparagraph number width}% - \endgroup -}% -\newcommand*\TOCcomputenumwidths [1][0.5em]{% - \TOCcompute@numwidths {}{#1}% -}% -\newcommand*\TOCcomputelocalnumwidths [1][0.5em]{% - \TOCcompute@numwidths {local}{#1}% -}% -\makeatother -\end{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} -The optional parameter to \csa{TOCcomputenumwidths} specifies the minimal -indent. In case nothing is numbered you may wish a higher value than |0.5em|. -For each local table of contents to have its own width computations, the macro -\csa{TOCcomputelocalnumwidths} is provided. As the code makes global -assignments, either use (once) \csa{TOCcomputenumwidths} or do -\csa{TOCcomputelocalnumwidths} for each local table of contents. -\begin{verbatim} - \TOCcomputelocalnumwidths % may use optional argument to replace 0.5em - \localtableofcontents -\end{verbatim} -Notes: -\begin{enumerate}[nosep] -\item naturally these are only suggestions. For example one could put - everything in single macros \csa{TOCtoc} and \csa{TOClocaltoc} to - simultaneously compute the numwidths and then typeset the (local) table of - contents. -\item if you want to adjust the |tocdepth| recall from - \autoref{ssec:bookmarksdepth} that it influences |hyperref| hence you may - need to use a group |\begingroup...\endgroup|. Or, one can use - \csb{etocsetnexttocdepth}\marg{level} but (with the code as here) this must - then be issued twice, once for \csa{TOCcomputelocalnumwidths}, once for - \csa{localtableofcontents}. -\item the bold font serves above for both chapter and section numwidth - computations, but the code from \autoref{sec:thirdexample} uses |\bfseries| - only in local TOCs. Thus the \csa{TOCcomputenumwidth} will set the parameter - \csa{TOCnumwidthC} to a value slightly larger than needed in the main TOC. - Hence the section style in \csa{TOCcompute@numwidths} should possibly insert - the |\bfseries| in the box only after testing for the optional parameter - |local|. -\end{enumerate} -\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{Die \csbhyp{etocsetstyle}-, \csbhyp{etocname}- und \csbhyp{etocpage}"=Befehle}\label{sec:etocsetstyle} -\label{etocsetstyle} -\label{etocname} -\label{etocpage} - -Hier soll erläutert werden, wie \etoc\ dazu verwendet wurde, das -Inhaltsverzeichnis am Beginn dieses \autoref{part:linestyles}s 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{filecontentshere}{etocsnippet-\the\value{section}.tex} -\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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} -\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). - - - -\section{Die \csbhyp{etocskipfirstprefix} und \csbhyp{etociffirst} Befehle} -\label{etocskipfirstprefix} -\label{etociffirst} -\label{etocxiffirst} - -Der gewählte |subsubsection|-Stil machte dies, angewiesen von dem -Befehl \csb{etocskipfirstprefix}, der \etoc befielt, für den -ersten Punkt \emph{nicht} den angepassten \meta{prefix}-Code zu -nehmen. \footnote{Mit der Version vor |1.08| musste es das letzte -Zeichen im \meta{start}-Code sein. Es kann dort nun überall -erscheinen.} - -Der Befehl \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (neu mit -|1.08|) ist eine flexiblere Möglichkeit, die \meta{prefix}- (und -\meta{contents})-Spezifikationen anzupassen. Er führt die -\meta{YES CODE}-Verzweigung aus, wenn dies die erste Einheit auf -dieser Ebene (innerhalb einer Unterstufe) ist und \meta{NO CODE}, -wenn nicht. Dies ist ein robuster Befehl, der Erweiterungen -(beispielsweise in einem |enumitem|-Label) überlebt. - -Die Variante \csb{etocxiffirst} macht das Gleiche, aber sie ist -erweiterbar. - - -\section{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. - -\section{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}|. - -Der Befehl \csb{etocifnumbered} ist robust; \csb{etocxifnumbered} -(neu für |1.08|) hat den gleiche Effekt, aber er ist expandierbar. - -\section{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. - - -\section{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. - -\begin{otherlanguage}{english} - Since |etoc 1.08j| it contains the link destination in an already expanded - form, so for example can be used even after a |&| in a tabular construction, - if \csb{etocglobaldefs} was issued. -\end{otherlanguage} - -\section{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. - -% 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. - -\begin{otherlanguage}{english} - These macros are fragile and contain the link destination in already - expanded form. So their meaning can be stored for delayed usage. For example - this is done here when doing the \hyperref[tocastree]{examples with trees}. - - Notice though that for example \csa{etocthelinkednumber} is really a link - only if |hyperref| was configured to let the numbered heading be linked - (which is the default). Similarly for the others. - - \csa{etocthelink} will fetch the link destination if available from name or - page number and allows via |\etocthelink{foo}| to link an arbitrary text to - the same destination inside the produced PDF. - - The \csb{etocname}, \csb{etocnumber}, \csb{etocpage} and \csb{etoclink} are - simply their robust variants. They too contain the hyperlink destination in - already expanded form since |1.08a| for the first three, since |1.08j| for - \csb{etoclink}. -\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 mit Hilfe von \csb{etocglobaldefs} -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{Die \csbhyp{etocsavedsectiontocline}, usw... Befehle.} -\label{etocsavedsectiontocline} -\label{etocsavedchaptertocline} - -\begin{otherlanguage}{english} - Since |1.08k| \etoc preserves automatically in - \csb{etocsavedsectiontocline}, \csb{etocsavedchaptertocline} etc... the - meaning of the \LaTeX\ |\l@section|, |\l@chapter|, etc... in force at the - time each \csb{tableofcontents} or \csb{localtableofcontents} macro is - executed. -\end{otherlanguage} - -\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. - -\begin{otherlanguage}{english} - \textbf{\TeX\ hacker note:} We have seen in the previous chapter some examples -of using |\begin{enumerate}| and |\end{enumerate}| within TOC line styles. -There is a real difficulty with doing however something like this: -\begin{verbatim} -\etocsettocstyle{\begin{enumerate}}{\end{enumerate}} -\etocsetstyle{section}{}{\item \sectionname}{}{} -\end{verbatim} -Indeed for example on first compilation of a document, the |.toc| file is -empty and there will be the typical ``Something's wrong--perhaps a missing -\string\item''. Using \csb{etocchecksemptiness} does not help, because as is -explained there, on first encountering a new TOC added at end of a document, -\etoc considers it non-empty, hence querying \csb{etocifwasempty} serves -nothing. No, one must do something like this: -\begin{verbatim} -\makeatletter -\etocsettocstyle - {\begin{enumerate}} - {\if@newlist\item Please run \LaTeX\ again\fi - \end{enumerate}} -\makeatother -\etocsetstyle{section}{}{\item \sectionname}{}{} -\end{verbatim} -\end{otherlanguage} - -\subsection{Die Befehle \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol} und -\csbhyp{etoclocalmulticol}} -\label{etocmulticolstyle} -\label{etocmulticol} -\label{etoclocalmulticol} - -Dies ist ein Befehl mit einem optionalen und einem notwendigen Argument: -% -\centeredline{\csb{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}} -% -Die -\oarg{number\_of\_coloumns} können von 1 bis 10 gehen (default: 2; ist der Wert -1, so wird natürlich keine |multicols|-Umgebung angelegt). Das \meta{heading} -wird typischerweise `vertikaler' Art sein, also wie: \meta{heading} = -|\section*|\marg{title}, aber man kann auch horizontale Dinge realisieren wie -|\fbox{Hallo Welt}| (\etoc fügt automatisch ein |\par| ans Ende des -"`heading"'-Arguments von \csb{etocmulticolstyle}). Hier ist einmal exemplarisch -dargestellt, wie das Haupt"=Inhaltsverzeichnis dieses Dokuments konfiguriert -wurde: -\begin{verbatim} -\etocmulticolstyle{\noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} -\end{verbatim} -Nach \csa{etocmulticolstyle} haben alle zukünftigen \csa{tableofcontents} den -spezifizierten Stil, falls es zwischendurch nicht mehr geändert wird. Eine -kürzere Variante für nur ein Inhaltsverzeichnis ohne Einfluss auf spätere ist: -\centeredline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} oder -\centeredline{\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}.} - -\subsection{Der Befehl \csbhyp{etoctocstyle}} -\label{etoctocstyle} - -\centeredline{\csb{etoctocstyle}\oarg{kind}% -\marg{number\_of\_columns}\marg{title}} -\centeredline{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% -|{\kind*{|\itshape title\upshape|}}|} -Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Standardwert ist -|chapter| oder |section|, abhängig von der Dokumentklasse. - -\subsubsection{Der Befehl \csbhyp{etoctocstylewithmarks}} -\label{etoctocstylewithmarks} -\label{etoctocstylewithmarksnouc} - -\centeredline{\csb{etoctocstylewithmarks}\oarg{kind}% -\marg{number\_of\_columns}\marg{title}\marg{mark}} -\centeredline -{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% -|{\kind*{|\itshape title \ttfamily\upshape\string\markboth% -|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|} -Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Die wirkliche Anzeige der -Markierungen ("`marks"') hängt vom Seitenstil ab. Es gibt die Variante -\csb{etoctocstylewithmarksnouc}, welche Großschreibung unterdrückt. - -\paragraph{Möchten wir wirklich pargraph"=Einträge im Inhaltsverzeichnis?} - -\paragraph{Wirklich?} - -\subsection{Die Befehle \csbhyp{etocruledstyle}, \csbhyp{etocruled} und - \csbhyp{etoclocal\-ruled}} -\label{etocruledstyle} -\label{etocruled} -\label{etoclocalruled} - -Das generelle Format von \csa{etocruledstyle} ist: -\centeredline{\csb{etocruledstyle}% - \oarg{number of columns}\marg{title of the toc}} -\noindent -Der Titel ist horizontales Material (der |LR|-Modus von \emph{\LaTeX{}, ein -Dokument"=Vorbereitung"=System,}): wenn es nicht in eine Zeile passt, dann sollte -es in eine \csa{parbox} mit einer gegebenen Weite geschrieben werden. Der grüne -Rahmen für die Überschrift des Inhaltsverzeichnisses zu \hyperref[toc:a]{Beginn -des zweiten Teils dieses Dokuments} wurde erzeugt durch: -\begin{verbatim} -\etocruledstyle[1]{\etocfontminusone\color{green}% - \fboxrule1pt\fboxsep1ex - \framebox[\linewidth] - {\normalcolor\hss Contents of this part\hss}} -\end{verbatim} - -Eine kürzerer Weg den Stil zu setzen mit \csb{etocruledstyle} und dann einen -\csa{tableofcontents} zu erstellen, alles zusammen in einer Gruppe damit -zukünftige Inhaltsverzeichnisse nicht betroffen sind, ist: -\centeredline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}} - -\subsection{Die Befehle \csbhyp{etocframedstyle}, \csbhyp{etocframed} -und \csbhyp{etoclocal\-framed}} -\label{etocframedstyle} -\label{etocframed} -\label{etoclocalframed} - -Die gleiche Arbeitsweise: -% -\centeredline{\csb{etocframedstyle}\oarg{number\_of\_columns}\marg{title}} -und die passende Abkürzung: -% -\centeredline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} -Diese wird -verwendet, wenn man nicht den Stil zukünftiger Inhaltsverzeichnisse modifizieren -will (eine ändere Möglichkeit wäre es, das Ganze in Klammern zu packen oder -innerhalb eines |\begingroup...\endgroup|; es gibt auch noch einen -\csa{etoclocalframed} für ein lokales Inhaltsverzeichnis). - -Das gesamte Inhaltsverzeichnis ist eingerahmt. Der Titel selbst aber nicht: -Möchte man das erreichen, dann muss man das im \meta{title}-Argument mit -\csa{etocframedstyle} oder \csa{etocframed} festhalten. Die Farben für den -Hintergrund und der anderen Komponenten (oben, links, rechts, unten) des Rahmens -sind festgelegt mittels geeigneter |\renewcommand|'s (siehe -\autoref{ssec:customdisplay}). - -Eine |minipage| wird benutzt, von daher ist das produzierte Inhalsverzeichnis -nicht kompatibel mit Seitenumbrüchen. Um diese zu erlauben, wird empfohlen, die -Befehle -\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}} -oder -\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}} -in den Argumenten von \csb{etocsettocstyle} zu verwenden. - -Beispiele in diesem Dokument findet man auf den Seiten \pageref{toc:d}, -\pageref{toc:floating}, \pageref{toc:b} und \pageref{toc:clone}. - -\subsection{Überschriften, Titel, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}} -\label{etocinnertopsep} -\label{etocoldpar} - -Das für \csb{etocmulticolstyle} notwendige \meta{heading}-Argument kann entweder -Vertikal"=Modus"=Material sein wie |\section*{\emph{Inhaltsverzeichnis}}| oder die -horizontale Variante wie das einfache |\etocmulticolstyle{Hallo Welt}|. - -Es kann kein explizites |\par| oder eine Leerzeile in das notwendige Argument -von \csb{etocmulticolstyle} eingefügt werden, aber \etoc stellt \csb{etocoldpar} -als Ersatz bereit: Es fügt |\let\etocoldpar\par| vor der |multicols|-Umgebung -ein und eben dieses |\etocoldpar|\footnote{Dieser Befehl \csa{etocoldpar} (= -funktionierendes \csa{par} im Argument von \csa{etocmulticolstyle}) ist nicht -verwandt mit dem Schalter \csb{etocinline}, dessen Zweck es ist \etoc -mitzuteilen, kein \csa{par} vor dem Inhaltsverzeichnis auszuführen.} am Ende der -Überschrift ein, und macht dann noch einen vertikalen Sprung der Größe -\csa{etocinnertopsep}. - -Auf der anderen Seite erwarten die Befehle \csb{etocruledstyle} und -\csb{etocframedstyle} ein Argument im "`LR-Modus"' (um die Terminologie von -\emph{\LaTeX, a document preparation system} zu nutzen). Das bedeutet, dass -mehrzeilige Titel nur möglich sind, wenn man sie in etwas wie eine \csa{parbox} -einschließt. - -Eine wichtige Größe verwendet von sowohl \csb{etocmulticolstyle}, -\csb{etocruledstyle} als auch \csb{etocframedstyle} ist \csb{etocinnertopsep}. -Es gibt an, wieviel Platz zwischen den Überschriften und dem Start des Inhalts -liegen soll. Der Default"=Wert ist |2ex| und man kann es mittels -|\renewcommand*{\etocinnertopsep}|\marg{neuer\_Wert} ändern, nicht mit -|\setlength|. - -\subsection{Der Kompatibilitätsmodus \csbhyp{etocstandarddisplaystyle}} -\label{etocstandarddisplaystyle} - -\etoc wird dann das emulieren, für was eigentlich die Dokument"=Klasse -verantwortlich ist, in Bezug auf den globalen Display"=Stil des -Inhaltsverzeichnisses. Allen Änderung von innerhalb der Klasse sollten -berücksichtigt werden. - -\subsubsection{Die Befehle \csbhyp{etocarticlestyle}, \csbhyp{etocbookstyle}, - \dots} - -Dies sind Befehle, die abhängig von der Dokumentenklasse intern -von \etoc im Kompatibilitätsmodus verwendet werden. Beispielsweise -nimmt \csa{etocarticlestyle} |\section*{\contentsname}| (und setzt -Markierungen in die Seite), während \csa{etocbookstyle} -|\chapter*{\contentsname}| nimmt. Es kann nützlich sein, -\csa{etocarticlestyle} für ein \csa{localtableofcontents} in der -|book|-Klasse und im Kompatibilitätsmodus für den globalen -TOC-Anzeige-Stil zu nehmen. - -\subsection{Der Befehl \csbhyp{etocinline}} -\label{etocinline} -\label{etocnopar} -\label{etocdisplay} - -Mit \csb{etocinline} oder seinem Synonym |\etocnopar|, von dem -|\tableofcontents|"=Befehl und seinen Varianten werden \emph{nicht} zuerst ein -|\par| erstellt, um den vorherigen |paragraph| zu schließen. Von daher kann man -das Inhaltsverzeichnis in einem Inline"=Stil darstellen; oder, wenn nur gebraucht -um eine Token"=Liste bzw. ein Makro vorzubereiten, wird es bei der Ausführung -nichts im Token"=Stream hinterlassen. - -% JFBU: -Mit \csb{etocdisplay} werden (nochmal) von dem |\tableofcontents|"=Befehl und -seinen Varianten zuerst ein |\par| erstellt. - -\begin{otherlanguage}{english} - -\section{Starred variants and hooks} -\label{tableofcontents*} -\label{localtableofcontents*} -\label{etocbeforetitlehook} -\label{etocaftertitlehook} -\label{etocaftercontentshook} -\label{etocaftertochook} - -The \toc, \localtoc, \csa{etocmulticol}, and all their cousins have starred -variants (the star must be before the other arguments). The non-starred -variants execute the \csb{etocaftertitlehook}, whose default definition is to -do nothing. The starred variants do not execute this hook. - -For example, imagine you are using |book| class and want \localtoc to use a -section-like title, but unnumbered. Assuming the main \toc comes first in the -document, you can insert this after it: -\begin{verbatim} - \etocarticlestyle - \renewcommand{\etocaftertitlehook}{\addcontentsline{toc}{section}{\contentsname}} -\end{verbatim} -This configures the way \localtoc will behave (or \toc) from now on in the -document. - -The first line tells essentially to use |\section*{\contentsname}|, and the -second line says to insert the title in the |.toc| file itself (thus to be -displayed by the main table of contents). Notice that |hyperref| package will -then automatically create suitable anchor and one should \emph{not} use -explicitly \cs{phantomsection} here (it would let the anchor be located below -not above the title). - -With this set-up issuing \localtoc|*| will ignore the \csa{etocaftertitlehook} -hence not send the local toc title to the |.toc| file. This mimicks the -|memoir| class behavior, and can also be used with it. For more on |memoir| -class with \etoc, see \autoref{ssec:memoir}. - -There are further hook macros: -\csb{etocaftercontentshook}, \csb{etocbeforetitlehook} and -\csb{etocaftertochook} which are initially defined to do nothing and can be -used for some special effects. They are executed whether or not the table of -contents command was starred.% -% -\footnote{Hackers can test within these hooks if the context is starred or not - via an \cs{ifx}\cs{Etoc@aftertitlehook}\cs{@empty} conditional. Perhaps a - future release will provide \cs{etociftocisstarred} wrapper.} - -\end{otherlanguage} - - -\clearpage -\etocdepthtag.toc {custom} - -\part{Eigene Stile von \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\}|\\ - \localtoc \csa{ref}|\{toc:far\}| \\ - \localtoc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ - \hbox{}{\itshape\ttfamily\ \ \ \ \ }% - \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich} - }}} - -\medskip - -Neu mit |1.08e|: \localtoc\csa{ref}|{toc:far}| als Synonym für -\toc\csa{ref}|{toc:far}|. - -% obsolète depuis 1.08e -% 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{filecontentshere}{etocsnippet-\the\value{section}.tex} -\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape - \fbox{\parbox{.6\linewidth}{ - \leftskip 0pt plus .5fil - \rightskip 0pt plus -.5fil - \parfillskip 0pt plus 1fil - Dies ist das zentrale zweispaltige Inhaltsverzeichnis, das den - Standardlinienstil von \etoc nutzt, wobei die Abschnitte wie Kapitel und die - Unterabschnitte wie Abschnitte gesetzt wurden. }}} -\etocdefaultlines -\renewcommand{\etocpartname}{\partname}% -% <1.08b hat \partname als Standard, aber dies arbeitet nicht gut mit frenchb -% daher ist der Standard jetzt nun einfach Teil. Für die deutsche Sprache -% können wir \partname oder Teil nehmen. -\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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} - -% % pour un problème avec multicol (doc de 1.08g, Samedi 29 août 2015 à 12:06:08) -% \clearpage - -\filecontentsexec\filecontentsheremacro - -\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} -% (in classes with chapter, \etocfontone does not do \bfseries) -\newcommand*\etocfonttwo{\normalfont \normalsize} -\newcommand*\etocfontthree{\normalfont \footnotesize} - -\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex} -\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} -\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} -\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} -\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} -\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} - -\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil} -\newcommand*\etocminustworightmargin{1.5em plus -0.5fil} -\newcommand*\etocminusoneleftmargin{1em} -\newcommand*\etocminusonerightmargin{1em} - -\newcommand*\etocbaselinespreadminustwo{1} -\newcommand*\etocbaselinespreadminusone{1} -\newcommand*\etocbaselinespreadzero{1} -\newcommand*\etocbaselinespreadone{1} -\newcommand*\etocbaselinespreadtwo{1} -\newcommand*\etocbaselinespreadthree{.9} -\newcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} -\newcommand*\etocabbrevpagename{p.~} % muss der Sprache angepasst werden - % deutsche Nutzer: \renewcommand*\etocabbrevpagename{S.~} -\newcommand*\etocpartname{Part} % früher, vor v1.08b, war \partname -% aber dies macht keinen Sinn, z.\,B. mit babel+frenchb deren \frenchpartname -% nimmt in den Account den Wert des Teilzählers. -\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{filecontentshere}{etocsnippet-\the\value{section}.tex} -\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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} - -\filecontentsexec\filecontentsheremacro - -% 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. - -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} - -\begin{otherlanguage}{english} -\section{The \csbhyp{etocsetlocaltop.toc} command} -\label{etocsetlocaltop.toc} - -It is important to understand that \csb{localtableofcontents} works entirely -from data \emph{in the |.toc| file}. If the document, say with |article| -class, contains starred sectioning commands, which are not accompanied -by suitable \csa{addcontentsline}, then these units are completely -transparent to \csb{localtableofcontents}: -\begin{itemize} -\item If it is issued before |\section*{Foo}|, say locally to a |\section|, - then the local TOC will include not only the |subsection|s between the - |\section| and the |\section*{Foo}| but also those following, and be stopped - uniquely by a later |\section| or |\part| from the document's body. -\item If the command is issued right after |\section*{Foo}| and the later was - itself subsequent to a (numbered) |\subsection|, then \etoc will think it - must display a TOC local to that \emph{subsection} level. -\end{itemize} -Before concluding that \etoc is buggy, imagine how the global TOC of the -document would look like in such circumstances: the \csb{localtableofcontents} -does exactly the job of extracting from that global TOC various local TOCs; it -works only from material in that (virtual) global TOC. - -Since relase |1.08k|, \etoc provides the one-argument command -\csb{etocsetlocaltop.toc} to insert into the |.toc| file a kind -of ``ghost'' of a given sectioning unit. Here is an example: - -\begin{verbatim} -\part*{Extra unnumbered part} -\etocsetlocaltop.toc{part} -\localtableofcontents -\end{verbatim} - -Then in this example, \csb{localtableofcontents} will know be stopped -by the next |\part| (naturally a numbered one or a |\part*| followed by -suitable |\addcontentsline|) or also by a later |\etocsetlocaltop.toc{part}|. - -This is all fine but keep in mind again that \csb{localtableofcontents} can -only display units which have been pushed to the |.toc| file, so that |\part*| -must be followed by numbered sections or |\section*/\addcontentsline| pairs if -\csb{localtableofcontents} is to display anything useful. One can not use -\etoc to typeset data not actually there in the |.toc| file! - -Thus, in the situation above, one may wonder why the document does not use -|\addcontentsline| after the |\part*| as it must do so for sub-sectioning -units if they are to appear in the local TOC. - -One may imagine some document where all |Part|s are non-numbered (and are not -pushed to the |.toc| file) but nevertheless the user wants its -\csb{localtableofcontents} for each one: then indeed \csb{etocsetlocaltop.toc} -will help in that case. - -There are at least two more methods to handle this situation: -\begin{itemize} -\item the first one is simply to use the |\addcontentsline{toc}{part}{..}| - commands, and to set the |part| style to do nothing, so that the main TOC - will not display them, -\item the second one does not add the |\addcontentsline{toc}{part}{...}| but - uses ``depth tags'' (\autoref{ssec:tocwithdepthtags}) and multiple - \csb{tableofcontents} (not \csb{localtableofcontents}), one for each desired - local TOC. -\end{itemize} - -There is a variant of the first method which would set the level of |part| -temporarily to |6| for the typesetting of the main TOC. But then the |chapter| -toc line style will execute inside the main TOC only once its \emph{start} and -\emph{finish} parts (see \autoref{sec:etocsetstyle}). This is actually also a -problem of the second method. - -But not of the first method which uses -\centeredline{\csb{etocsetstyle}|{part}{}{}{}{}|} nor of the approach with -\csb{etocsetlocaltop.toc}: the \emph{start} and \emph{finish} portions of the -|chapter| toc line style will get executed at the appropriate times in the -main, global, TOC. - -Be aware however that this use of \csb{etocsetlocaltop.toc}|{part}| will also -cause the main global TOC to execute (once) the \emph{start} and \emph{finish} -portions of the |part| toc line style (assuming here again it is not typeset in -compatibility mode). - -Final remark: usage of \csb{etocsetlocaltop.toc} interferes with -\csb{etocchecksemptiness} only to the extent that it modifies (as explained in -this section) the selection made by \csb{localtableofcontents}, hence the -decision whether the local TOC is empty or not. - -\end{otherlanguage} - -\section{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} - -\section{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 - -\section{Statistiken anzeigen}\label{ssec:statistics} - -Jeder Teil dieses Dokuments beginnt mit einem Paragraphen, der sagt, wieviele -Kapitel und Unterkapitel er hat. Nun, jeder von diesen Paragraphen ist ein -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{filecontentshere}{etocsnippet-\the\value{section}-A.tex} -\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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-A.tex} -Und nun, die Variante mit Makros anstelle von der mit Boxen (diese Variante -steht hier für die Verwendung in einem Kapitel). -\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex} -\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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}-B.tex} - -\section{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: - -\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo} -\etocsetnexttocdepth {all} -\begingroup -\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip -\newcommand*{\EndParWithPagenoInMargin} - {\nobreak\hfill - \makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% - \par} -\renewcommand*\etoctoclineleaders - {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} -\newcommand*{\EndParWithPagenoInMarginAndLeaders} - {\nobreak\leaders\etoctoclineleaders\hfill - \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}% not needed explicitely, keeps value -%\etocsettagdepth {examples} {part} -%\etocsettagdepth {surprising} {part} -%\etocsettagdepth {linestyles} {part} -\etocsettagdepth {globalcmds} {paragraph} -\etocsettagdepth {custom} {part} -%\etocsettagdepth {tips} {part} -%\etocsettagdepth {etocandworld}{part} -\etocsettagdepth {code} {none} -\renewcommand\etoctoprule {\hrule height 3pt\relax } -\renewcommand\etoctoprulecolorcmd {\color{blue}} -\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{filecontentsdef} - -\filecontentsexec\foo - -\filecontentsprint\foo -\attachfile{etocsnippet-\the\value{section}.tex} - -\section{Das TOC als eine Tabelle setzend (die alte Weise)} -\label{ssec:tocastableold} - -Aufgrund, unter anderem, der Tatsache, dass die Ausrichtung Zellen -kreiert und Gruppen schließt und dass durch standardmäßige -Definitionen von \csb{etocname}, \csb{etocnumber} und -\csb{etocpage} durch \etoc lokal sind, war es nicht leicht, ein -TOC als Tabelle mit \etoc zu setzen, vor der Freigabe von Version -|1.08|. - -Nicht nur \csb{etocname} etc. \ldots{} verursachte ein Problem, -sondern auch die grundlegende Redefinition von \csa{contentsline}, -die von \etoc erst nach dem ersten Argument von -\csb{etocsettocstyle} gemacht wurde, ist beseitigt worden; -folglich, wenn dieses Argument in einer Tabelle geöffnet wurde, -würde die \etoc-Redefinition von \csa{contentsline} in der ertsen -Zelle der ersten Reihe durchgeführt werden und danach verloren -gehen. - -So musste man auf die Technik zurückgreifen, die in -\autoref{tocastree} erklärt wurde, auf die Verwendung der -Festlegung von \csa{tableofcontents} als eine Möglichkeit, Daten -zu speichern, die später gezeigt wurde. - -Für das Protokoll, dies ist, wie das TOC in -\autoref{sec:tocastable} in der Vergangenheit codiert wurde. Hier -haben wir nicht das Problem mit der Positionierung der |\hline|s; -wir sind konfrontiert mit dem neueren Verfahren. Andererseits -müssen wir Zeichenregister manipulieren, die den meisten \LaTeX --Nutzern nicht bekannt sind (Makros könnten verwendet werden, doch -das würde umständlich sein, außer vielleicht mit Hilfe von \eTeX{} -\csa{nicht expandiert}). - -Die Methode hier ist die stärkste, weil sie aus der |.toc|-Datei -nur die Daten herausfiltert, die wir wollen (die anderen Dinge -werden nicht ignoriert, sie werden ausgeführt, jedoch ohne -hoffentlich Chaos zu schaffen; typisch sind dafür die Sprache von -Anleitungen zu ändern, etc. \ldots ). Und wir sind weniger anfällig, -potentielle Opfer von verschiedenen Fallen bei externen Makros -innerhalb der |.toc|-Datei aus anderen Paketen stammend. - -% unexpanded avait été traduit en allemand :-(( -% corrigé seulement le 25 septembre 2016 - -Hinweis: Anstatt |\toks|-Register wäre es hier einfacher, \eTeX{} -\csa{unexpanded} Primitive zu verwenden. Sehen Sie dazu -zum Beispiel \autoref{sec:mindmap}. - - -\begin{filecontentshere}{etocsnippet-\the\value{section}.tex} -\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{filecontentshere} -\attachfile{etocsnippet-\the\value{section}.tex} - -% ATTENTION Dimanche 25 septembre 2016 à 18:56:50 -% je retire le \clearpage car il y a une page quasi-vide à l'exception de -% l'icône Paperclip. - -\clearpage -\etocdepthtag.toc {etocandworld} - -\part{\etoc und die Außenwelt} - -\section{Kompatibilität mit anderen Paketen}\label{sec:kompatmitanderen} - -\subsection{Generelle Informationen} - -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.} - - 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 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. - -\etoc erfordert von der |.toc|-Datei, das |\contentsline|-Makro zu -verwenden (möglicherweise von anderen Paketen belegt). - -\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.} - -% - -\begin{otherlanguage}{english} - Don't use |\if<condition> stuff \tableofcontents\fi|, but: - \centeredline{|\if<condition> stuff \expandafter\tableofcontents\fi|} - Also a |\else| immediately following \csa{tableofcontents} or - \csa{localtableofcontents} requires a previous \csa{expandafter}. -\end{otherlanguage} - -\subsection{Kompatibilität mit \texttt{beamer}} - -\etoc steht inkompatibel mit der |beamer|-Klasse. Aber, wenn |beamer| im -article-Modus verwendet wird, d.\,h. die article-Klasse in Verbindung -mit dem |beamerarticle|-Paket, dann sollte \etoc arbeiten. - -\subsection{Kompatibilität mit \texttt{Babel}} - -\begin{framed} - Man sollte \etoc \emph{nach} \texttt{babel} laden. -\end{framed} - -\subsection{Kompatibilität mit \texttt{hyperref}} - -\begin{otherlanguage}{english} - Please inform the author in case of issues: \etoc was from the start - designed to be |100%| compatible with package |hyperref|. -\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. - -\subsection{Kompatibilität mit \texttt{multicol}} - -\etoc lädt das Paket |multicol|. - -\subsection{Kompatibilität mit \texttt{tocloft}}\label{subs:tocloft} - -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} - -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. - -\subsection{Kompatibilität mit der \texttt{memoir}-Klasse} -\label{ssec:memoir} -\label{etocmemoirtoctotocfmt} -\label{etocmemoirstyle} - -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. - -\begin{otherlanguage}{english} - -The |memoir| mechanism relative to \toc versus \toc|*| is obeyed -automatically, and applies with \localtoc too. - -\end{otherlanguage} - -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, 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. - -\begin{otherlanguage}{english} - -Actually, that \localtoc by default uses like \toc a chapter style is often -inconvenient. One can use the |memoir| macros to modify this: according to -|memoir| documentation, |\tocheadstart| and |\printtoctitle| seem to be the -most relevant. If you do that you will probably want the added line in |.toc| -file to use |{section}| not |{chapter}|. \etoc provides to this effect -\csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name} whose first argument -\meta{kind} is |chapter|, |section|, |subsection|, etc... and the second -argument stands for the title and thus \csa{contentsname} is appropriate. Hence -\begin{verbatim} - \etocmemoirtoctotocfmt{section}{\contentsname} -\end{verbatim} -seems the natural choice in this context as an addition to the customizing the -|memoir| toc related macros to achieve a section like rendering (for more -details on the latter, please refer to |memoir| manual). - -A completely different approach, arguably simpler, is to overrule the \etoc -default under |memoir| (after the main document \toc which should still use a -chapter styling) via these simple -commands: -\begin{verbatim} - \etocarticlestyle % means to use \section*{\contentsname} (and marks) - \renewcommand{\etocaftertitlehook}{\addcontentsline{toc}{section}{\contentsname}} -\end{verbatim} -exactly as one would do with |book| class for example. Don't use any -|\phantomsection| in there, |hyperref| hyperlinks will work just fine (and the -anchor will be slightly above toc title, not below). - -Notice that prior to \etoc |1.09b|, the \csb{etocaftertitlehook} macro was -used by \etoc itself under the |memoir| class. Hence \localtoc obeyed the -|memoir| mechanism relative to starred or not starred, even after issuing -\csa{etocarticlestyle}, as long as the user did not redefine -\csb{etocaftertitlehook}. Starting with |1.09b| (which syncs with a |memoir| -change at |v3.7i|) it is needed in a case like here where the user issues -\csa{etocarticlestyle} to also configure explicitly the -\csa{etocaftertitlehook} to achieve the ``insert title in |.toc|'' effect (if -so wished), because \etoc uses another mechanism and does not pre-empt usage -of this user macro anymore. - -To recover the \etoc default under |memoir| class one can issue -\csa{etocmemoirstyle} and then -\csa{etocmemoirtoctotocfmt}|{chapter}{\contentsname}| (but attention that a -custom \csb{etocaftertitlehook} will still be obeyed; for info: it will get -executed before the \cs{cfttocbeforelisthook}). - -\end{otherlanguage} - - - -\subsection{Kompatibilität mit \texttt{tocvsec2}} - -% la traduction allemande était déficiente semble-t-il, j'améliore un peu -% Dimanche 25 septembre 2016 à 11:02:43 - -\etoc deaktiviert die Modifikationen des |\tableofcontents| durch -|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}} und es kanzelt -auch andere |toc|-bezogene Macros, aber es reimplantiert partiell ihre -Funktionalität mit \csb{etocsettocdepth.toc}. Zwei \LaTeX-Läufe sind für -das erneute Nehmen des Befehls in einem Dokument notwendig, um einen -Effekt im Inhaltsverzeichnis zu haben. - -\subsection{Kompatibilität mit \texttt{tableof}} - -Es ist möglich, \etoc und {\color{niceone}|tableof|} -\footnote{\url{http://ctan.org/pkg/tableof}} gleichzeitig zu -verwenden. Die Veröffentlichung |1.08| von \etoc benötigt -mindestens die Version|1.4a| von |tableof|. Wenn man -\csb{etocglobaldefs} in die Präambel aufgenommen hat, muss dies -nach dem Laden des Pakets |tableof| sein. Der -{\color{niceone}|tableof|}-Befehl \csa{nexttocwithtags} sollte, -wie erwartet, funktionieren. - -Die {\color{niceone}|tableof|}-Befehle \csa{tableof}, -\csa{tablenotof}, \ldots{} werden das Inhaltsverzeichnis (a priori -global) nach den Standards der Dokumentklasse setzen, gehorchend -den \etoc-Tiefenauszeichnungen, wie erklärt in der -|tableof|-Dokumentation, sie setzen keinen TOC-Titel. Sie sollten -\emph{nicht} verwendet werden im Fall, wenn \csb{etocglobaldefs} vorher -ausgegeben wurde; es sei denn, ihr Skopus wurde da beendet oder -\csb{etoclocaldefs} hat seine Einflussnahme abgebrochen. - -\subsection{Kompatibilität mit \texttt{tocstyle}} - -Nicht bekannt. (not tested a.t.t.o.w). - - -\section{\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. - -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. - - -\section{Fehler und Katastrophen} - -Nach der Verwendung von \csa{etocsetstyle}für eine Ebene nehmen die restlichen, -nicht angepassten Ebenen die Standardstile von \etoc (diejenigen, die aktiviert -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} - -\localtableofcontents - -\section{Zeitstempel} - -Die deutsche Übersetzung wurden zum letzten Mal am -\texttt{\etocDEDEdocdate} (Paketversion \texttt{\etocDEDEpkgversion}) geändert -(abgesehen von den organisatorischen Veränderungen). -Einige neuere Abschnitte bleiben auf Englisch. - -Dokumentation erzeugt von der Quelldatei mit dem Stempel -\texttt{\etocdtxtimestamp}. Die dokumentierte Paketversion ist -\texttt{\etocpkgversion} 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} @@ -10616,8 +6160,19 @@ Dokumentation erzeugt von der Quelldatei mit dem Stempel % plus de mark-up cependant \catcode`\~\z@ \footnotesize\normalfont\baselineskip10pt\relax - \def\v{\vskip\baselineskip v}% ajouté 2015/05/09; faudra trouver mieux. - \frenchspacing \obeyspaces \jf@xverbatim } +% 2022/08/30, I remove all "v"'s from version numbers. +% \def\v{\vskip\baselineskip v}% ajouté 2015/05/09; faudra trouver mieux. + \def\1{\vskip\baselineskip 1}% ajouté 2015/05/09; faudra trouver mieux. +% 2022/08/26, stop using \frenchspacing + % \frenchspacing +% 2022/08/26. I realized that rendering was broken, and finally identified +% the bad commit to be in LaTeX 2022/06/01 release. Its \obeyspaces not only +% makes the ascii32 \active but it also redefines it! Solution could be to +% actually use \obeyedspace in the definition of active space about 20 lines +% below but this would tie to LaTeX 2022/06/01 or later for building etoc.pdf + \catcode`\ \active % was \obeyspaces + \jf@xverbatim +} \begingroup \catcode `|=0 \catcode `[= 1 \catcode`]=2 @@ -10628,19 +6183,54 @@ Dokumentation erzeugt von der Quelldatei mit dem Stempel \def\endjfverbatim{} \newdimen\jfverbadim +\makeatother +\begin{multicols}{2} +\makeatletter \everypar{\leftskip\jfverbadim\bgroup \def\par{\egroup\jfverbadim\z@\@@par}% \def\jfverbaspace#1{\if\@sptoken\string#1\unskip\else\ \fi#1}} - +% +% see 2022/08/26 above note \begingroup\obeyspaces\def\x{\endgroup% \def {\ifvmode\advance\jfverbadim.5em\relax\else\expandafter\jfverbaspace\fi}}\x - \makeatother - -\begin{multicols}{2} \begin{jfverbatim} -v1.09e [2021/09/23]^ +1.09f [2022/08/30]^ + + No more shipping of a German translation of the documentation, + as it was last updated in April 2015. + + (etoc.pdf) User level commands hyperlink from their code source definitions + to their descriptions in the documentation part. Macros used in the code + source hyperlink to where they first got defined there. + + Wrap the \etocpartname (from etoc's package provided toc line style) + together with the part number in a potential common hyperlink. + + Try to sync the emulation of the global display style with KOMA-script + v3.37 (in particular regarding the noparskipfake KOMA toc feature). + + Improve documentation of some aspects under memoir class. + + Remove the \nonumberline token, even though empty, from the meaning of + \etocthename (KOMA-script classes). + + Add \etocimmediatedepthtag.toc to work around problems related to + \include (see user doc). Thanks to Norman Ramsey who reported the problem + and proposed a work-around in July 2016. Apologies for the somewhat longish + delay in incorporating it... + + Also add \etocimmediatesettocdepth.toc. + + Also add \etocimmediatetoccontentsline and its starred variant. + + Also add \etocimmediatesetlocaltop.toc. + + Fix an obscure bug (see source code comments) in the + \etocsetlocaltop.toc mechanism. + +~1.09e [2021/09/23]^ Needed (if etoc is used without hyperref) updates to internal macros to prepare for the upcoming LaTeX November @@ -10648,7 +6238,7 @@ v1.09e [2021/09/23]^ Related updates to the user macro \etoctoccontentsline. -~v1.09d [2021/07/13]^ +~1.09d [2021/07/13]^ Some minor synching with tableof 1.4c. @@ -10660,11 +6250,11 @@ v1.09e [2021/09/23]^ Usage: \usepackage{etoc}\etockeeporiginal-tableofcontents, then however you must employ \etoctableofcontents, not \tableofcontents. -~v1.09c [2020/05/15]^ +~1.09c [2020/05/15]^ Syncs with KOMA-script deprecation of \iftocfeature. -~v1.09a, v1.09b [2019/11/17]^ +~1.09a, 1.09b [2019/11/17]^ Sync with memoir v3.7i which has a better location of the TOC hyperref anchor. The \etocaftertitlehook can now freely be @@ -10672,7 +6262,7 @@ v1.09e [2021/09/23]^ memoir class was preempted by etoc itself). For more details refer to the section "Compatibility with the memoir class". -~v1.09 [2019/03/09]^ +~1.09 [2019/03/09]^ New features: \etoclocaltop, \localtableofcontentswithrelativedepth. Thanks to Tony Roberts for feature request. @@ -10681,32 +6271,32 @@ v1.09e [2021/09/23]^ etoc now requires e-TeX (\numexpr, \unless). -~v1.08p [2018/07/04]^ +~1.08p [2018/07/04]^ Fixed bug surfacing in case of linktoc=page option of hyperref. Thanks to Denis Bitouzé for report (cf. https://github.com/ho-tex/hyperref/issues/65, https://github.com/dbitouze/yathesis/issues/61). -~v1.08o [2018/06/15]^ +~1.08o [2018/06/15]^ Fixed bug showing up if an unnumbered TOC entry starts with a brace, and document uses hyperref. Caused by a typo in a macro name at previous release. -~v1.08n [2018/02/23]^ +~1.08n [2018/02/23]^ Refactoring of core macros detecting \numberline and its variants. -~v1.08m [2018/02/07]^ +~1.08m [2018/02/07]^ Fix to 1.08k's introduced incompatibility with KOMA-script and tocbasic's \nonumberline. -~v1.08l [2017/10/23]^ +~1.08l [2017/10/23]^ Workaround an issue with Emacs/AUCTeX wrongly reporting about actually non-existent LaTeX errors, which was triggered by some @@ -10714,7 +6304,7 @@ v1.09e [2021/09/23]^ circumstances. -~v1.08k [2017/09/28]^ +~1.08k [2017/09/28]^ Adds \etocsetlocaltop.toc. See corresponding manual section for details. @@ -10733,7 +6323,7 @@ v1.09e [2021/09/23]^ the approach of "Another compatibility mode" section from manual. -~v1.08j [2017/09/21]^ +~1.08j [2017/09/21]^ Since 1.08a-2015/03/13 \etocname, \etocnumber, \etocpage contain, if hyperref is present and configured for using @@ -10754,7 +6344,7 @@ v1.09e [2021/09/23]^ of hyperref with its option "linktoc=page" got fixed. -~v1.08i [2016/09/29]^ +~1.08i [2016/09/29]^ This fixes an issue dating back to 1.08e-2015/04/17: under \etocchecksemptiness regime, some circumstances (such as @@ -10778,7 +6368,7 @@ v1.09e [2021/09/23]^ to the end of the log file and console output. -~v1.08h [2016/09/25]^ +~1.08h [2016/09/25]^ New functioning of \etocsetnexttocdepth: the tocdepth counter is modified only at the time of the table of contents, not before. @@ -10796,18 +6386,18 @@ v1.09e [2021/09/23]^ book class toc style, for easy customizability. -~v1.08g [2015/08/29]^ +~1.08g [2015/08/29]^ Downgraded to a mere info message the etoc-issued warning (relative to \settocdepth/\maxtocdepth) under class memoir. -~v1.08f [2015/04/28]^ +~1.08f [2015/04/28]^ Minor changes to the documentation. \etocsetlevel more economical. -~v1.08e [2015/04/17]^ +~1.08e [2015/04/17]^ The command \etocchecksemptiness tells etoc to not print, from that point on, the headings of the local tables of contents if @@ -10833,7 +6423,7 @@ v1.09e [2021/09/23]^ synonym to the earlier syntax \tableofcontents\ref{foo}. -~v1.08d [2015/04/09]^ +~1.08d [2015/04/09]^ Translation into German of the additions made to the documentation for the 1.08x series of releases. @@ -10841,7 +6431,7 @@ v1.09e [2021/09/23]^ Thanks to Christine Römer! -~v1.08c [2015/03/30]^ +~1.08c [2015/03/30]^ - removed a few unneeded \long from the code. @@ -10849,7 +6439,7 @@ v1.09e [2021/09/23]^ redefined by some language modules for babel or polyglossia. -~v1.08b [2015/03/18]^ +~1.08b [2015/03/18]^ Bug fixes: @@ -10866,12 +6456,12 @@ v1.09e [2021/09/23]^ mention of \etocarticlestyle and \etocbookstyle. -~v1.08a [2015/03/13]^ +~1.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 addition of the latter to etoc with 1.07f [2013/03/07]. The earlier robust commands \etocname etc... contained the hyperlink destination only in an unexpanded form. @@ -10881,7 +6471,7 @@ v1.09e [2021/09/23]^ manner. -~v1.08 [2015/03/10]^ +~1.08 [2015/03/10]^ \etocskipfirstprefix may now appear anywhere in the <start> part of a level style. @@ -10904,7 +6494,7 @@ v1.09e [2021/09/23]^ improved. -~v1.07n [2015/03/05]^ +~1.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 @@ -10915,7 +6505,7 @@ v1.09e [2021/09/23]^ order. -~v1.07m [2015/01/23]^ +~1.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 @@ -10926,7 +6516,7 @@ v1.09e [2021/09/23]^ New command \etocbeforetitlehook. New command \etocdisplay. -~v1.07l [doc of 2014/04/29]^ +~1.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 @@ -10938,7 +6528,7 @@ v1.09e [2021/09/23]^ grateful thanks to all! -~v1.07l [2014/04/22]^ +~1.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 @@ -10948,32 +6538,32 @@ v1.09e [2021/09/23]^ contrarily to the situation with the native tocvsec2. -~v1.07k [2014/03/06]^ +~1.07k [2014/03/06]^ Compatibility with package tocloft; and improved compatibility with class memoir. Novel TOC example in Overview. -~v1.07j [2013/12/03]^ +~1.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]^ +~1.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]^ +~1.07h [2013/10/16]^ New commands \etocdepthtag.toc, \etocsettagdepth, \etocobeydepthtags, \etocignoredepthtags. -~v1.07g [2013/10/13]^ +~1.07g [2013/10/13]^ New commands \etocsettocdepth, \etocsettocdepth.toc, \etocobeytoctocdepth, \etoc~-ignoretoctocdepth which @@ -11002,13 +6592,13 @@ v1.09e [2021/09/23]^ dvipdfmx which produces the smallest file). -~v1.07f [2013/03/07]^ +~1.07f [2013/03/07]^ New macros \etocthelinkedname, \etocthelinkednumber, \etocthelinkedpage, and \etocthelink. -~v1.07e [2013/03/01]^ +~1.07e [2013/03/01]^ Improvements in the package own line styles with regards to penalties and vertical spaces. @@ -11019,13 +6609,13 @@ v1.09e [2021/09/23]^ More such examples added 2013/03/03. -~v1.07d [2013/02/24]^ +~1.07d [2013/02/24]^ Minor code improvements and new documentation section ``Another compatibility mode''. -~v1.07b [2013/02/02]^ +~1.07b [2013/02/02]^ Removal of the \xspace from the macros \etocname, \etocnumber, \etocpage. @@ -11033,7 +6623,7 @@ v1.09e [2021/09/23]^ Additional examples in the documentation. -~v1.07 [2013/01/29]^ +~1.07 [2013/01/29]^ New commands: @@ -11050,7 +6640,7 @@ v1.09e [2021/09/23]^ addition to the tables of contents. -~v1.06 [2012/12/07]^ +~1.06 [2012/12/07]^ The standard macros \l@section etc... are modified only during the calls to \tableofcontents; they can thus be @@ -11059,7 +6649,7 @@ v1.09e [2021/09/23]^ by etoc for the TOCs typeset in compatibility mode. -~v1.05 [2012/12/01]^ +~1.05 [2012/12/01]^ \localtableofcontents replaces \tableofcontents~lowast (for compatibility with the memoir class). @@ -11068,7 +6658,7 @@ v1.09e [2021/09/23]^ classes. -~v1.04 [2012/11/24]^ +~1.04 [2012/11/24]^ A (possibly local) table of contents can be labeled: @@ -11080,7 +6670,7 @@ v1.09e [2021/09/23]^ \tableofcontents \ref{toc:1} -~v1.02 [2012/11/18]^ +~1.02 [2012/11/18]^ Initial version. @@ -11094,15 +6684,12 @@ v1.09e [2021/09/23]^ \small -\ifnum\ForEnglish=1 \section{Implementation} -\fi -\ifnum\ForDeutsch=1 -\section{Ausführung} -\fi - -\indent % !!!!!!!!!!!!!!!!! Lundi 09 mars 2015 à 09:32:22 +% ce \noindent est obsolète 2022/08/26 à cause des hooks à macrocode plus bas +% transférés depuis xint.dtx. Il est doublement obsolète car je rajoute un +% paragraphe de texte de toute façon avant le premier macrocode. +% \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 @@ -11113,47 +6700,252 @@ v1.09e [2021/09/23]^ % \def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax} % ce qui donne donc le \macro@font qui sera utilisé. - +% 26 septembre 2021 +\catcode1 14 % pour pouvoir utiliser ^^A, car je l'avais mis à \active \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 + code. To produce the documentation with source code included:\endgraf \ \ \ \ run etex on etoc.dtx to produce etoc.tex,\endgraf \ \ \ \ then thrice pdflatex on etoc.tex.\endgraf - \medskip - To produce the German documentation with source code included, run etex on - etoc.dtx to produce etoc-DE.tex, then edit etoc-DE.tex - to set \string\NoSourceCode\space to 0, and run pdflatex thrice on etoc-DE.tex.\endgraf }% + \fi +\end{document}} + +%%%%%%%%%%%% +% 26 août 2022, transfert depuis xint de hack de doc +% +% This worked remarkably well with almost no changes! Particularly for +% hyperlinking to the documentation part from the macro definitions! But +% also for internall cross-links in implementation part despite no usage +% there of any sectioning mark-up (so I don't need the \@sect hack, and +% related \csa, \csan, \csh, \cshn, \cshintitle, \cshnintitle macros). +% I noticed in passing that I never used any \begin{macro} mark-up here +% in the etoc.dtx. Perhaps I should and should one day look at what doc=V3 +% brings... +% +% See xint.dtx for comments, as I have removed most when copying. +\makeatletter +\def\odef #1{\expandafter\def\expandafter#1\expandafter}% needed from xintkernel + +%%% xint.dtx does \def\macro@font {\ttfamily }% (with a font allowing hyphenation) +%%% Our \macro@font has been defined earlier from \MacroFont in preamble and +%%% is \ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax +%%% etoc.dtx: see further below for how the * is handled in \macro@finish +\renewcommand\lowast{{\iflabelmacro@allowed\xintdocMacrocodeFallbackColorCmd\fi + \raisebox{-.25\height}{*}}} +\AddToHook{env/macrocode/begin}{\makestarlowast} +% https://github.com/latex3/latex2e/issues/563 +% (but I don't use sectioning commands in implementation part of etoc.dtx so far) +\AddToHook{env/macrocode/after}{\@nobreakfalse} +\AddToHook{env/macrocode/begin}{\partopsep0pt\relax} +\begingroup +\catcode`\|=\z@ \catcode`\[=\@ne \catcode`\]=\tw@ +\catcode`\{=12 \catcode`\}=12 +% Let % be active to use a color for it and gray-out +% comments left in code (there are few) +\catcode`\%=13 \catcode`\ =\active \catcode`\\=\active +|gdef|xmacro@code#1% \end{macrocode}[#1|end[macrocode]] +|endgroup +%%% 2022/08/27: for etoc.dtx try to really use comment color in comments +%%% this is not a complete solution, but enough for use case +\begingroup\catcode`\%=\active\catcode`\^^M 13 +\gdef%{\begingroup\color{macrocodecommentcolor}^^A + \let\xintdocMacrocodeFallbackColorCmd\@empty^^A + \@percentchar\odef +{\expandafter\endgroup +}}\endgroup +\begingroup\let\newcount\@gobble\@definecounter{CodelineNo}\endgroup +\def\theCodelineNo{\reset@font\scriptsize\arabic{CodelineNo}} +\def\theHCodelineNo{\the\value{section}.\the\value{CodelineNo}} +%%% not needed for etoc.dtx +%%% \def\xintMakePrivateLetters{\catcode`: 11 \catcode`? 11 \catcode`@ 11 +%%% \catcode`^ 11 \catcode`_ 11 } +%%% \def\xintexprMakePrivateLetters{\xintMakePrivateLetters \catcode`! 11 } +%%% \let\MakePrivateLetters\xintMakePrivateLetters +\definecolor{xintnamecolor}{RGB}{228,57,0} +\colorlet{verbcolor}{Maroon} +% +\colorlet{privatecommentcolor}{cyan} +\colorlet{macrocodecommentcolor}{gray} +\colorlet{macrocodenewmacrocolor}{verbcolor} +\colorlet{macrocodelinktouserdoccolor}{xintnamecolor}% and bold face +\colorlet{macrocodelinktosectioncolor}{DarkBlue}% and bold face +\colorlet{macrocodelinktocodelinecolor}{DarkBlue} +\colorlet{macrocodenoncscolor}{Green} +\def\xintdocMacrocodeFallbackColorCmd{\normalcolor} +\odef\init@crossref{\init@crossref% + \everypar{\refstepcounter{CodelineNo}% + \llap{{\xintdocMacrocodeFallbackColorCmd\theCodelineNo}\ + \hskip\@totalleftmargin}% + }% + \catcode`\%\active +}% +\def\scan@macro{% + % we do not insert it yet + % \special@escape@char + \step@checksum +% \ifscan@allowed + \let\macro@namepart\@empty + % we need this for reasons explained below + \let\macro@spacepart\@empty + \def\next{\futurelet\next\macro@switch}% +% \else \let\next\@empty \fi + \next +} +% unchanged: +% \def\macro@switch{\ifcat\noexpand\next a% +% \let\next\macro@name +% \else \let\next\short@macro \fi +% \next} +\def\short@macro#1{\special@escape@char#1} +% \def\macro@name#1{\edef\macro@namepart{\macro@namepart#1}% +% \futurelet\next\more@macroname} +% \def\more@macroname{\ifcat\noexpand\next a% +% \let\next\macro@name +% \else \let\next\macro@finish \fi +% \next} +\def\more@macroname{\ifcat\noexpand\next a% + \expandafter\macro@name + % we keep the \next for usage later and start filtering out of the way spaces + % this is caused by necessity of handling things such as \let<space>\foo\bar + % but also not be fooled by \let<space>#6\macro + \else \expandafter\macro@gatherspaces \fi + } +\def\macro@gatherspaces{% + \ifx\next\@xobeysp + \expandafter\macro@gatherspaces@i + \else + \expandafter\macro@finish + \fi}% +\def\macro@gatherspaces@i#1{% + \odef\macro@spacepart{\macro@spacepart#1}% #1 = active space + \futurelet\next\macro@gatherspaces}% +\newif\iflabelmacro@allowed +\newcounter{xintMacroCnt} +%%% pour l'instant pas relevant pour etoc, pas de mark-up par \subsection etc... +\def\xintimplabelprefix{src-} +\let\xintdoclabelprefix\empty +%%% next thing is used in xint.dtx in a hack of \@sect but we don't have so +%%% far sectioning mark-up in etoc.dtx implementation part +%%% \let\xintlabelprefix\xintimplabelprefix +\catcode`_ 11 \catcode`* 11 +\def\macro@finish{% + \iflabelmacro@allowed + \expandafter\in@\expandafter{\expandafter.\macro@namepart,}% + {.csname,.expandafter,.noexpand,.else,% + %.t,.w,.x,.y,.z,.XINT_x,.XINT_y,% + %.XINT_tmpa,.XINT_tmpb,.XINT_tmpc,.XINT_tmpd,.XINT_tmpe,% _ is letter here + %.XINT_expr_defbin_b,.XINT_expr_defbin_c,.XINT_expr_defbin_d,% + .empty,.space,}% + \ifin@ + {\xintdocMacrocodeFallbackColorCmd\special@escape@char\macro@namepart}% + \else + \ifcsname alreadydefined-\macro@namepart\endcsname + \hyperref[xintmacro-\macro@namepart]{\special@escape@char\macro@namepart}% + \else + % this will make a rather large number of macro names in the string pool... + \global\expandafter\let\csname alreadydefined-\macro@namepart\endcsname\@empty + \label{xintmacro-\macro@namepart}% + \stepcounter{xintMacroCnt}% + % try to link to a labeled reference in the user documentation (xint-all.pdf) + \ifcsname r@\xintdoclabelprefix\macro@namepart\endcsname + {\hypersetup{linkcolor=macrocodelinktouserdoccolor}% + \hyperref[\xintdoclabelprefix\macro@namepart]% + {\textbf{\special@escape@char\macro@namepart}}}% + \else + % try to link to a labeled section in implementation part + %% THIS BRANCH WILL NEVER BE USED IN etoc.dtx FROM ABSENCE OF + %% ASSOCIATED MARK-UP + \ifcsname r@\xintimplabelprefix\macro@namepart\endcsname + {\hypersetup{linkcolor=macrocodelinktosectioncolor}% + \hyperref[\xintimplabelprefix\macro@namepart]% + {\textbf{\special@escape@char\macro@namepart}}}% + \else + \textcolor{macrocodenewmacrocolor}{\textbf{\special@escape@char\macro@namepart}}% + \fi\fi + \fi \fi - \ifnum\ForDeutsch=1 - \texttt{\hyphenchar\font-1 - \parindent 0pt\rightskip 0.5cm minus 0.5cm \selectlanguage{ngerman}% - Diese Dokumentation wurde ohne Einbeziehung des Quellcodes - erstellt. - % Um - % die englische Dokumentation mit dem Quellcode zu produzieren, ist - % einzubeziehen: \endgraf - % \ \ \ \ kompilieren etex mit etoc.dtx, um etoc.tex zu - % produzieren, \endgraf - % \ \ \ \ dann dreimal pdflatex mit etoc.tex.\endgraf - \endgraf - Um die deutsche Dokumentation mit Einbeziehung des Quellcodes zu erstellen, - ist zu kompilieren etex mit etoc.dtx, um etoc-DE.tex zu - erzeugen, dann ist \string\NoSourceCode\space in etoc-DE.tex auf 0 zu - setzen, dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen.\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 }% - }% + \labelmacro@allowedfalse + \expandafter\in@\expandafter{\expandafter.\macro@namepart,}{.expandafter,}% + \ifin@ + \ifx\next\scan@macro\labelmacro@allowedtrue\fi \fi + \else % end of labelmacro@allowedtrue branch +%%% etoc.dtx adds complications to handle \newcommand* + \if0\ifx\next\scan@macro0\else\ifx\next\lowast0\else1\fi\fi + \expandafter\in@\expandafter{\expandafter.\macro@namepart,}% + {.def,.edef,.let,.gdef,.xdef,% + .chardef,.newif,.newtoks,.newcommand,}%.odef,.oodef,.fdef,}% + \ifin@\labelmacro@allowedtrue\fi + \fi + \ifcsname r@xintmacro-\macro@namepart\endcsname + \hyperref[xintmacro-\macro@namepart]{\special@escape@char\macro@namepart}% + \else + {\xintdocMacrocodeFallbackColorCmd\special@escape@char\macro@namepart}% + \fi \fi -\end{document}} + % \ifnot@excluded + % \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro@namepart}}% + % \@tempa + % \fi + \macro@spacepart +}% +\catcode`_ 8 \catcode`* 11 +%%% In order mainly to colorize #1, #2, etc... we do this rather +%%% non-economical thing of colorizing all of macrocode with +%%% the "non control sequence color", hence this means all +%%% control sequences will have their own color command... +%%% This is because when doing this in June 2022 for xint, I did +%%% not want to hack more doc.sty scanning process of tokens, +%%% but perhaps I should, it would be more economical. Kept as is +%%% when transferring to etoc.dtx 2022/08/26 +{\sbox0{\color{macrocodenoncscolor}\xdef\foo{\current@color}}} +\ifpdf + \edef\xintdoc@macrocode@pushcolor + {\pdfcolorstack\noexpand\@pdfcolorstack push{\foo}\relax} + \def\xintdoc@macrocode@popcolor{\pdfcolorstack\@pdfcolorstack pop\relax} +\else +\ifxetex + \edef\xintdoc@macrocode@pushcolor{\special{color push \foo}} + \def\xintdoc@macrocode@popcolor{\special{color pop}} +\else +\ifnum\Withdvipdfmx=1 + \edef\xintdoc@macrocode@pushcolor{\special{color push \foo}} + \def\xintdoc@macrocode@popcolor{\special{color pop}} +\fi\fi\fi +%%% 2022/08/26 \par added for etoc.dtx +\AddToHook{env/macrocode/before}{\xintdoc@macrocode@pushcolor\par} +\AddToHook{env/macrocode/end}{\xintdoc@macrocode@popcolor} +% let's use some more quiet color for links inside the code +\AddToHook{env/macrocode/begin}{\hypersetup{linkcolor=macrocodelinktocodelinecolor}} +% let code line numbers really be fully in the margin +\MacroIndent\z@ + +\makeatother + +Control sequences are mostly hyperlinks. When a user level command is +defined it hyperlinks to the user documentation with +\textbf{\textcolor{macrocodelinktouserdoccolor}{this colour}} (and bold +face); for other macro definitions +\textbf{\textcolor{macrocodenewmacrocolor}{this colour}} is used, and +bold face. It is not an hyperlink then. When a previously defined +macro is used it uses \textcolor{macrocodelinktocodelinecolor}{this + colour} and is then an hyperlink to the macro definition in the source +code. Comments have been configured +\textcolor{macrocodecommentcolor}{to be rendered in their own colour}, +and \textcolor{macrocodenoncscolor}{non commented-out and non-control + sequences tokens use this colour}. Other tokens use the fall-back +normal colour. + +Warning: the code author's brain reboots frequently, and more and more often. +Hence most comments are not for the general reader, they are for the author +himself and they document more the history of the package than its actual +functioning, because the historical evolution is the way the author can +remember and understand the code. There are a few precious isolated +paragraphs which may prove vaguely useful to people not the author. % 9 avril 2015 (1.08d) pour forcer indentation après macrocode % par un effet particulier si avant macrocode un enumerate, inefficient, @@ -11195,7 +6987,7 @@ v1.09e [2021/09/23]^ \fi \string\NeedsTeXFormat\string{LaTeX2e\string}\par \string\ProvidesPackage\string{etoc\string}\par -\noindent\space [\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]\par +\noindent\space [\etocpkgdate\space v\etocpkgversion\space\etocpkgdescription]\par \nointerlineskip \global\@inlabelfalse \endtrivlist @@ -11379,26 +7171,29 @@ v1.09e [2021/09/23]^ % compared to earlier versions; this is in relation to changes done in % |\Etoc@etoccontentsline|. % -% |1.08i| as a |fourorthree| rather than as formerly a |sixorfive|. +% |1.08i 2016/09/29| has a |fourorthree| rather than as formerly a |sixorfive|. % % \LaTeX\ of November 2021 will have its |\contentsline| always grab four % arguments. So we must adjust |\Etoc@et@hop| et al., else usage of \etoc % without hyperref will be broken. Done at |1.09e 2021/09/23|. % -% Side note to myself: I see there is now a |\@gobblethree| in latex.ltx and -% I wonder since when. No time to lose on checking that. +%^^A Side note to myself: I see there is now a |\@gobblethree| in latex.ltx and +%^^A I wonder since when. No time to lose on checking that. +%^^A Answer: 2020-02-27 ltdefns.dtx 1.5g |\@gobblethree|: Macro added % \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@gobblefourorthree#1#2#3#4{}} + \let\Etoc@gobblefourorthree\@gobblefour} {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}% \long\def\Etoc@gobblefourorthree#1#2#3{}}% -\@ifl@t@r\fmtversion{2021/11/15}{% +\@ifl@t@r\fmtversion{2021/11/15}% + {% \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}% \let\Etoc@gobblefourorthree\@gobblefour - }{}% + }% + {}% } % \end{macrocode} % |2015/03/08| One has to be careful about the |Etoc@end@<level>| user @@ -11833,7 +7628,7 @@ v1.09e [2021/09/23]^ % % |1.08j| fixes an old |\ifx #1\hyperlink@start| bug. % -% Potential (but rather exotic) brace removal problems wiped away at |1.08n|. +% Potential (but rather exotic) brace removal problems avoided at |1.08n|. % \begin{macrocode} \def\Etoc@getthepage {% \if1\ifEtoc@hyperref @@ -11881,14 +7676,21 @@ v1.09e [2021/09/23]^ % |1.08p| adds workaround for an extra brace pair inserted by hyperref % in case of |linktoc=page| option % \centeredline{\url{https://github.com/ho-tex/hyperref/issues/65}} +% +% |1.09f| examines also if next token in a space token; if it is we know +% that we are not with a hyperref-customized entry and that we do not have a +% numbered entry. We thus jump directly to \csa{Etoc@getnb@nohyp@nonbr}, so +% \csa{etocthename} is certainly not redefined and there is no risk of space +% gobbling and brace removal. This precaution is a bit academic though as +% code from previous release could derail (i.e. mis-interpret data) only in +% especially crafted circumstances. % \begin{macrocode} \def\Etoc@@getnb {% \Etoc@bracednamefalse - \ifx\Etoc@getnb@token\bgroup - \expandafter\Etoc@getnb@checkifbraced - \else - \expandafter\Etoc@getnb - \fi + \let\Etoc@next\Etoc@getnb + \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nohyp@nonbr\fi + \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@checkifbraced\fi + \Etoc@next } \def\Etoc@tworelax{\relax\relax} \def\Etoc@getnb@checkifbraced #1#2\etoc@ {% @@ -11939,6 +7741,9 @@ v1.09e [2021/09/23]^ % |1.08n| tries to handle reasonably the |\nonumberline| of KOMA-script. % If it expands to |\numberline{}|, \etoc will thus consider the line % numbered with an empty number. +% +% At |1.09f| complications to get rid of a KOMA-script |\nonumberline| +% even though its meaning is |\empty| then, but for case of delayed use. % \begin{macrocode} \def\Etoc@getnb@nohyp #1{% \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}% @@ -11948,31 +7753,54 @@ v1.09e [2021/09/23]^ \let\Etoc@next\Etoc@getnb@nohyp@nonbr \in@{#1}{\nonumberline}% \ifin@ - \ifx\nonumberline\empty\else\let\Etoc@next\Etoc@getnb@nohyp@nmbrd\fi - \expandafter\expandafter\expandafter\expandafter + \ifx\nonumberline\empty + \let\Etoc@next\Etoc@getnb@nohyp@nonumberline + \else + \def\Etoc@next{\expandafter\Etoc@getnb@nohyp@nmbrd}% + \fi \fi \fi \Etoc@next #1% -} +} \def\Etoc@getnb@nohyp@nmbrd #1#2#3\relax\relax\etoc@ {% \Etoc@global\Etoc@numbertrue \Etoc@global\def\etocthenumber {#2}% \Etoc@global\def\etocthelinkednumber {#2}% \ifEtoc@bracedname - \Etoc@global\def\etocthename {{#3}}% - \Etoc@global\def\etocthelinkedname {{#3}}% + \Etoc@global\def\etocthename{{#3}}% \else - \Etoc@global\def\etocthename {#3}% - \Etoc@global\def\etocthelinkedname {#3}% + \Etoc@global\def\etocthename{#3}% \fi + \Etoc@global\let\etocthelinkedname \etocthename } +% \end{macrocode} +% \csa{etocthename} and \csa{etocthelinkedname} already defined in +% \csa{Etoc@lxyz}, no need to update. +% \begin{macrocode} \def\Etoc@getnb@nohyp@nonbr #1\etoc@ {% - % \etocthename and \etocthelinkedname already defined in \Etoc@lxyz \Etoc@global\Etoc@numberfalse \Etoc@global\let\etocthenumber \@empty \Etoc@global\let\etocthelinkednumber \@empty } % \end{macrocode} +% Special KOMA branch: |#1| starts with |\nonumberline| which has here same +% meaning as |\empty|. It is in the current provisory definition of +% \csa{etocthename}. We get rid of this token, in case usage is delayed, +% to avoid improbable problems. +% \begin{macrocode} +\def\Etoc@getnb@nohyp@nonumberline #1\relax\relax\etoc@ {% + \Etoc@global\Etoc@numberfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\let\etocthelinkednumber \@empty + \ifEtoc@bracedname + \Etoc@global\expandafter\def\expandafter\etocthename + \expandafter{\expandafter{#1}}% + \else + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% + \fi + \Etoc@global\let\etocthelinkedname \etocthename +} +% \end{macrocode} % |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds % the |\Etoc@global|'s. % @@ -11990,6 +7818,9 @@ v1.09e [2021/09/23]^ % we are lazy because the problem with extra braces should not happen % in this branch (hyperref does not brace the hyperlink). So we ignore % the |\ifEtoc@bracedname| setting. +% +% At |1.09f| complications to get rid of a KOMA-script |\nonumberline| +% even though its meaning is |\empty| then, but for case of delayed use. % \begin{macrocode} \def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {% \edef\Etoc@tmp {{#3}}% @@ -11999,9 +7830,15 @@ v1.09e [2021/09/23]^ \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}% \futurelet\Etoc@hyp@getnb@token\Etoc@getnb@hyp@a #4\relax\relax\etoc@ } +% \end{macrocode} +% In case of an upfront brace, the sectioning heading is not numbered, so we +% can avoid potential brace removal problems by jumping now to the not +% numbered branch not hyperlinked branch; indeed \csa{etocthelinkedname} has +% already been defined with the |\hyperlink| so we can bail out. +% \begin{macrocode} \def\Etoc@getnb@hyp@a {% \ifx\Etoc@hyp@getnb@token\bgroup - \expandafter\Etoc@getnb@hyp@nonbr + \expandafter\Etoc@getnb@nohyp@nonbr \else \expandafter\Etoc@getnb@hyp@b \fi @@ -12011,11 +7848,24 @@ v1.09e [2021/09/23]^ \ifin@ \let\Etoc@next\Etoc@getnb@hyp@nmbrd \else - \let\Etoc@next\Etoc@getnb@hyp@nonbr +% \end{macrocode} +% If not numbered we can bail out to the "nohyp" branch, as +% \csa{etocthelinkedname} has already been defined with the |\hyperlink|. +% \begin{macrocode} + \let\Etoc@next\Etoc@getnb@nohyp@nonbr \in@{#1}{\nonumberline}% \ifin@ - \ifx\nonumberline\empty\else\let\Etoc@next\Etoc@getnb@hyp@nmbrd\fi - \expandafter\expandafter\expandafter\expandafter +% \end{macrocode} +% In case of presence of KOMA \csa{nonumberline} we need to expand it +% once, and then execute the numbered branch which will redefine +% \csa{etocthename} as well. But in case it is empty we will have to +% correct \csa{etocthename}, just to be perfect. +% \begin{macrocode} + \ifx\nonumberline\empty + \let\Etoc@next\Etoc@getnb@hyp@nonumberline + \else + \def\Etoc@next{\expandafter\Etoc@getnb@hyp@nmbrd}% + \fi \fi \fi \Etoc@next #1% @@ -12029,7 +7879,26 @@ v1.09e [2021/09/23]^ \Etoc@global\expandafter\def\expandafter\etocthelinkedname \expandafter{\expandafter\hyperlink \Etoc@tmp{#3}}% } -\let\Etoc@getnb@hyp@nonbr\Etoc@getnb@nohyp@nonbr +% \end{macrocode} +% Special KOMA branch: |#1| starts with |\nonumberline| which has here same +% meaning as |\empty|. We need to remove it. +% \begin{macrocode} +\def\Etoc@getnb@hyp@nonumberline #1\relax\relax\etoc@ {% + \Etoc@global\Etoc@numberfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\let\etocthelinkednumber \@empty + \ifEtoc@bracedname + \Etoc@global\expandafter\def\expandafter\etocthename + \expandafter{\expandafter{#1}}% + \else + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% + \fi + \Etoc@global\expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\etocthelinkedname + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter\hyperlink + \expandafter\Etoc@tmp\expandafter{\etocthename}}% +} % \end{macrocode} % |1.08| adds the |\Etoc@global|'s. % @@ -12070,11 +7939,10 @@ v1.09e [2021/09/23]^ \def\Etoc@getit@nohyp@getname #1\hspace\relax\etoc@ {% \ifEtoc@bracedname \Etoc@global\def\etocthename {{#1}}% - \Etoc@global\def\etocthelinkedname {{#1}}% \else \Etoc@global\def\etocthename {#1}% - \Etoc@global\def\etocthelinkedname {#1}% \fi + \Etoc@global\let\etocthelinkedname\etocthename } % \end{macrocode} % |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds @@ -12156,7 +8024,7 @@ v1.09e [2021/09/23]^ } % \end{macrocode} % |1.07m| moves the reading of the toc file At Begin Document. Needed for -% Babel activated characters. +% Babel activated characters.\par^^A extra \par needed to avoid empty line... % \begin{macrocode} \Etoc@toctoks {}% (superfluous, but for clarity) \AtBeginDocument{\IfFileExists{\jobname.toc} @@ -12872,7 +8740,7 @@ v1.09e [2021/09/23]^ {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} \def\etocabbrevpagename {p.~} % \end{macrocode} -% Versions earlier than |1.08b| (and since |v1.05 2012/12/01|) defined +% Versions earlier than |1.08b| (and since |1.05 2012/12/01|) defined % \csa{etocpartname} (for use by \etoc's own line styles) to expand to % \csa{partname}. But this didn't make sense in the context for example of % |babel| and |frenchb|, because \csa{frenchpartname} does things depending on @@ -12896,6 +8764,9 @@ v1.09e [2021/09/23]^ % were written at a early stage in the development of the % package. Actually I am not fully satisfied with these line styles. % +% Version |1.09f| wraps \csa{etocbookname}, respectively +% \csa{etocpartname}, in the book, resp. part, line styles inside a +% (potential) hyperlink together with the number. % \begin{macrocode} \def\etocdefaultlines{\Etoc@standardfalse % %% `book': @@ -12909,9 +8780,10 @@ v1.09e [2021/09/23]^ \leftskip \etocminustwoleftmargin \rightskip \etocminustworightmargin \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocbookname\enspace\etocnumber:\quad}{}\etocname - \baselineskip\etocbaselinespreadminustwo\baselineskip - \par}% + \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% \addpenalty\@M\addvspace{\etocsepminusone}% \endgroup} {}% @@ -12926,7 +8798,8 @@ v1.09e [2021/09/23]^ \leftskip \etocminusoneleftmargin \rightskip \etocminusonerightmargin \parfillskip \@flushglue - \vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}\etocname + \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}% + \etocname \baselineskip\etocbaselinespreadminusone\baselineskip \par}% \addpenalty\@M\addvspace{\etocsepzero}% @@ -13374,12 +9247,29 @@ v1.09e [2021/09/23]^ % |1.09c| (|2020/05/15|) does an update as KOMA-script has deprecated % |\iftocfeature|. Thanks to Bilel Omrani for report. I did not check % if cloning of KOMA code required some further updates. +% +% Finally |1.09f| added some such updates. % \begin{macrocode} -\ifdefined\Iftocfeature\def\etoc@Iftocfeature{\Iftocfeature}\else\def\etoc@Iftocfeature{\iftocfeature}\fi +\ifdefined\Iftocfeature + \def\etoc@Iftocfeature{\Iftocfeature}% +\else + \def\etoc@Iftocfeature{\iftocfeature}% +\fi \def\etocscrartclstyle{% \etocsettocstyle {\let\if@dynlist\if@tocleft - \def\@currext{toc}% added 1.07m 2015/01/23 +% \end{macrocode} +% Added at |1.07m 2015/01/23|. +% \begin{macrocode} + \def\@currext{toc}% +% \end{macrocode} +% |1.09f| adds this \csa{list@fname} definition hunk although +% \csa{listoftocname} is presumably always defined. Only to match +% closely KOMA-script code. +% \begin{macrocode} + \@ifundefined{listoftocname}% + {\def\list@fname{\listofname~toc}}% + {\expandafter\let\expandafter\list@fname\csname listoftocname\endcsname}% \etoc@Iftocfeature {toc}{onecolumn} {\etoc@Iftocfeature {toc}{leveldown} {} @@ -13387,10 +9277,10 @@ v1.09e [2021/09/23]^ {}% % \end{macrocode} % |1.07k|: next line to do as within current |scrartcl 2013/12/19 v3.12| -% KOMA-Script article class. +% KOMA-Script article class.^^A motivated \par in the env/macrocode/before hook % \begin{macrocode} \etoc@Iftocfeature {toc}{numberline}{\def \nonumberline {\numberline {}}}{}% - \tocbasic@listhead {\listoftocname}% + \expandafter\tocbasic@listhead\expandafter {\list@fname}% \begingroup \expandafter \expandafter \expandafter \endgroup \expandafter \ifx @@ -13401,12 +9291,50 @@ v1.09e [2021/09/23]^ \PackageInfo {tocbasic}% {character protrusion at toc deactivated}}% \fi +% \end{macrocode} +% |1.09f| adds this hunk with the noparskipfalse test to match current +% scrartcl (testing done with scrbook |2022/07/04 v3.37|). +% \begin{macrocode} + \etoc@Iftocfeature{toc}{noparskipfake}{}{% + \ifvmode \@tempskipa\lastskip \vskip-\lastskip + \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\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 + {% +% \end{macrocode} +% At |1.09f| I considered adding this \csa{BeforeClosingMainAux} hunk +% to the second argument of \csa{etocsettocstyle}-emulation of KOMA-script. +% But: +% \begin{itemize} +% \item there seems to be no interface to \csa{tocbasic@end@toc@file}, +% +% \item +% it defaults to issuing a \csa{par}, but we want etoc to still be able +% to produce other TOCs, possibly inline, and they should not be +% influenced by it and I don't want at this stage to add an interface +% to enable/disable and have to document it, +% +% \item +% the whole thing appears to me to be ill-conceived in so far as it +% sort of implies the \csa{tableofcontents} is used only once, as each +% instance will again add this \csa{tocbasic@end@toc@file} to end of +% toc file, which may thus end up being executed multiple times. +% \end{itemize} +% So rather than putting the thing in the |.toc| file, we will execute +% it here. This way it will not impact other TOCs typeset via etoc +% design facilities in the document. +% \begin{macrocode} +% \BeforeClosingMainAux +% {\addtocontents +% {toc}{\string\providecommand\string\tocbasic@end@toc@file{}% +% \string\tocbasic@end@toc@file}% +% }% + \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file + \csname tb@toc@after@hook\endcsname \csname tocbasic@@after@hook\endcsname}} \let\etocscrbookstyle\etocscrartclstyle \let\etocscrreprtstyle\etocscrartclstyle @@ -13528,16 +9456,35 @@ v1.09e [2021/09/23]^ \ifdefined\protected@file@percent\protected@file@percent\fi }% \fi} -\def\Etoc@addcontentsline@ #1#2#3% - {\@namedef{toclevel@#1}{#3}% - \addcontentsline {toc}{#1}{#2}} +\def\Etoc@addcontentsline@ #1#2#3{% + \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}% +} \DeclareRobustCommand*{\etoctoccontentsline} {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} % \end{macrocode} +% |1.09f| adds \csa{etocimmediatetoccontentsline}. +% \begin{macrocode} +\def\Etoc@addtocontents@immediately#1#2{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addtocontents{#1}{#2}% + \endgroup +} +\def\Etoc@addcontentsline@@immediately#1#2#3{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addcontentsline@{#1}{#2}{#3}% + \endgoroup +} +\DeclareRobustCommand*{\etocimmediatetoccontentsline} + {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}} +% \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 +% (|1.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). % @@ -13587,6 +9534,23 @@ v1.09e [2021/09/23]^ {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% } % \end{macrocode} +% |1.09f| adds \csa{etocimmediatesettocdepth.toc}. +% \begin{macrocode} +\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately} +\def\Etoc@set@toctocdepth@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +} +% \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 @@ -13598,6 +9562,19 @@ v1.09e [2021/09/23]^ % \begin{macrocode} \def\etocdepthtag #1#{\Etoc@depthtag } % \etocdepthtag.toc {name} \def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +% \end{macrocode} +% |1.09f| adds \csa{etocimmediatedepthtag.toc}. This can serve in some +% circumstances, see user documentation. Apologies for long delay to Norman +% Ramsey who reported problem and his fix in July... 2016! +% \begin{macrocode} +\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately } +\def\Etoc@depthtag@immediately #1{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc}{\protect\etoc@depthtag {#1}}% + \endgroup +} \def\etocignoredepthtags {\let\etoc@depthtag \@gobble } \def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } \def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% @@ -13700,6 +9677,23 @@ v1.09e [2021/09/23]^ {\addtocontents {toc} {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}% }% +% \end{macrocode} +% |1.09f| adds \csa{etocimmediatesetlocaltop.toc}. +% \begin{macrocode} +\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}% +\def\Etoc@set@localtop@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +}% \def\etoc@setlocaltop #1{% \global\let\Etoc@level #1% \Etoc@skipthisonefalse @@ -13737,7 +9731,23 @@ v1.09e [2021/09/23]^ \fi \fi \fi - \Etoc@next{\Etoc@doends\Etoc@dobegins}% +% \end{macrocode} +% At |1.09f| the |\global\Etoc@skipprefixfalse| is added. This fixes a +% weird problem that an |\etocskipfirstprefix| from this level (which a priori +% only serves to delimit the local contents) impacted (in the global TOC for +% example) the rendering of the first finer subsequent heading. Not resetting +% the boolean was an oversight, and it shows in context of the package +% built-in level styles as they do use |\etocskipfirstprefix|. But this also +% stresses that the name of the macro is a bit of a misnomer, yes it serves to +% delimit local table of contents, but really it is implemented as a ghost of +% a sectioning unit which does have an impact (on the global TOC or local TOCs +% from encompassing levels), as it triggers when encountered the \marg{finish} +% portions of previous finer levels (and the \marg{finish} code of its own +% level will be executed sooner or later), and the \marg{start} code of +% subsequent finer levels (as well as its own \marg{start} code at least once, +% depending on how levels are nested). +% \begin{macrocode} + \Etoc@next{\Etoc@doends\Etoc@dobegins\global\Etoc@skipprefixfalse}% }% % \end{macrocode} % |1.07h|. In order for the |.toc| file to be usable without error even @@ -13771,25 +9781,6 @@ v1.09e [2021/09/23]^ \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{3528}% - -\csname check@checksum\endcsname \Finale %% %% End of file `etoc.dtx'. |