From 3603d66ecbc122dc0b287c5cebde72beafeba67c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 29 Apr 2014 21:48:39 +0000 Subject: etoc (29apr14) git-svn-id: svn://tug.org/texlive/trunk@33751 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/etoc/etoc.dtx | 5030 ++++++++++++++++++++++++-- Master/texmf-dist/source/latex/etoc/etoc.ins | 53 +- 2 files changed, 4676 insertions(+), 407 deletions(-) (limited to 'Master/texmf-dist/source/latex/etoc') diff --git a/Master/texmf-dist/source/latex/etoc/etoc.dtx b/Master/texmf-dist/source/latex/etoc/etoc.dtx index 5254557876c..f6f180e378e 100644 --- a/Master/texmf-dist/source/latex/etoc/etoc.dtx +++ b/Master/texmf-dist/source/latex/etoc/etoc.dtx @@ -1,16 +1,46 @@ -% -*- coding: iso-latin-1; time-stamp-format: "%02d-%02m-%:y %02H:%02M:%02S %Z" -*- -%<*none> -\def\doctimestamp {Time-stamp <22-04-2014 21:52:47 CEST>} -% -%<*!package> -\def\jfbpkgname {etoc} \def\jfbpkgdate {2014/04/22} \def\jfbpkgversion {v1.07l} -\def\jfbpkgdescription {Completely customisable TOCs (jfB)} -% +% -*- coding: utf-8; time-stamp-format: "%02d-%02m-%:y %02H:%02M:%02S %Z" -*- %% %% Package: etoc -%% Version: 2014/04/22 v1.07l -%% Copyright (C) 2012-2013-2014 by Jean-Francois Burnol +%% Version: 1.07l (2014/04/22) +%% License: LPPL 1.3c or later (see etoc.dtx for more information) +%% Copyright (C) 2012-2013-2014 Jean-Francois Burnol +%% Copyright (C) 2014 Christine Roemer +%% and collaborators for the translation into German of the documentation %% +% (repeated below in \etocLicense macro and must be manually updated there) +%<*insfile> +\def\etocpkgdate {2014/04/22} +\def\etocpkgversion {v1.07l} +\def\etocpkgdescription {Completely customisable TOCs (jfB)} +% +%<*none> +{\def\doctimestamp {Time-stamp: <29-04-2014 12:05:48 CEST>}% + % needs a colon : after Time-stamp for emacs automatic updating of + % time-stamp and must be among first eight lines + \def\getdtxtimestamp #1 <#2 #3 #4>{#2 at #3 #4}% + \def\getdocdate #1 <#2-#3-#4 #5>{#4/#3/#2}% + \xdef\etocdtxtimestamp {\expandafter\getdtxtimestamp\doctimestamp }% + \xdef\etocdocdate {\expandafter\getdocdate\doctimestamp }}% +% Now the date and version which are specific to the German translation. +% Replace \let by suitable \def's in case this lags behing English version. +\let\etocDEdocdate \etocdocdate % currently 2014/04/29 +\let\etocDEpkgdate \etocpkgdate % currently 2014/04/22 +\let\etocDEpkgversion\etocpkgversion % currently 1.07l +% Definiton of \etocLicense, in order to have it here and not have to maintain +% a copy elsewhere. Must be compatible with all manners of compiling etoc.dtx. +% (copyright lines from top of file must be repeated here) +\begingroup + \long\def\firstofone #1{#1}\catcode1=14\catcode2=0 + \catcode`\%=12\catcode`\_=12\endlinechar13\catcode13=13 ^^A + \catcode32=13\catcode`\\=12^^Brelax^^A +^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A +{% Package: etoc +% Version: 1.07l (2014/04/22) +% License: LPPL 1.3c or later +% Copyright (C) 2012-2013-2014 Jean-Francois Burnol +% Copyright (C) 2014 Christine Roemer +% and collaborators for the translation into German of the documentation +% % This Work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3c of this license or (at your option) any later @@ -21,12 +51,15 @@ % and version 1.3 or later is part of all distributions of % LaTeX version 2005/12/01 or later. % -% This Work has the LPPL maintenance status Author-Maintained. -% -% The Author of this Work is Jean-Francois Burnol . +% The Authors of this Work are: +% Jean-Francois Burnol for the source code and +% English documentation, and +% Christine Roemer and collaborators +% for the translation into German of the documentation. % -% This Work consists of the main source file etoc.dtx and the -% derived files etoc.sty, etoc.ins, etoc.tex, etoc.dvi, etoc.pdf +% This Work consists of the main source file etoc.dtx and the derived +% files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, etoc.pdf, etoc-DE.pdf, +% etoc.dvi, etoc-DE.dvi. % % Extraction of the package (.sty) and driver (.tex) files: % - if etoc.ins is present: tex etoc.ins @@ -34,7 +67,8 @@ % % It is also possible to run latex/pdflatex directly on etoc.dtx % -% At least three ways to produce etoc.pdf: +% At least three ways to produce etoc.pdf (method (3) is preferred): +% % (1) latex etoc.dtx (three times), then dvips, then ps2pdf % (2) pdflatex etoc.dtx (three times) % (3) latex etoc.tex (three times), then dvipdfmx @@ -43,64 +77,118 @@ % Options can be set in etoc.tex: % - scrdoc class options (paper size, font size, ...) % - with or without source code, -% - with dvipdfmx or with latex/pdflatex. +% - with dvipdfmx or with latex+dvips or pdflatex. % -% Installation: +% To produce etoc-DE.pdf (German documentation) run tex on etoc.ins +% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +% latex (thrice) then dvipdmx, or set first to 0 \Withdvipdfmx in +% etoc-DE.tex to allow compilation with pdflatex. % -% etoc.sty->TDS:tex/latex/etoc/etoc.sty -% etoc.dtx->TDS:source/latex/etoc/etoc.dtx -% etoc.pdf->TDS:doc/latex/etoc/etoc.pdf +% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, +% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. % -% etoc.tex, etoc.ins, etoc.aux, etoc.toc, etc... may be discarded +% Installation: % -%<*none> +% 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 +% +% The other files may be discarded. +}}% \iffalse % -%<*driver>---------------------------------------------------------------------- +%<*tex>------------------------------------------------------------------------- %% run latex thrice on this file etoc.tex then dvipdfmx on etoc.dvi -%% to produce the documentation etoc.pdf, with source code included. +%% to produce the documentation etoc.pdf, with source code included. %% -%% customize as desired the class options and the two toggles below. +%% possible dvipdfmx warnings (due to hyperlinks extending over page +%% breaks) may be ignored, but in case of a too old dvipdfmx, it may +%% be preferable to use pdflatex. Set \Withdvipdfmx to 0 first. %% -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{\jfbpkgname.tex}% - [\jfbpkgdate\space\jfbpkgversion\space\jfbpkgdescription]% -\PassOptionsToClass{a4paper,fontsize=11pt,twoside}{scrdoc} -\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex/pdflatex, rather. +\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex \chardef\NoSourceCode 0 % replace 0 by 1 for the doc *without* the source code +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile {etoc.tex}[Driver for etoc documentation]% +\PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc} +\PassOptionsToPackage {german,english}{babel} +\chardef\ForEnglish 1 % (can NOT be both 1..) +\chardef\ForDeutsch 0 % +\input etoc.dtx +%%% Local Variables: +%%% mode: latex +%%% End: +%------------------------------------------------------------------------- +%<*DEtex>----------------------------------------------------------------------- +%% run latex thrice on this file etoc-DE.tex then dvipdfmx on etoc-DE.dvi +%% to produce the German documentation etoc-DE.pdf (without source code). +%% +%% possible dvipdfmx warnings (due to hyperlinks extending over page +%% breaks) may be ignored, but in case of a too old dvipdfmx, it may +%% be preferable to use pdflatex. For this set \Withdvipdfmx to 0. +%% +%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +%% mit dvipdfmx ist \Withdvidpdfmx auf 0 zu setzen, dann ist pdflatex +%% dreimal mit etoc-DE.tex laufen zu lassen. +%% +\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex +\chardef\NoSourceCode 1 % replace 1 by 0 for the doc *with* the source code +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile {etoc-DE.tex}[Driver for etoc German documentation]% +\PassOptionsToClass {a4paper,fontsize=11pt,twoside,ngerman}{scrdoc} +\PassOptionsToPackage {english,german}{babel} +\chardef\ForEnglish 0 % (can NOT be both 1..) +\chardef\ForDeutsch 1 % \input etoc.dtx %%% Local Variables: %%% mode: latex %%% End: -%---------------------------------------------------------------------- +%----------------------------------------------------------------------- %<*insfile>--------------------------------------------------------------------- -%% Run tex on this file to extract etoc.sty and etoc.tex from etoc.dtx +%% Run tex on this file to extract from etoc.dtx: +%% etoc.sty, etoc.tex, etoc-DE.tex %% -%% At least three ways to produce etoc.pdf: +%% At least three ways to produce etoc.pdf (method (3) is preferred): %% (1) latex etoc.dtx (three times), then dvips, then ps2pdf %% (2) pdflatex etoc.dtx (three times) %% (3) latex etoc.tex (three times), then dvipdfmx %% %% Method (3) produces the smallest pdf files. -%% Options can be set in etoc.tex: +%% Options can be set in etoc.tex (and etoc-DE.tex): %% - scrdoc class options (paper size, font size, ...) %% - with or without source code, %% - with dvipdfmx or with latex/pdflatex. %% -%% 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 +%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins +%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +%% latex (thrice) then dvipdmx, or edit the suitable toggle in +%% etoc-DE.tex to allow compilation to proceed with pdflatex. +%% +%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, +%% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. +%% +%% Installation: +%% +%% etoc.sty ->TDS:tex/latex/etoc/etoc.sty +%% etoc.dtx ->TDS:source/latex/etoc/etoc.dtx +%% etoc.pdf ->TDS:doc/latex/etoc/etoc.pdf +%% etoc-DE.pdf ->TDS:doc/latex/etoc/etoc-DE.pdf %% \input docstrip.tex \askforoverwritefalse -\def\jfbpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% -\string\ProvidesPackage{\jfbpkgname}^^J% -\space[\jfbpkgdate\space\jfbpkgversion\space\jfbpkgdescription]}% +\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% +\string\ProvidesPackage{etoc}^^J% +\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% \generate{\nopreamble -\file{\jfbpkgname.tex}{\from{\jfbpkgname.dtx}{driver}}% -\usepreamble\jfbpkgpreamble -\file{\jfbpkgname.sty}{\from{\jfbpkgname.dtx}{package}}}% +\file{etoc.tex}{\from{etoc.dtx}{tex}}% +\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% +\usepreamble\etocpkgpreamble +\file{etoc.sty}{\from{etoc.dtx}{package}}}% \catcode32=13\relax% active space \let =\space% \Msg{************************************************************************} @@ -111,7 +199,8 @@ \Msg{* etoc.sty} \Msg{*} \Msg{* To produce the documentation run latex thrice on file etoc.tex} -\Msg{* and then run dvipdfmx on file etoc.dvi} +\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.} +\Msg{* etoc-DE.dvi} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} @@ -121,10 +210,6 @@ %<*none>------------------------------------------------------------------------ \fi % -\def\getdtxtimestamp #1 <#2 #3 #4>{#2 at #3 #4} -\def\getdocdate #1 <#2-#3-#4 #5>{#4/#3/#2} -\edef\dtxtimestamp {\expandafter\getdtxtimestamp\doctimestamp } -\edef\docdate {\expandafter\getdocdate\doctimestamp } \chardef\noetex 0 \expandafter\ifx\csname numexpr\endcsname\relax \chardef\noetex 1 \fi \ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop @@ -134,15 +219,17 @@ \expandafter\ifx\csname ProvidesFile\endcsname\relax \chardef\extractfiles 0 % etex etc.. on etoc.dtx \else % latex/pdflatex on etoc.tex or on etoc.dtx - \ProvidesFile{\jfbpkgname.dtx}% - [`\jfbpkgname' source and documentation (\dtxtimestamp)]% + \ProvidesFile{etoc.dtx}% + [`etoc' source and documentation (\etocdtxtimestamp)]% \expandafter\ifx\csname Withdvipdfmx\endcsname\relax % latex run is on etoc.dtx - \chardef\extractfiles 1 % 1 = extract .sty, .ins, .tex and typeset + \chardef\extractfiles 1 % 1 = extract files and typeset manual \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips - \chardef\NoSourceCode 1 % - \PassOptionsToClass{a4paper,fontsize=11pt,twoside}{scrdoc}% - \else % latex run is on etoc.tex + \chardef\NoSourceCode 1 % do not include source code + \chardef\ForEnglish 1 \chardef\ForDeutsch 0 + \PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc}% + \PassOptionsToPackage {german,english}{babel}% + \else % latex run is on etoc.tex or etoc-DE.tex \chardef\extractfiles 2 % do not extract files \fi \fi @@ -154,11 +241,14 @@ \Msg{* To finish the installation you have to move the following^^J}% \Msg{* file into a directory searched by TeX:^^J}% \Msg{*^^J}% -\Msg{*\space\space\space\space \jfbpkgname.sty^^J}% +\Msg{*\space\space\space\space etoc.sty^^J}% \Msg{*^^J}% \Msg{* To produce the documentation with source code included run latex^^J}% \Msg{* thrice on file etoc.tex and then dvipdfmx on etoc.dvi^^J}% \Msg{*^^J}% +\Msg{* To produce the German documentation run latex thrice on file^^J}% +\Msg{* etoc-DE.tex and then dvipdfmx on etoc-DE.dvi^^J}% +\Msg{*^^J}% \Msg{* Happy TeXing!^^J}% \Msg{*^^J}% \Msg{********************************************************************^^J}% @@ -166,14 +256,15 @@ \begingroup \input docstrip.tex \askforoverwritefalse - \def\jfbpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% - \string\ProvidesPackage{\jfbpkgname}^^J% - \space[\jfbpkgdate\space\jfbpkgversion\space\jfbpkgdescription]}% + \def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% + \string\ProvidesPackage{etoc}^^J% + \space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% \generate{\nopreamble - \file{\jfbpkgname.ins}{\from{\jfbpkgname.dtx}{insfile}}% - \file{\jfbpkgname.tex}{\from{\jfbpkgname.dtx}{driver}}% - \usepreamble\jfbpkgpreamble - \file{\jfbpkgname.sty}{\from{\jfbpkgname.dtx}{package}}}% + \file{etoc.ins}{\from{etoc.dtx}{insfile}}% + \file{etoc.tex}{\from{etoc.dtx}{tex}}% + \file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% + \usepreamble\etocpkgpreamble + \file{etoc.sty}{\from{etoc.dtx}{package}}}% \endgroup \fi % end of file extraction \ifnum\extractfiles=0 % tex/etex/xetex/etc on etoc.dtx, files extracted, stop @@ -181,9 +272,7 @@ % no use of docstrip to extract files if latex run was on etoc.tex \ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi %------------------------------------------------------------------------------- -% twoside option à partir de version du 3 déc 2013 (1.07j) -% (2014/03/05:) cependant ce n'était pas le bon endroit pour le mettre, cf plus -% haut les \PassOptionsToClass. +% START OF USER MANUAL TEX SOURCE \documentclass[abstract]{scrdoc} \ifnum\NoSourceCode=1 \OnlyDescription\fi @@ -205,11 +294,11 @@ \makeatother \usepackage[T1]{fontenc} -\usepackage[latin1]{inputenc} +\usepackage[utf8]{inputenc} \usepackage[hscale=0.66,vscale=0.75]{geometry} \pagestyle{headings} -% January 2014. work-around a bug in KOMA 3.12: +% January 2014. work-around a bug in KOMA 3.12 (December 2013): \makeatletter \def\buggysectionmark #1{% KOMA 3.12 as released to CTAN December 2013 \if@twoside\expandafter\markboth\else\expandafter\markright\fi @@ -245,7 +334,7 @@ % pour les environnements verbatim -% uniformisé finalement, avec quelques exceptions, pour dtx du 3 déc 2013 +% uniformisé finalement, avec quelques exceptions, pour dtx du 3 déc 2013 \def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax} % mais \verb fait \ttfamily hardcoded!!! (contrairement au @@ -253,9 +342,9 @@ %---- % better \verb pour doc. -% 12 octobre 2013, importé de xint.dtx -% je rajoute pour { afin que truc{machin puisse avoir hyphénation -% retire \leavemmode, pas nécessaire pour emploi ici +% 12 octobre 2013, importé de xint.dtx +% je rajoute pour { afin que truc{machin puisse avoir hyphénation +% retire \leavemmode, pas nécessaire pour emploi ici \def\MicroFont{\ttfamily\hyphenchar\font45 } % modif de \do@noligs: \char`#1} --> \char`#1 } @@ -294,8 +383,8 @@ }% \def\@jfverb #1{\catcode`#1\active \lccode`\~`#1\lowercase{\def~{\egroup\unskip}}}% -% (\unskip ajouté le 14 octobre) -% \lowast est défini plus loin +% (\unskip ajouté le 14 octobre) +% \lowast est défini plus loin \begingroup \lccode`\~=`\* \lowercase{% @@ -310,8 +399,8 @@ % avril 2013 % ATTENTION ATTENTION ATTENTION Un changement de taille comme \small semble -% déclencher (peut-être) la relecture de t1txtt.fd et quoi qu'il en soit le -% \hyphenchar est REMIS à -1 ! +% déclencher (peut-être) la relecture de t1txtt.fd et quoi qu'il en soit le +% \hyphenchar est REMIS à -1 ! % update: 13 octobre 2013 % et pourtant tailles sont ok, donc au moins cette information est @@ -376,10 +465,11 @@ \definecolor{BLUE}{RGB}{0,0,255} \colorlet{niceone}{green!35!blue!75} -\usepackage[english]{babel} -\AtBeginDocument{ - \renewcommand\partname{Part} +\usepackage {babel} % german and english options have been passed to babel +\AtBeginDocument { + \ifnum\ForEnglish=1 \renewcommand\partname{Part}\fi \addto\captionsenglish{\renewcommand\partname{Part}} + \addto\captionsgerman {\renewcommand\partname{Teil}} } \usepackage{tikz} @@ -387,22 +477,22 @@ \usepackage{forest} % switched from tikz-qtree to forest 2013/09/09 % No problem with hyperlinks then, contrarily to tikz-qtree. -% NOTE: (12 octobre) -% - si compilation pour dvipdfmx, les arbres dans le dvi visualisés par xdvi +% NOTE: (12 octobre 2013) +% - si compilation pour dvipdfmx, les arbres dans le dvi visualisés par xdvi % montrent correctement les textes, mais rien au point de vue graphique, -% - si compilation pour dvips, l'arbre fait par forest est tout empilé, celui -% fait par tikz sans forest est presque correct, les labels débordent. -% Dans les deux cas, le résultat final dans le pdf est bon. -% grosso modo dans l'état actuel le pdf fait 250K (dvipdfmx), 340K (pdflatex) et +% - si compilation pour dvips, l'arbre fait par forest est tout empilé, celui +% fait par tikz sans forest est presque correct, les labels débordent. +% Dans les deux cas, le résultat final dans le pdf est bon. +% grosso modo dans l'état actuel le pdf fait 250K (dvipdfmx), 340K (pdflatex) et % 1M pour dvips+ps2pdf. -% 9 octobre 2013, je me décide à ne plus utiliser hidelinks, mais il est tout de -% même ajouté au .toc +% 9 octobre 2013, je me décide à ne plus utiliser hidelinks, mais il est tout de +% même ajouté au .toc \usepackage[pdfencoding=pdfdoc]{hyperref} \hypersetup{% linktoc=all,% why is the important stuff -%% bookmarksdepth=3,% in a *hard* to find README? anyhow +%% bookmarksdepth=3,% in a *hard* to find README? %% (but not needeed anymore now, v1.07g) breaklinks=true,% colorlinks,% @@ -426,8 +516,8 @@ pdfpagemode=UseOutlines} %-------- % 10 octobre 2013: \AtBeginDocument{\addtocontents{toc}{\protect\hypersetup{hidelinks}}} -% mieux que de passer hidelinks comme option à hyperref. -% Comme toutes les tocs sont faites dans un groupe, c'est très +% mieux que de passer hidelinks comme option à hyperref. +% Comme toutes les tocs sont faites dans un groupe, c'est très % bien. (et j'utilise \etocaftertitlehook pour autre chose) %-------- @@ -449,15 +539,17 @@ pdfpagemode=UseOutlines} %-------- % for "Another compatibility mode" (2013/02/21): % attention au 5 qui est hard-coded -% (pour 1.07f c'était 3, maintenant 5 pour 1.07g; et 4 maintenant pour 1.07h...) -% (et pour 1.07i.. à nouveau 3 faudra vraiment que je change cela) +% (pour 1.07f c'était 3, maintenant 5 pour 1.07g; et 4 maintenant pour 1.07h...) +% (et pour 1.07i.. à nouveau 3 faudra vraiment que je change cela) +% et maintenant =4 pour version de la doc du 28 avril 2014... faudra vraiment qu +% je mette un mécanisme plus robuste pour cette TOC. \makeatletter \newcommand*{\MyQuasiStandardTOC}[1]{% \begingroup \let\savedsectionline\l@section \let\savedsubsectionline\l@subsection \etocsetstyle{section}{} - {\ifnum\etocthenumber=3 + {\ifnum\etocthenumber=4 % <- check this if new sections added to user manual \etocsetstyle{subsection} {\par\nopagebreak\begingroup \leftskip1.5em \rightskip\@tocrmarg @@ -483,10 +575,10 @@ pdfpagemode=UseOutlines} %-------- % Statistics on sections and subsections in a part \thispartstats: % 2 mars 2013 -% cette version utilise des box, plutôt que des macros. +% cette version utilise des box, plutôt que des macros. % mais on ne peut plus alors changer de police etc... -% 11 octobre, je retire les \color{teal}. +% 11 octobre 2013, je retire les \color{teal}. \newsavebox\firstnamei \newsavebox\firstnumberi @@ -523,6 +615,7 @@ pdfpagemode=UseOutlines} \sbox{\lastnameii}{\etocname}% \sbox{\lastnumberii}{\etocnumber}} {} +\ifnum\ForEnglish=1 \etocsetstyle{section} {} {} @@ -543,7 +636,35 @@ pdfpagemode=UseOutlines} ``\unhbox\firstnameii{}'' and the corresponding number is ``\unhbox\firstnumberii''. The name of the last subsection is ``\unhbox\lastnameii{}'' and its number is - ``\unhbox\lastnumberii''.\fi }% + ``\unhbox\lastnumberii''.\fi } +\fi +%--------------------------------UEBERSETZUNG +\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 +%-------------------------------/UEBERSETZUNG \etocinline % october 10, 2013. \etocsetnexttocdepth {2}% @@ -554,13 +675,12 @@ pdfpagemode=UseOutlines} \newcommand\etoc{% -\texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}}{etoc}\xspace} + \texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}}{etoc}\xspace} -\DeclareRobustCommand\csa [1] - {{\ttfamily\hyphenchar\font45 \char`\\ #1}} +\DeclareRobustCommand\csa [1] {{\ttfamily\hyphenchar\font45 \char`\\ #1}} -\DeclareRobustCommand\csb [1] - {\hyperref[#1] {\ttfamily\hyphenchar\font45 \char`\\ #1}} +\DeclareRobustCommand\csb [1] + {\hyperref[#1] {\ttfamily\hyphenchar\font45 \char`\\ #1}} \newcommand\cshyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}} @@ -583,22 +703,22 @@ etoc-page etoc-skip-first-pre-fix etoc-num-ber etoc-ifnum-bered -etoc-thename -etoc-thenum-ber -etoc-thep-age +etoc-the-name +etoc-the-num-ber +etoc-the-page etoc-link etoc-the-linked-name etoc-the-linked-num-ber etoc-the-linked-page etoc-the-link -etoc-setlevel +etoc-set-level etoc-set-toc-depth etoc-set-next-toc-depth etoc-set-toc-depth etoc-obey-toc-toc-depth etoc-ig-nor-toc-depth etoc-depth-tag -etoc-set-tagdepth +etoc-set-tag-depth etoc-obey-depth-tags etoc-ig-nore-depth-tags etoc-stan-dard-dis-playstyle @@ -676,23 +796,59 @@ etoc-framed-mp-hook} % for illustration only. Not to be recommended in general. \setcounter{secnumdepth}{4} +%-------------------------------UEBERSETZUNG +\ifnum\ForDeutsch=1 + \renewcommand*{\etocabbrevpagename}{S.~} +\fi +%-------------------------------/UEBERSETZUNG + \begin{document}\rmfamily \thispagestyle{empty} -% 10 octobre 2013. +%------------------------------------------------------------------------------- +% THIS IS TO AVOID TEX BEING CONFUSED BY CONDITIONALS IN FALSE BRANCHES +\catcode1 0 +\catcode92 12 + +^^Aifnum^^AForEnglish=1 + + ^^Acatcode92 0 + +% START ENGLISH VERSION \bookmark[named=FirstPage,level=1]{Title page} \begin{center} {\normalfont\Large The \etoc package}\\ - \textsc{Jean-François Burnol}\par + \textsc{Jean-François Burnol}\par \footnotesize \ttfamily jfbu (at) free (dot) fr\\ - Package version: \jfbpkgversion\ (\jfbpkgdate) + Package version: \etocpkgversion\ (\etocpkgdate) \let\thefootnote\empty \footnote{Documentation generated from the source file - with timestamp ``\dtxtimestamp''.}\par + with timestamp ``\etocdtxtimestamp''.}\par \end{center} \setcounter{footnote}{0} +\etocdepthtag.toc {preamble} + +%---- +% MAIN TOC +% +\etocsettocdepth {subsubsection} +\etoctoclines +\etocmarkboth\contentsname +\etocmulticolstyle[1] + {\pdfbookmark[1]{Table of contents}{MAINTOC}% + \noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} + +\begingroup + \etocsetlevel{subsection}{3} + \etocsetlevel{subsubsection}{6} +\tableofcontents \label{toc:main} +\endgroup + +\phantomsection\addcontentsline{toc}{section}{\abstractname} \begin{abstract} The \etoc package gives to the user complete control on how the entries of the table of contents should be constituted @@ -728,12 +884,6 @@ etoc-framed-mp-hook} additionally to the standard |.toc| file. \end{abstract} - -\begingroup -\small - -\etocdepthtag.toc {preamble} - \section{Foreword} Popular packages dealing with TOCs include |tocloft|, |titletoc| @@ -769,30 +919,17 @@ manner: they are made available via the \csb{etocname}, |memoir| classes. Starting with release |1.07k| it is possible to use \etoc concurrently with package |tocloft|. -\endgroup -\clearpage +\section{License, installation} -%---- -% MAIN TOC -% -\etocsettocdepth {subsubsection} -\etoctoclines -\etocmarkboth\contentsname -\etocmulticolstyle[1] - {\pdfbookmark[1]{Table of contents}{MAINTOC}% - \noindent\bfseries\Large - \leaders\hrule height1pt\hfill - \MakeUppercase{Table of Contents}} +\begingroup\ttfamily\small\hyphenchar\font -1 + \parindent0pt + \obeyspaces\obeylines % +\etocLicense\endgroup -\begingroup - \etocsetlevel{subsection}{3} - \etocsetlevel{subsubsection}{6} -\tableofcontents \label{toc:main} -\endgroup -\etocsettocdepth {subsection} +\clearpage -% \clearpage +\etocsettocdepth {subsection} \etocdepthtag.toc{overview} @@ -1262,7 +1399,7 @@ The code: \etocdepthtag.toc {arbitrarily} \part{Arbitrarily many TOCs, and local ones too} -% 13 octobre, ceci était une section avant +% 13 octobre, ceci était une section avant \thispartstats @@ -1290,7 +1427,7 @@ current value of the |tocdepth| counter is obeyed. As an example the table of contents of \autoref{part:custom} is in a \hyperref[toc:d]{float} which appears \vpageref{toc:d}. -\begin{figure*}[ht!] +\begin{figure}[ht!] \centering \begingroup \etocstandardlines @@ -1302,11 +1439,11 @@ example the table of contents of \tableofcontents \label{toc:d} \ref{toc:c} \endgroup %% \centeredline{The original is \hyperref[toc:c]{there}.} -\end{figure*} +\end{figure} We used this: \begin{verbatim} -\begin{figure*}[ht!] +\begin{figure}[ht!] \centering \begingroup \etocstandardlines @@ -1317,7 +1454,7 @@ We used this: \hyperref[toc:c]{I am from far away}}}} \tableofcontents \label{toc:d} \ref{toc:c} \endgroup -\end{figure*} +\end{figure} \end{verbatim} Important: one should not use elsewhere \toc|\ref{toc:d}|. To clone again, one must use a reference to the original label: \toc|\ref{toc:c}|. @@ -1663,7 +1800,6 @@ breaks. Also, they do not worry about potential multi-column use. \endgroup \end{verbatim} -% \clearpage \begingroup \newlength{\tocleftmargin} @@ -1711,7 +1847,7 @@ We wrap it up in a \hyperref[toc:floating]{figure environment} showing up \vpageref{toc:floating}. -\begin{figure*}[htbp!]\centering +\begin{figure}[htbp!]\centering \colorlet{subsecnum}{black} \colorlet{secbackground}{green!30} \colorlet{tocbackground}{red!20!green!20} @@ -1763,21 +1899,27 @@ We wrap it up in a \hyperref[toc:floating]{figure environment} showing up \noindent\colorbox{secbackground} {\parbox{\linewidth}{% \vskip5pt - {\noindent\color{#1}#2\par\nointerlineskip} + {\noindent\color{#1}#2\par}\nointerlineskip \vskip3pt}}% \par\nointerlineskip} -\etocsetstyle{section}{\coloredstuff{blue} +% v1.07l on the occasion of traduction into German documentation: + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{blue} {\hfil \bfseries\large Contents of Part One\hfil}} {\vskip3pt\sffamily\small} -{\coloredstuff{blue}{\kern1cm\hbox to .5cm{\etocnumber\hss}% - \etocname\hfill -{\hbox to .5cm{\hss\etocpage\hskip.1cm}}}% +{\coloredstuff{blue} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}% + \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}% \vskip6pt} {} -% attention car \ref{toc:floating} fera référence au compteur de +% attention car \ref{toc:floating} fera référence au compteur de % toutes les toc, pas visibletoc. \etocframedstyle[1]{} @@ -1785,7 +1927,7 @@ We wrap it up in a \hyperref[toc:floating]{figure environment} showing up \vspace{-\baselineskip} \centeredline{|\tableofcontents \ref{toc:overview}| (\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})} -\end{figure*} +\end{figure} The actual design is not pre-built in \etoc; it uses its `framed' style with a background color. The frame borders have been set to have the same color as the @@ -1794,16 +1936,16 @@ is in use also for \hyperref[toc:clone]{this other toc}, and the reader is referred to its \hyperref[ssec:tocclone]{subsection} for the coding used. -% 11 octobre 2013 ceci était une section avant: -% (17 octobre, je m'aperçois qu'à cause des différents chgts, des +% 11 octobre 2013 ceci était une section avant: +% (17 octobre, je m'aperçois qu'à cause des différents chgts, des % sous-sections devenant des sections etc... \thisspecialstats ici ne % faisait pas du tout des statistiques; vaut mieux supprimer et faire -% simplement \localtableofcontents pour maintenir le même layout.) +% simplement \localtableofcontents pour maintenir le même layout.) -% les \clearpage sont embêtants; surtout si je prétends qu'on peut +% les \clearpage sont embêtants; surtout si je prétends qu'on peut % recompiler facilement sous d'autres conditions... -% on va plutôt faire un \vspace suffisant, cela sera un moindre mal +% on va plutôt faire un \vspace suffisant, cela sera un moindre mal \vspace{1cm} @@ -2038,8 +2180,6 @@ source file |etoc.dtx| for the details of how this is done. Another technique for doing this kind of things is explained in \autoref{ssec:statistics}. -%\clearpage - \begingroup \etocsetlevel{dummypart}{-1} @@ -2060,7 +2200,7 @@ Another technique for doing this kind of things is explained in \ifextraidone\else \noindent\hskip.7\linewidth \hbox to .2\linewidth -% février (ou janvier?) 2013 +% février (ou janvier?) 2013 % je modifie ici en ajoutant un \hss, pour compenser la plus petite % taille de txrm. Ok. {\hss\small\textsc{\bfseries Sections.\hss Page.}}\par\fi @@ -2087,7 +2227,7 @@ Another technique for doing this kind of things is explained in \newbox\forsectionnumbers \makeatletter -% 21 février 2013: je rajoute \color@begingroup et \color@endgroup +% 21 février 2013: je rajoute \color@begingroup et \color@endgroup \etocsetstyle{dummysection} {\setbox\forsectionnumbers=\hbox to .1\linewidth \bgroup\color@begingroup\hss\etocskipfirstprefix} @@ -2096,10 +2236,10 @@ Another technique for doing this kind of things is explained in {\etocnumber\color@endgroup\egroup % for reasons I do not quite understand, in some pdf viewers the dots % do not completely disappear if here \fboxsep0pt is used. - % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) - % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais - % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à - % « effacer ») + % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) + % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais + % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à + % « effacer ») \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par \ifextraiidone\else \begin{center}\bfseries Concord.\end{center} @@ -2121,41 +2261,50 @@ Another technique for doing this kind of things is explained in \tableofcontents - \makeatletter \def\adddummysection {\stepcounter{dummysection}% \addtocontents {toc}{\protect\contentsline {dummysection}{\protect\numberline{\thedummysection}}% {\the\dummypage }% - \ifEtoc@hyperref{\@currentHref }\fi}} + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} \def\adddummychapter #1{\stepcounter{dummychapter}% \advance\dummypage2 \addtocontents {toc}{\protect\contentsline {dummychapter}{\protect\numberline{\thedummychapter}#1}% {\the\dummypage }% - \ifEtoc@hyperref{\@currentHref }\fi}} + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} \def\adddummychapno #1{\advance\dummypage2 \addtocontents {toc}{\protect\contentsline {dummychapter}{#1}{\the\dummypage }% - \ifEtoc@hyperref{\@currentHref }\fi}} + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} \def\adddummypart #1{\stepcounter{dummypart}% \advance\dummypage4 \addtocontents {toc}{\protect\contentsline {dummypart}{\protect\numberline{\Roman{dummypart}}#1}% {\the\dummypage }% - \ifEtoc@hyperref{\@currentHref }\fi}} - + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} \makeatother \newcount\dummypage \dummypage-1 \adddummypart {} - \adddummychapno {Introductory} \newcount\tempcount @@ -2450,13 +2599,13 @@ which will be given the contents of |\treetok|. {\expandafter\the\expandafter #1#2}} -% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f -% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de -% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre +% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f +% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de +% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre % TikZ natif. -% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème -% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu +% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème +% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu % de sa syntaxe et de celle de TikZ). \newcommand*\PrepareSectionNode{% @@ -2467,7 +2616,7 @@ which will be given the contents of |\treetok|. % 7 mars: j'utilise maintenant \etocthelinkedname \newcommand*{\PrepareSubsectionNode}{% - \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy + \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy \appendtotok\tmptok\etocthelinkedname \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% } @@ -2491,14 +2640,14 @@ which will be given the contents of |\treetok|. % 11 octobre % forest ne veut pas @\the\treetok avec un \treetok vide, donc -% il faut lui donner une valeur par défaut. +% il faut lui donner une valeur par défaut. \treetok{[{run latex again}]} % 12 octobre % pour que varioref fonctionne bien, je dois mettre la \tableofcontents -% au plus près de l'environnement forest +% au plus près de l'environnement forest -\begin{figure*}[th!]\centering +\begin{figure}[th!]\centering \etocsetnexttocdepth{subsection} \tableofcontents \label{toc:forest}\ref{toc:overview} \hypersetup{hidelinks}% @@ -2516,7 +2665,7 @@ which will be given the contents of |\treetok|. @\the\treetok \end{forest} \centeredline{A table of contents displayed as a |forest| tree.} -\end{figure*} +\end{figure} The resulting tree has been put in a \hyperref[toc:forest]{float}, which @@ -2564,7 +2713,7 @@ code used for its production: % TOC yet. So we must give a safe default value to \treetok \treetok{[{run latex again}]} -\begin{figure*}[th!]\centering +\begin{figure}[th!]\centering \etocsetnexttocdepth{subsection} \tableofcontents \label{toc:forest}\ref{toc:overview} \hypersetup{hidelinks}% @@ -2580,13 +2729,13 @@ code used for its production: rectangle, thick, fill=cyan!5, inner sep=6pt, @\the\treetok \end{forest} -\end{figure*} +\end{figure} \end{verbatim} Why |\hypersetup{hidelinks}|? as explained in \autoref{ssec:hidelinks}, I prefer the links in TOCs not to be colorized, nor framed, so this document inserts a command -%\csa{hypersetup}\texttt{\{hidelinks\}} % ok pour hyphénation +%\csa{hypersetup}\texttt{\{hidelinks\}} % ok pour hyphénation %\csa{hypersetup}|{hidelinks}| % pas ok |\hypersetup{hidelinks}| % ok maintenant 12 octobre 2013 in the |.toc| file. But at the time the @@ -2698,7 +2847,7 @@ contents of this (or another) document part, only a \csa{sectiontok} and a {\treetok{\node {\hyperref[part:overview]{Overview}}}} {\global\appendtotok\treetok{ ;}} -\begin{figure*}[th!]\centering +\begin{figure}[th!]\centering \etocsetnexttocdepth{subsection} \tableofcontents \label{toc:molecule}\ref{toc:overview} \hypersetup{hidelinks}% @@ -2712,7 +2861,7 @@ contents of this (or another) document part, only a \csa{sectiontok} and a \the\treetok \end{tikzpicture} \centeredline{A table of contents as a ``molecule.''} -\end{figure*} +\end{figure} % Pour que \pageref fonctionne correctement, je dois mettre % le \tableofcontents dans la figure. @@ -2727,7 +2876,7 @@ which appears \vpageref[above]{toc:molecule}. Here is the code actually producing it: \begin{verbatim} -\begin{figure*}[th!]\centering +\begin{figure}[th!]\centering \etocsetnexttocdepth{subsection} \tableofcontents \label{toc:molecule} \ref{toc:overview} \hypersetup{hidelinks}% @@ -2740,7 +2889,7 @@ producing it: (\tikzparentnode) --(\tikzchildnode)}] \the\treetok \end{tikzpicture} -\end{figure*} +\end{figure} \end{verbatim} @@ -2829,8 +2978,8 @@ previous {\etocname} {.\hfil\par\endgroup\pagebreak[3]} -% 27 janvier 22:30 -% je définis les macros (non protégées) +% 27 janvier 2013 22:30 +% je définis les macros (non protégées) % \etocthename, \etocthenumber, \etocthepage \etocruledstyle[1]{\etocfontminusone\color{green}% @@ -2838,7 +2987,6 @@ previous \framebox[\linewidth] {\normalcolor\hss Contents of \autoref{part:linestyles}\hss}} -% \clearpage \localtableofcontents \label{toc:a} \section{The \csbhyp{etocsetstyle} command} @@ -3062,7 +3210,40 @@ Also provided with the similar goal: \csa{etocthelinkednumber}, added one to the page number) and \csa{etocthelink}\marg{linkname} which allows to make a link with an arbitrary name. -All these commands are fragile. +All these commands are fragile. + +Example of use\begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{p. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(a table of contents done as an inline + \texttt{enumitem} environment): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup + +\begin{verbatim} +Example of use\begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } +% (the above needed as \item closes a group in enumitem inline environments) + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{p. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(a table of contents done as an inline + \texttt{enumitem} environment): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup +\end{verbatim} \section{The \csbhyp{etocsetlevel} command} @@ -3201,8 +3382,6 @@ multi-lingual document, as the |babel| package writes to the |.toc| file the language changes occurring in the document. -% \clearpage - \etocdepthtag.toc {globalcmds} \part{Commands for the toc display style} @@ -3515,7 +3694,7 @@ beginning of this \autoref{part:globalcmds}. We now opt for a ``framed'' style, using the package default line styles and some colors added (it has been put in a float which appears -\vpageref{toc:b}).\footnote{inside the |figure*| environment and before the +\vpageref{toc:b}).\footnote{inside the |figure| environment and before the framed toc, which uses |multicols|, we added \csa{normalcolor} as work-around to an interaction bug (related to the \csa{color\{red\}} command we added to the |.toc| file) between |multicols|, |color| and the |figure| @@ -3548,11 +3727,11 @@ line styles and some colors added (it has been put in a float which appears the sections and subsections in this part. As it is put in a frame, it has to be small enough to fit on one page. It has the label |toc:b|.}}} -\begin{figure*}[ht!] +\begin{figure}[ht!] \centering \normalcolor % work-around to a bug involving color and multicols (and figure) \tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure*} +\end{figure} \endgroup \end{verbatim} @@ -3583,26 +3762,26 @@ line styles and some colors added (it has been put in a float which appears the sections and subsections in this part. As it is put in a frame, it has to be small enough to fit on one page. It has the label |toc:b|.}}} -\begin{figure*}[ht!] +\begin{figure}[ht!] \centering \normalcolor % work-around to a bug involving color and multicols (and figure) \tableofcontents \label{toc:b} \ref{toc:globalcmds} -\end{figure*} +\end{figure} \endgroup % Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le -% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder -% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle -% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie -% donc un problème d'interaction avec multicol là. à voir. Pas le temps +% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder +% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle +% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie +% donc un problème d'interaction avec multicol là. à voir. Pas le temps % maintenant. % 2013/10/14 -% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec +% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec % etoc: % http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure -% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor -% _avant_ le multicols à l'intérieur de figure* +% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor +% _avant_ le multicols à l'intérieur de figure \subsection{A (crazy) inline display} @@ -3612,6 +3791,28 @@ footnotes... This kind of style is suitable for a hyperlinked document, probably not for print! (although I like it, but my personal taste in many matters does not seem to be widely shared). +%%%% Note: 27 april 2014 + +%%%% except for a miraculous situation depending from the quantity of previous +%%%% material this TOC will have links extending accross pagebreaks, which +%%%% dvipdfmx does not know how to handle completely. Apart from that the output +%%%% is ok, thus no need to try seriously to avoid them. + +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; } + {\etocname} + {\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} + {, }{\etocname}{\/\upshape)} +\etocsettocstyle{Here is the inline table of contents. }{.\par} +\tableofcontents \label{toc:crazyinline} +\endgroup + The code used: \begin{verbatim} \begingroup @@ -3630,24 +3831,6 @@ The code used: \endgroup \end{verbatim} -\clearpage -\begingroup -\newsavebox{\forsubsections} -\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} -\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} -\etocsetstyle{subsection} - {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} - {; } - {\etocname} - {\end{lrbox}\footnote{\unhbox\forsubsections.}} -\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} - {, }{\etocname}{\/\upshape)} -\etocsettocstyle{Here is the inline table of contents. }{.\par} -\tableofcontents \label{toc:crazyinline} -\endgroup - - - \etocdepthtag.toc {custom} \part{Using and customizing \etoc} @@ -3855,7 +4038,6 @@ package. Customizing them goes through suitable \newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} \newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} \newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} -%%\newcommand*\etocseptwo{1ex plus .15ex minus .15ex} % modified in 1.07e \newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} \newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} @@ -3872,7 +4054,7 @@ package. Customizing them goes through suitable \newcommand*\etocbaselinespreadthree{.9} \newcommand*\etoctoclineleaders {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} -\newcommand*\etocabbrevpagename{p.~} +\newcommand*\etocabbrevpagename{p.~} % initial of "page" \newcommand*\etocpartname{\partname} % utilisateurs de frenchb: attention % car donne "partie" sans majuscule. \newcommand*\etocbookname{Book} % to be modified according to language @@ -4032,26 +4214,27 @@ the frame. \noindent\colorbox{secbackground} {\parbox{\linewidth}{% \vskip5pt - {\noindent\color{#1}#2\par\nointerlineskip} + {\noindent\color{#1}#2\par}\nointerlineskip \vskip3pt}}% \par\nointerlineskip} \etocsetstyle{section} - {\coloredstuff{white} +{\coloredstuff{white} {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of that other TOC (click me!)}\hfil}} - {\vskip3pt\sffamily\small} - {\coloredstuff{white}{\hbox to 1.5cm{\hss\etocnumber\hskip.2cm}% - \etocname\hfill\hbox{\etocpage\hskip.2cm}}\vskip6pt} - {} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} \etocframedstyle[1]{} \tableofcontents \label{toc:clone} \ref{toc:globalcmds} \endgroup \end{verbatim} -% \clearpage - \begingroup \definecolor{subsecnum}{RGB}{13,151,225} \definecolor{secbackground}{RGB}{0,177,235} @@ -4104,31 +4287,38 @@ the frame. \noindent\colorbox{secbackground} {\parbox{\linewidth}{% \vskip5pt - {\noindent\color{#1}#2\par\nointerlineskip} + {\noindent\color{#1}#2\par}\nointerlineskip \vskip3pt}}% \par\nointerlineskip} -\etocsetstyle{section}{\coloredstuff{white} +% v1.07l on the occasion of traduction into German documentation + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{white} {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of that other TOC (click me!)}\hfil}} {\vskip3pt\sffamily\small} -{\coloredstuff{white}{\hbox to 1.5cm{\hss\etocnumber\hskip.2cm}% - \etocname\hfill\hbox{\etocpage\hskip.2cm}}\vskip6pt} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } {} \etocframedstyle[1]{} -\begin{figure*}[ht!]\centering +\begin{figure}[ht!]\centering \tableofcontents \label{toc:clone} \ref{toc:globalcmds} -\end{figure*} +\end{figure} \endgroup The TOC has been put in a \hyperref[toc:clone]{float} which appears \vpageref{toc:clone}. The coding is a bit involved\footnote{and reveals the author's preference for the \TeX{} syntax...} as it does not use any -additional -package. Also, it was written at some early stage and I have not revised it -since. +additional package. Also, it was written at some early stage and I have not +revised it since. A better solution would be to use some package to set up a background color possibly extending accross pages, as the @@ -4140,9 +4330,6 @@ Regarding colors, generally speaking all color commands inside \etoc are initially defined to do nothing, and the choice to use or not colors is left to the user. - -%\clearpage - \etocdepthtag.toc {tips} \part{Tips} @@ -4352,8 +4539,6 @@ underneath the numbers contrarily to the code from lengths (now that this has been done once, it can be recycled easily) we get: -%\clearpage - \etocsetnexttocdepth {all} \begingroup \parindent 0pt @@ -4767,8 +4952,6 @@ groups. All TOCs are typeset inside groups. to run latex a certain number of times to let the produced document get its final appearance (at least twice).\par - - \clearpage \etocdepthtag.toc {code} @@ -4776,142 +4959,4178 @@ groups. All TOCs are typeset inside groups. \section{Timestamp} -This is the documentation as of \texttt{\docdate}, printed from the source file -with the time stamp \texttt{\dtxtimestamp}. The package version is -\texttt{\jfbpkgversion}, of \texttt{\jfbpkgdate}. - - -\section{License, installation} - -\begin{verbatim} -% Copyright (C) 2012-2013-2014 by Jean-Francois Burnol -% -% This Work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. This version of this license is in -% http://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of -% LaTeX version 2005/12/01 or later. -% -% This Work has the LPPL maintenance status Author-Maintained. -% -% The Author of this Work is -% Jean-Francois Burnol . -% -% This Work consists of the main source file etoc.dtx and the -% derived files etoc.sty, etoc.dvi, etoc.pdf, etoc.ins, etoc.tex -% -% Extraction of the package (.sty) and driver (.tex) files: -% - if etoc.ins is present: tex etoc.ins -% - without etoc.ins: tex etoc.dtx -% -% It is also possible to run latex/pdflatex directly on etoc.dtx -% -% At least three ways to produce etoc.pdf: -% (1) latex etoc.dtx (three times), then dvips, then ps2pdf -% (2) pdflatex etoc.dtx (three times) -% (3) latex etoc.tex (three times), then dvipdfmx -% -% Method (3) produces the smallest pdf files. -% Options can be set in etoc.tex: -% - scrdoc class options (paper size, font size, ...) -% - with or without source code, -% - with dvipdfmx or with latex/pdflatex. -% -% 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.tex, etoc.ins, etoc.aux, etoc.toc, etc... may be discarded -% -\end{verbatim} +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 -\begingroup -\renewcommand\lowast{{\normalsize\raisebox{-.4\height}{*}}} -\small +^^Aifnum^^AForDeutsch=1 -\section{Change history} + ^^Acatcode92 0 -\setlength{\columnsep}{\etoccolumnsep} -\makeatletter +% START GERMAN (DEUTSCH) VERSION +\bookmark[named=FirstPage,level=1]{Titelseite}% 10 octobre 2013. -\def\jfverbatim{\@beginparpenalty \predisplaypenalty - \parindent \z@ - \parfillskip \@flushglue - \parskip \tw@\p@ plus 1fil\relax - \let \do \@makeother \dospecials - \catcode`\~\z@ - \footnotesize\normalfont\baselineskip10pt\relax - \frenchspacing \obeyspaces \jf@xverbatim } +\begin{center} + {\normalfont\Large Das \etoc-Paket}\\ + \textsc{Jean-François Burnol}\par + \footnotesize \ttfamily jfbu (at) free (dot) fr\\ + Paketversion: \etocDEpkgversion\ (\etocDEpkgdate) \let\thefootnote\empty + \footnote{Original Dokumentationzeitstempel: ``\etocdtxtimestamp''.\par + Ãœbersetzt ins Deutsche von Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel + Büttner, Claudia Dahl, Christian Otto und Christine Römer (FSU Jena). + Hinweise zur Ãœbersetzung an Christine\_Roemer at t-online dot de.}\par +\end{center} +\setcounter{footnote}{0} -\begingroup -\catcode `|=0 \catcode `[= 1 \catcode`]=2 -\catcode `\{=12 \catcode `\}=12 \catcode`\\=12 -|long|gdef|jf@xverbatim#1\end{jfverbatim}[#1|end[jfverbatim]] -|endgroup +\etocdepthtag.toc {preamble} +%---- +% MAIN TOC +% +\etocsettocdepth {subsubsection} +\etoctoclines +\etocmarkboth\contentsname +\etocmulticolstyle[1] + {\pdfbookmark[1]{Inhaltsverzeichnis}{MAINTOC}% + \noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Inhaltsverzeichnis}} +\begingroup + \etocsetlevel{subsection}{3} + \etocsetlevel{subsubsection}{6} +\tableofcontents \label{toc:main} +\endgroup -\def\endjfverbatim{} +\phantomsection\addcontentsline{toc}{section}{\abstractname} +\begin{abstract} + Das \etoc-Paket gibt dem Nutzer lückenlose Möglichkeiten, die Einträge des + Inhaltsverzeichnis individuell über \emph{Name}, \emph{Nummer}, und + \emph{Seitenzahl} für jede gliedernde Einheit zu setzen. Dieses wird durch die + Definition von \emph{Zeilenstilen (line-styles)} für jede Unterteilungsstufe + des Dokuments realisiert. Das Paket bietet darüber hinaus seinen eigenen + Zeilenstile. Einfachere werden als Beispiele in dieser Dokumentation + angeboten. Die einfachste Nutzung wird durch die Verwendung der + Layout-Hilfsmittel, von Paketen die sich mit Listen-Umgebungen beschäftigen, + gewährt. + + In Hinsicht auf das \emph{globale Inhaltsverzeichnis} bietet \etoc\ + vordefinierte Stile, die auf der Mehrspaltenansicht mit optionalen, + unterstrichenen Titeln oder eingerahmten Inhalten basieren. + + Der \csa{tableofcontents}-Befehl kann beliebig mehrfach benutzt werden. Er hat + die Variante \csa{localtableofcontents}, welche die Inhaltsangabe 'local' zur + aktuellen Dokumenten-Sektion ausgibt. Eine Erweiterung der + \csa{label}/\csa{ref}-Syntax erlaubt die Reproduktion (mit anderem Layout) + einer lokalen Inhaltsangabe, die irgendwo anders im Dokument definiert wurde. + + Mit "`tiefen Tags"' erhält man noch feinere Kontrolle über jede Inhaltsangabe + und darüber, welche unterteilende Einheit angezeigt werden soll, oder nicht. + + Mit \emph{Kompatibilismus} wird die Formatierung der Dokumentklasse geerbt + (die womöglich von anderen Paketen verändert wurde); und die Formatierung, die + von der Dokumentklasse (die womöglich von anderen Paketen verändert wurde) + geerbt wird. + + Die Zuweisung von Ebenen zu den unterteilenden Einheiten kann zu jeder Zeit + geändert werden und \etoc kann dadurch in einer ziemlich generellen Weise + genutzt werden, um selbsterstellte 'Listen von' zu erzeugen. Keine + Zusatzdateien werden zusätzlich zu der Standard-|.toc|-Datei benutzt. +\end{abstract} -\newdimen\jfverbadim +\section{Vorwort} -\everypar{\leftskip\jfverbadim\bgroup - \def\par{\egroup\jfverbadim\z@\@@par}% - \def\jfverbaspace#1{\ifcat\noexpand#1\noexpand~\unskip\else\ \fi#1}} +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. -\begingroup\obeyspaces\def\x{\endgroup% -\def {\ifvmode\advance\jfverbadim.5em\relax\else\expandafter\jfverbaspace\fi}}\x +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. -\makeatother +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. -\begin{multicols}{2} -\begin{jfverbatim} -v1.07l [2014/04/22] +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. - fixes a bug with the 1.07k compatibility layer with tocloft which had broken - the 1.07k (sic) compatibility with memoir (yes, memoir class 1.07k testing - had been done before adding the tocloft thing to the source code . . . ). - Also, etoc when detecting tocvsec2 now checks if this is under the memoir - class, as then nothing special needs to be done to rescue \tableofcontents, - contrarily to the situation with the native tocvsec2. +\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. -v1.07k [2014/03/06] +\section{Lizenz, Installation} - compatibility with package tocloft; and improved compatibility with - class memoir. Novel TOC example in Overview. +\begingroup\ttfamily\small\hyphenchar\font -1 + \parindent0pt + \obeyspaces\obeylines +\etocLicense\endgroup -v1.07j [2013/12/03] - some issues with the documentation formatting (now two-sided) have been - addressed, and a novel documentation section ``Typesetting the TOC as a - table'' has been added. Very minor code change (\Etoc@readtoc). +\clearpage -v1.07i [2013/10/21] +\etocsettocdepth {subsection} - changes to the \etocmulticolstyle and \etocruledstyle codes - to lessen the risk of a page break after the title (in the one-column case). +\etocdepthtag.toc{overview} -v1.07h [2013/10/16] +\part{Ãœberblick}\label{part:overview} - new commands \etocdepthtag.toc, \etocsettagdepth, \etocobeydepthtags, - \etocignoredepthtags. +\thispartstats -v1.07g [2013/10/13] +\invisiblelocaltableofcontents \label{toc:overview} - new commands \etocsettocdepth, \etocsettocdepth.toc, - \etocobeytoctocdepth, \etoc~-ignoretoctocdepth which - emulate part of tocvsec2 functionality ; measures to - make tocvsec2 partially compatible with etoc. +\section{Muss ich Computerfreak sein, um \etoc benutzen zu können?} + +Nicht wirklich. Der einfachste Weg ist die Benutzung von +|enumerate|-Umgebungen mit den Anpassungsmöglichkeiten von +Paketen wie |enumitem|, \footnote{\url{http://ctan.org/pkg/enumitem}} +um von \etoc aus der |.toc|-Datei die abgerufenen Daten anzuzeigen. +Die Daten bestehen aus \emph{Name} (\csb{etocname}), \emph{Gliederungsnummer} +(\csb{etocnumber}) und \emph{Seitenzahl} (\csb{etocpage}). + +Dieses wird \hyperref[toc:a]{zu Beginn} von \autoref{part:linestyles} +gezeigt. Anspruchsvollere Beispiele würden anspruchsvollere +|enumitem|-Optionen benutzen. Man könnte nun sagen, dass der Nutzer +sich einige Anpassungen merken muss. Und das ist auch so, aber die +Syntax und Optionsbezeichnungen, die es zu behalten gilt, sind +in keinster Weise ähnlich. + +Die Methode wird \hyperref[sec:firstexample]{später} +(\autoref{sec:firstexample}) erklärt. Dafür ist ein wenig Wissen über +|\leftskip|, |\rightskip| usw. notwendig. Und eine Ausarbeitung , deren +Code kann man hier (\autoref{ssec:tocwithdepthtags}) finden, die Nachahmung des +Standardaussehens einer Inhaltsangabe. + +Wie Sie beim Lesen dieser Anleitung noch sehen werden, ist \etoc +ziemlich vielfältig (ganz besonders, weil es erlaubt, die Hierarchie jeder +unterteilenden Einheit des Dokuments zu re-definieren) und man kann damit +überraschende Effekte erreichen: \autoref{part:surprising} handelt davon. Mehr +davon gibt es noch in \autoref{part:tipsandtricks}. - new commands \etocsetnexttocdepth, \invisibletableofcontents, - \invisiblelocaltableofcontents. +\begin{framed} +\setcounter{mycounti}{0}% + \etocinline +\etocsetlevel{part}{1} +\etocsetlevel{chapter}{1} +\etocsetlevel{visibletoc}{0} +\etocsetstyle{visibletoc} + {} + {\stepcounter{mycounti}} + {} + {} +\etocsettocstyle{}{} +\etocsetnexttocdepth{0} +\tableofcontents +Ein ganz besonders wichtiger Aspekt von \etoc ist, dass es darauf ausgelegt ist, +viele Inhaltsangaben in dem selben Dokument zu erzeugen, \emph{Mit nur einer + |.toc|-Datei.} Die gegenwärtige Dokumentation enthält \arabic{mycounti} +sichtbare Inhaltsangaben (und ein paar unsichtbare). Sie benutzt dabei nur eine +|.toc|-Datei!\footnotemark{} Darum sollte man zweimal nachdenken, bevor man +manuell extra Befehle zu der |.toc|-Datei hinzufügt (siehe +\autoref{sec:addingtotoc}). +\end{framed} + +\footnotetext{Das Selbstzählen wurde durch eine Inhaltsangabe erreicht, die +in einen gerahmten Paragraphen eingesetzt wurde! \dots Die Technik für diese Art +von Effekt wird später erklärt.} + + +\subsection{Beschränkungen in der Benutzung von Listen-Umgebungen für +Inhalsangaben} +\label{ssec:limitations} + +Es gibt ein paar Einschränkungen für das Nutzen von Listen-Umgebungen +beim Setzen der TOCs. Eine davon liegt dem +Geltungsbereichsbeschränkungen der Umgebungen inne. Die |.toc|-Datei +könnte neben den Informationen zum Stil einige andere Befehle +beinhalten, die Probleme hervorrufen können +(\LaTeX -Umgebungen schaffen Gruppen.). + +Darum machen die eingebauten "`Zeilenstile"' (line styles), wie sie von \etoc +vorgeschlagen werden (die durch die \hyperref[toc:main]{Hauptinhaltsangabe} in +diesem Dokument gezeigt werden) keinen Gebrauch von Umgebungen. Tatsächlich +nutzt in dieser Gebrauchsanweisung nur die \hyperref[toc:a]{Inhaltsangabe} zu +Beginn von \autoref{part:linestyles} und in \autoref{toc:allsubsections} +e\texttt{numerate}-Umgebungen, um Zeilenstile anzugeben. + +\section{Zeilenstile und Stile der Inhaltsangabe (toc display style)} + +Eine Unterscheidung muss zwischen den \emph{Zeilenstilen}, +\emph{z.\,B.} der Art und Weise wie Namen, Kapitelnummern und +Seitenzahlen auf jedem Level angezeigt werden und dem +\emph{Inhaltsangabenstil} (mangels einer besseren Bezeichnung) +gemacht werden. Dieser sagt, wie die Titel gesetzt werden sollen, +ob oder nicht ein Eintrag in die |.toc|-Datei gemacht werden soll, +ob oder nicht der Inhalt mit mehreren Spalten gesetzt werden soll, +usw..., der letztere wird von \csa{etocsettocstyle} (oder einem +höherrangigen Befehl) geregelt. Das erste wird von +\csa{etocsetstyle} initialisiert. + +\subsection{\csbhyp{etocsetstyle} für den Zeilenstil} + +Das ist der Befehl, der \etoc sagt, was es mit \csa{etocname}, \csa{etocnumber}, +und \csa{etocpage} machen soll. Er hat fünf Pflichtargumente: Das erste ist der +Name der unterteilenden Einheit: Im Vorhinein bekannte Namen sind |book|, +|part|, |chapter|, |section|, |subsection|, |subsubsection|, |paragraph|, +|subparagraph| und viele weitere können anhand dem \csb{etocsetlevel}-Befehl +einem (numerischen) Level zugewiesen werden.\footnote{Mit der + \texttt{memoir}-Dokumentklasse kennt \etoc \texttt{Appendix} als + Kapitelüberschrift.} + + +%% Änderungen zur Ãœbersetzung ins Deutsche: +%% jf b has added here forgotten emphasized text for 2)&3) and +%% removed various \newline. +Die vier anderen Argumente von \csb{etocsetstyle} +spezifizieren: +1) \emph{Was zu tun ist, wenn dieses Level zuerst nach einem höheren + auftritt,} +2) \& 3) (Zwei Argumente, ein 'Präfix' und ein 'Inhalt') +\emph{Was zu tun ist, wenn ein neuer Eintrag dieses Typs gefunden wird,} +und 4) \emph{Das letzte Argument ist der Code, der ausgeführt + wird, wenn eine unterteilende Einheit von höherer Wichtigkeit wieder von oben + getroffen wird.} + + +\subsection{\csbhyp{etocsettocstyle} für den Stil der Inhaltsangabe} + +Der \csb{etocsettocstyle}-Befehl erlaubt es festzulegen, +was vor und nach den Zeileneinträgen eines Inhaltsverzeichnis +passieren soll, und im Speziellen wie die Titel ausgegeben +werden sollen. Er hat zwei Argumente. Das erste wird vor +der Inhaltsangabe ausgeführt (typischerweise wird es Inhalte +ausgeben und definiert passende Markierungen für die +Seitenüberschriften). Der Zweite wird nach der Inhaltsangabe +ausgeführt. + +\etoc bietet vier (anpassbare) höhere Inhaltsabgabenstile: +\csb{etocmulticolstyle}, \csb{etoctocstyle}, +\csb{etocruledstyle} und \csb{etocframedstyle}. +Alle nutzen das |multicol|-Paket mit standardmäßig zwei +Spalten (Einspaltenmodus kann durch das optionale Argument + |[1]| erreicht werden). + +Diese Befehle müssen entweder von \toc oder \localtoc gefolgt sein. + +\subsection{Kompatibilismus}\label{ssub:compat} +\label{etoctoclines} +\label{etocstandardlines} + +Vor den "`Zeilenstilen"' und den "`Inhaltsangabenstilen"' besteht +die Möglichkeit in den Kompabilitätsmodus zu wechseln, der die +Standardeinstellungen der Dokumentenklasse nimmt. +\footnote{Für den "`Inhaltsangabenstil"' überprüft \etoc, ob +es die Klassen kennt, wenn nicht, fällt es zur |article|-Klasse +zurück. Es wird auch überprüfen, ob \texttt{tocloft} die +Inhaltsangaben-Datei verändert hat.} +Dieses wir wie folgt aktiviert:\\ +\makebox[5.2cm][l]{\csb{etocstandardlines}} + |% `Zeileneinträge' wie ohne \usepackage{etoc}|\\ +\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}} + |% `Inhaltsstil' wie ohne \usepackage{etoc}| + +Wenn der Befehl \csa{etocsetstyle} \emph{noch nicht in der Präambel benutzt +worden ist}, wird das Paket in |\begin{document}| sitzen (in diesem +Kompatibilismus). Folglich sollte \csa{usepackage\{etoc\}} hoffentlich +nichts am Aussehen eines im Vorhinein vorhandenen Dokuments der Klassen +|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir| +ändern. + +Jede Benutzung von \csa{etocsetstyle} in der \emph(Präambel des Textkörpers) des +Dokuments schaltet den Kompabilitäsmodus für Zeilenstile aus, behält ihn aber +für den Inhaltsabgabenstil. + +Man kann ihn für Zeilenstile anhand von \csb{etocstandardlines} +wieder aktivieren. \csb{etoctoclines} reaktiviert Zeilenstile wie +Sie mit der Hilfe von \csa{etocsetstyle} definiert wurden, wenn deren +Gültigkeitsbereich nicht auf eine Gruppe oder eine Umgebung beschränkt +war. + +Der Befehl \csb{etocdefaultlines} setzt den Zeilenstil darauf zurück, +wie er intern von \etoc in \autoref{etocdefaultlines} beschrieben wurde. + +Sogar wenn \csb{etocsetstyle} benutzt wurde, bleibt der globale Stil +zu Beginn, wie er in der Dokumentenklasse definiert wurde (oder von dem +|tocloft| Paket). Man muss den Befehl \csb{etocsettocstyle} oder seine +Varianten setzen, um diesem Kompatibilitätsmodus auf dem +"`Inhaltsangebenstil"'-Level zu beenden. Er wird reaktiviert, +wenn \csb{etocstandarddisplaystyle} benutzt wird. + +\section{Ein erstes Beispiel} +\label{sec:firstexample} + +Hier sehen sie ein erstes Beispiel zur Beschreibung der Zeilenform. +Wir fügen die Quelldatei direkt nach dem Start von \autoref{part:overview} ein: + +\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|} +% +Dieses erstellt ein Label |toc:overview|, das wir von jeder Stelle im Dokument +benutzen können: +% +\centeredline{|\tableofcontents \ref{toc:overview}|} +% +Und da wir |\invisible...|,\footnote{Das ist eine Abkürzung, um die |tocdepth| + temporär auf |-3| zu setzen. Dieses sagt \etoc, die Inhaltsangabe und die + Ãœberschrift nicht auszugeben.} benutzt haben, existiert die lokale +Inhaltsangabe nur durch seine Klone anderswo im Dokument. + +Anhand von \csb{etocdefaultlines} oder dem Stil der Standard-Dokumentklasse, +anhand von \csb{etocstandardlines}, könnten wir auch die Zeilenform benutzen, +die von \etoc definiert wird. Hier waren wir jedoch ein wenig ehrgeiziger und +wollten unser eigenen Stil anlegen. Die Technik ist einfach: Jede Ãœberschrift +ist an sich ein eigener Paragraph, der sich über mehrere Zeilen erstrecken kann; +es ist für seinen |\leftskip| selbst verantwortlich. + +\begingroup +\parindent 0pt +\parfillskip 0pt +\leftskip 0cm +\rightskip 1cm +\etocsetstyle {section} + {} + {\leavevmode\leftskip 0cm\relax} + {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip .5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 1.5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocruledstyle[1]{\bfseries \Large Mein erstes \etoc: TOC von + \autoref{part:overview} (\nameref{part:overview})} +\tableofcontents \ref {toc:overview} +\endgroup + +Dieses ist ein einfaches Design, das keine Maßnahmen zum Zeilenumbruch +bereitstellt. Diese sollten zwischen Abschnitten und Unterabschnitten, etc. +unterbunden werden, da wir es nur für die Inhaltsangabe von diesem Abschnitt +nutzen. Durch die Abschnitte als höchste Ebene entstand keine Notwendigkeit, +einen Stil für den ganze Teil zu erstellen. (Wir definierten einen +Unterabschnitt-Zeilenstil, aber wie sich herausstellt, gibt es keine +Unterabschnitte in diesem Teil). Die zwei Befehle, die benutzt wurden, +spezifizieren den Zeilen-Stil (\csb{etocsetstyle}) und den globalen +Inhaltsausgabestil (\csb{etocruledstyle}). + +Das |\rightskip| wird von allen angewandt und schafft Platz, wo die Seitenzahlen +gedruckt werden. Einzelheiten dieser Technik werden in dem +\autoref{sec:secondexample} und \autoref{ssec:tocwithdepthtags} benutzt. Hier +wird eine Inhaltsangabe mit Abschnitten und Paragraphen verwendet. Beide +erlauben mehrzeilige Ãœberschriften und nutzen einer Technik, die Seitenzahlen +mit dem richtigen Seitenabstand auszugeben. Dieses wurde von der Funktionsweise +von Makros aus \LaTeX2e's |\@dottedtocline| inspiriert. + +\begin{verbatim} +\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm +\etocsetstyle {section} + {} + {\leavevmode\leftskip 0cm\relax} + {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\mdseries\etocpage}}\par} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip .5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 1.5cm\relax } + {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}% + \etocname\nobreak\hfill\nobreak + \rlap{\makebox[1cm]{\etocpage}}\par} + {} +\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC von + \autoref{part:overview} (\nameref{part:overview})} +\tableofcontents \ref {toc:overview} +\endgroup +\end{verbatim} + +\section{Ein zweites Beispiel} +\label{sec:secondexample} + +Dieses zweite Beispiel zeigt nur den Inhalt von \autoref{part:linestyles} und +\autoref{part:globalcmds}. Diese Auswahl wird durch die Technik von \emph{depth + tags} realisiert, die in \autoref{etocsettagdepth} und +\autoref{ssec:tocwithdepthtags} beschrieben wird. Dessen Layout ist in etwa wie +das von der \hyperref[toc:main]{Hauptinhaltsangabe}, obwohl die Zeilenstile ganz +anders programmiert sind. + +\begingroup +\newcommand*{\DotsAndPage} +{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% + \hfill\nobreak + \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} + +\etocsetstyle {part} +{\parindent 0pt + \nobreak + \etocskipfirstprefix} +{\pagebreak[3]\bigskip} +{\large\rmfamily\bfseries\scshape\centering + \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} +{} + +\etocsetstyle {section} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \nobreak\medskip + \etocskipfirstprefix} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \pagebreak[1]\smallskip} +{\normalsize\rmfamily\bfseries\scshape + \etocnumber. \etocname\DotsAndPage } +{\parfillskip 0pt plus 1fil\relax } + +\etocsetstyle {subsection} +{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax + \nobreak\smallskip} +{} +{\footnotesize\sffamily\mdseries\itshape + \etocname{} (\etocnumber, p. \etocpage). } +{\par\medskip} + +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {none} +\etocsettagdepth {arbitrarily}{none} +\etocsettagdepth {surprising} {none} +\etocsettagdepth {linestyles} {subsection} +\etocsettagdepth {globalcmds} {subsection} +\etocsettagdepth {custom} {none} +\etocsettagdepth {tips} {none} +\etocsettagdepth {code} {none} + +\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup + +Der Code: +\begin{verbatim} +\begingroup +\newcommand*{\DotsAndPage} +{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}% + \hfill\nobreak + \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par} + +\etocsetstyle {part} +{\parindent 0pt + \nobreak + \etocskipfirstprefix} +{\pagebreak[3]\bigskip} +{\large\rmfamily\bfseries\scshape\centering + \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par} +{} + +\etocsetstyle {section} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \nobreak\medskip + \etocskipfirstprefix} +{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip + \pagebreak[1]\smallskip} +{\normalsize\rmfamily\bfseries\scshape + \etocnumber. \etocname\DotsAndPage } +{\parfillskip 0pt plus 1fil\relax } + +\etocsetstyle {subsection} +{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax + \nobreak\smallskip} +{} +{\footnotesize\sffamily\mdseries\itshape + \etocname{} (\etocnumber, p. \etocpage). } +{\par\medskip} + +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {none} +\etocsettagdepth {arbitrarily}{none} +\etocsettagdepth {surprising} {none} +\etocsettagdepth {linestyles} {subsection} +\etocsettagdepth {globalcmds} {subsection} +\etocsettagdepth {custom} {none} +\etocsettagdepth {tips} {none} +\etocsettagdepth {code} {none} + +\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{} +\etocsetnexttocdepth {subsection} +\tableofcontents +\endgroup +\end{verbatim} + +\section{Verlinkte Liste der Hauptbefehle} +% 16 octobre + +\begingroup\raggedcolumns +\advance\linewidth18pt +\begin{multicols}{3}\parindent0pt\relax +\csb{etocstandardlines}\par +\csb{etocdefaultlines}\par + \csb{etoctoclines}\par + \csb{etocsetstyle}\par +\csb{etocname}\par +\csb{etocpage}\par +\csb{etocskipfirstprefix}\par + \csb{etocnumber}\par +\csb{etocifnumbered}\par +\csb{etocthename}\par +\csb{etocthenumber}\par + \csb{etocthepage}\par +\csb{etoclink}\par +\csb{etocthelinkedname}\par + \csb{etocthelinkednumber}\par +\csb{etocthelinkedpage}\par +\csb{etocthelink}\par + \csb{etocsetlevel}\par +\csb{etocsettocdepth}\par +\csb{etocsetnexttocdepth}\par + \csb{etocsettocdepth.toc}\par +\csb{etocobeytoctocdepth}\par + \csb{etocignoretoctocdepth}\par +\csb{etocdepthtag.toc}\par +\csb{etocsettagdepth}\par + \csb{etocobeydepthtags}\par +\csb{etocignoredepthtags}\par + \csb{etocstandarddisplaystyle}\par +\csb{etocsettocstyle}\par +\csb{etocmulticolstyle}\par + \csb{etocmulticol}\par +\csb{etoclocalmulticol}\par +% \csb{etoctocstyle}\par +% \csb{etoctocstylewithmarks}\par +% \csb{etoctocstylewithmarksnouc}\par + \csb{etocruledstyle}\par +\csb{etocruled}\par +\csb{etoclocalruled}\par + \csb{etocframedstyle}\par +\csb{etocframed}\par +\csb{etoclocalframed}\par +\csb{etocinline}\par + \csb{etocaftertitlehook}\par +\csb{etocaftercontentshook}\par +\csb{etocaftertochook}\par +\csb{etoctoccontentsline}\par +%\vspace{5\baselineskip}\hrule height 0pt +\end{multicols} +\endgroup + + + +% 15 octobre, je teste les tags +\etocdepthtag.toc {arbitrarily} + +\part{Beliebig viele TOCs und lokale Versionen davon} +% 13 octobre, ceci était une section avant + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents + +\section{Beschriften und anderswo wieder benutzen} + +\etoc erlaubt beliebig viele \csa{tableofcontents}-Befehle in +ihrem Dokument. Die Zeilen- und Inhaltsangabenstile können +natürlich dazwischen geändert werden. Außerdem setzt +\csa{localtableofcontents} lokale Inhaltsangaben: \emph{z.\,B.} alle +Abschnitte und Unterabschnitte innerhalb eines bestimmten +Kapitels oder alle Unterabschnitte und tiefer innerhalb eines gegebenen +Unterabschnitt usw. + +\etoc erlaubt das Labeln von Inhaltsangaben, beispielsweise mit +\csa{label\{toc:A\}}, und wird es woanders +\csa{tableofcontents}\csa{ref\{toc:A\}}, wenn gewollt, wieder anzeigen. Das +eigentliche Layout (inklusive Titel) wird lokal bestimmt. Die Zeilen- und +Inhaltsangabenstile (inklusive Titel) sind die aktuellen und der Wert von +|tocdepth| leistet Folge. Hier ein Beispiel: Die Inhaltsangabe von +\autoref{part:custom} ist innerhalb eines \hyperref[toc:d]{float}, der auf +dieser Seite erscheint: \vpageref{toc:d}. +\begin{figure}[ht!] + \centering + \begingroup + \etocstandardlines + \renewcommand{\etocbkgcolorcmd}{\color{green!5}} + \renewcommand{\etocbelowtocskip}{0pt\relax} + \fboxsep1ex + \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone + \hyperref[toc:c]{Ich bin von weit her}}}} + \tableofcontents \label{toc:d} \ref{toc:c} + \endgroup +\end{figure} + +Wir benutzen dies: +\begin{verbatim} +\begin{figure}[ht!] + \centering + \begingroup + \etocstandardlines + \renewcommand{\etocbkgcolorcmd}{\color{green!5}} + \renewcommand{\etocbelowtocskip}{0pt\relax} + \fboxsep1ex + \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone + \hyperref[toc:c]{I am from far away}}}} + \tableofcontents \label{toc:d} \ref{toc:c} + \endgroup +\end{figure} +\end{verbatim} +Wichtig: Man sollte \toc|\ref{toc:d}| nicht woanders benutzen. Um wieder zu +Klonen, muss man eine Refernz zum Original-Label benutzen: \toc|\ref{toc:c}|. + +\section{Eine mächtige Funktionsweise von \etoc: Die Wieder\-zuweisung von +Levels mit von \csbhyp{etocsetlevel}} + +Die intrinsischen Level, die durch \etoc manipuliert wurden, sind numerisch: von +|-2| (welches |book| aus der |memoir|-Klasse entspricht) bis hinab zu |5| +(|subparagraph|). Jedoch kann die Zuweisung eines numerischen Level zu einem +gegebenen Namen zu jeder Zeit mit de Befehl +\csb{etocsetlevel}\marg{level\_name}\marg{number} abgeändert werden. Daraus und +aus der Benutzung des \LaTeX -|tocdepth|-Zählers resultieren mächtige +Anwendungszwecke: \meta{level\_name} muss sich nicht mit dem eigentlichen +Unterteilungsbefehls des Dokuments überschneiden. Außerdem kann \etoc genutzt +werden, um beliebige "`Listen von Dingen"' ohne weitere Hilfsdateien, außer der +|.toc|-Datei, zu erstellen. Dieses wird in \autoref{part:surprising} weiter +erklärt. + +\begin{framed} + Es wird oft gesagt, dass Unterteilungslevel von |\part| in den + Standardklassen, die keinen |\chapter|-Befehl haben, gleich |0| sind, und in + denen mit |\chapter|-Befehl gleich |-1| ist. Das ist auch \emph{richtig}, wenn + man die \emph{automatische Nummerierung}, gesteuert durch den Wert des + |secnumdepth|-Zählers, betrachtet. Aber es ist \emph{falsch}, wenn man den + Effekt des |tocdepth|-Zählers sieht. Setzt man |tocdepth| in der |article| + -Klasse direkt vor |\tableofcontents| auf |-1|, verhindert das \emph{nicht}, + dass Abschnitte in der Inhaltsangabe aufzutauchen. Man muss es dafür auf |-2| + stellen, ganz egal ob in der |article|- oder der |book|-Klasse. + + Die kanonischen Level, grundsätzlich bekannt aus \etoc, sind + von Relevanz für den \textbf{|tocdepth|}-Zähler in den Standardklassen + und werden in der folgenden Tabelle rekapituliert: + + \centeredline{ + \fbox{\begin{tabular}{rc} + (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\ + section&1\\ subsection&2 \\ + subsubsection&3 \\ paragraph&4 \\ subparagraph& 5 + \end{tabular}}} + +\smallskip Mit \etoc kann der Nutzer innerhalb einem gegebenen Unterabschnitt +einfach lokale Inhaltsangaben ausgeben. Darin werden, wenn gewollt, +Unterabschnitte in dem Stil von Abschnitten, Paragraphen in dem Stil von +Unterabschnitten und Unterparagraphen im Stil von Unter-Unterabschnitten +gedruckt. Demnach kann man entscheiden alles auf das Level |6| zu setzen (wird +von \etoc nie angezeigt), außer z.\,B. Paragraphen, die auf Level |1| befördert +werden. So erstellt man eine schöne Inhaltsangabe aller Paragraphen eines +Dokuments. (|tocdepth| mindestens |1|)\footnotemark +\end{framed} + +\footnotetext{Normalerweise sollte man diese Inhaltsangabe der Paragraphen +nicht im Kompabtibilitätsmodus ausgeben. Der würde darauf bestehen, einen +gigantischen Abstand nach rechts einzufügen.} + +\section{Die \csbhyp{etoc\-set\-toc\-depth}- und + \csbhyp{etoc\-set\-next\-toc\-depth}-Befehle} +\label{etocsettocdepth} +\label{etocsetnexttocdepth} + +Der |tocdepth|-Zähler hat keinen Einfluss darauf, was in die |.toc|-Datei +geschrieben wird; dessen Einfluss ist ausschließlich auf das Setzen der +Inhaltsangabe gerichtet. In der Standardklasse ist nur ein |\tableofcontents| +möglich, wobei mit \etoc beliebig viele erlaubt sind. Dadurch könnte man +|tocdepth| immer und immer wieder auf einen passenden Wert ändern (der +entscheidet, wie tief die Abschnitte angezeigt werden sollen) bis die +Inhaltsangabe gesetzt werden muss. + +\etoc bietet \csb {etocsettocdepth}\marg{level} an, wessen verpflichtendes +Argument entweder (von |-3| bis |5|) oder einen Unterteilungstyp wie +|subsection| oder |subsubsection| oder alle anderen, die davor in \etoc mit +\csb{etocsetlevel} (die Schlüsselworte |all| und |none| erkannt werden, +allerdings nicht in Zusammenhang mit der Dokumentenunterteilung) deklariert +wurden. Das tut das passende |\setcounter{tocdepth}{numeric_level}|. + +Wie in dem nächsten Unterabschnitt erklärt wird, wird |tocdepth| von |hyperref| +benutzt. Man muss die folgenden Schritte befolgen, um den Einfluss von +|hyperref|`s Änderungen auf die Lesezeichen zu verhindern. \etoc hat \csb +{etocsetnexttocdepth}\marg{level}. Dessen Einfluss endet direkt nach der +nächsten Inhaltsangabe. Daraus folgt, dass +\texttt{\textbackslash\foreignlanguage{english}{invisibletableofcontents}} +essenziell für |\etocsetnexttocdepth{none}\tableofcontents| ist. + +Der einfachste Weg ist also, eine einfache Instanz des +\csb{etocsettocdepth}-Befehl nach |\begin{document}| und vor dem ersten + |\tableofcontents| mit dem tiefsten Level als Argument zu setzen. -- Dieses + dann lokal zu benutzen, wo es gebraucht wird, anhand von + \csb{etocsetnexttocdepth} vor |\tableofcontents| oder |\localtableofcontents|. + +\subsection{Die hyperref-Option \emph{bookmarksdepth}} +\label{ssec:bookmarksdepth} + +Wenn man den Zähler |tocdepth| verändert, um \toc oder \localtoc +mehrfach zu benutzen, sollte man gewahr sein, dass das Paket +|hyperref| standardmäßig den Wert des \emph{aktuellen} Wertes +der |tocdepth|-Zählers berücksichtigt, um zu entscheiden, ob die |pdf|-Datei +Lesezeichen, korrespondierend mit den Unterteilungsbefehlen, die in der +Quelldatei vorgefunden wurde, anzeigt. Dadurch muss man typischer Weise +den |tocdepth|-Zähler auf seinen vorigen Wert zurücksetzen, nachdem man +ihn temporär für eine gegebene Inhaltsangabe modifiziert hat. + +Alternativ gibt es die \emph{bookmarksdepth=n}-Option des |hyperref|-Pakets. +Dabei ist \emph{n} die gewünschte maximale Lesezeichen-Tiefe. Diese kann +numerisch sein oder der Name eines Levels, das |hyperref| bekannt ist. + +Wir sind in dieser Dokumentation schon an |bookmarksdepth=3| vorbeigekommen. Es +war eine Option von |hyperref|. Auch wenn |tocdepth| nach dem Ausgeben einer +Inhaltsangabe aus Nachlässigkeit auf |1| stehen gelassen wurde, so wurden der +Lesezeichenbaum der |pdf|-Datei nicht verändert. Da \csb{etocsetnexttocdepth} +jetzt zu dem Paket hinzugefügt wurde, ist keine Verwendung mehr für +|bookmarksdepth=3|. + +\section{Der Befehl \csbhyp{etoc\-set\-toc\-dep\-th.toc}} +\label{etocsettocdepth.toc} + +Dieser Befehl \csb{etocsettocdepth.toc} implementiert einige Funktionalitäten +von Paket |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. Ich danke D.B. + meine Aufmerksamkeit auf die Inkompatibilität dieses Pakets mit \etoc + gerichtet zu haben.}. Dieses Paket war inkompatibel mit \etoc. Es kann nun +noch für seine mit |secnumdepth| in Verbindung stehenden Befehle genutzt werden, +alle mit |toc| in Verbindung stehenden Aktivitäten werden jedoch durch \etoc +abgebrochen. + +Das Handeln von \csb{etocsettocdepth.toc} ist grundlegend verschieden zu +\csb{etocsettocdepth}. Anstatt den |tocdepth|-Zähler direkt zu verändern, +fügt es der |.toc|-Datei eine Linie an, die, wenn ausgeführt, in einer +Inhaltsangabe diese Veränderung ausführen wird. + +Der Befehl \csb{etocsettocdepth.toc} akzeptiert, wie +\csb{etocsettocdepth}, Namen und numerische Argumente. +In dem Fall eines Namen als Argument ist der tatsächliche numerische +Wert noch nicht festgelegt, wenn |.toc|-Datei erstellt wird. Es wird +der Wert sein, der aktuell für das benannte Level der Inhaltsangabe +(ohne |\etocignoretoctocdepth| gemacht zu haben) bei +jeder Erstellung einer Inhaltsangabe spezifiziert wird. + +Der |tocdepth|-Zähler wird niemals auf einen Wert gesetzt, der feiner +als der ist, mit dem er zu Beginn der Inhaltsangabe initialisiert wurde. +Also ist das Hinzufügen von \csb{etocsettocdepth.toc} im Dokument ein Weg +die Tiefe einer lokalen Inhaltsangabe einzugrenzen. Zum Beispiel, +um die Einfügung von Unter-unter-Abschnitten oder eines gegebenen +Kapitels zu unterbinden. + + +Dieses +{\fbox{wird in allen Inhaltsangaben ausgeführt.}} + +\subsection{Die Befehle \csbhyp{etocobeytoctocdepth} und \csbhyp{etocignoretoctocdepth}} +\label{etocobeytoctocdepth} +\label{etocignoretoctocdepth} + + +Also wird \csb{etocignoretoctocdepth} gesetzt, um den +\csa{etocsettocdepth.toc}-Mecha\-nismus abzubrechen, wenn +benötigt; und \csb{etocobeytoctocdepth} wird es +reaktivieren. Das Paket führt \csb{etocobeytoctocdepth} zu Beginn aus. + + +\section{Die Befehle \csbhyp{etoc\-depth\-tag.toc} und \csbhyp{etocsettagdepth}} +\label{etocdepthtag.toc} +\label{etocsettagdepth} + +Wie oben erwähnt, wenn das Argument für \csb{etocsettocdepth.toc} kein +numerisches sondern ein Namen-Level ist, wird durch die tatsächliche Nummer bei +der Erstellung der Inhaltsangabe entschieden. Dadurch und anhand der +\emph{Schiebe-Mechanismen von \etoc} kann man einen sehr flexiblen Aufbau +erreichen: Man erklärt mit \csb{etocsetlevel} zuerst ein paar Platzhaltelevel, +z.\,B. |partIII|, und weist ihm das unsichtbare Level |6| zu. Dann, vor dem +dritten |\part| Befehl, fügt man \csb{etocsettocdepth.toc}|{partIII}| ein. An +dem Ort, an dem der Effekt enden soll, setzt man +\csb{etocsettocdepth.toc}|{all}| ein. Es ist nun möglich, jedes Mal, wenn man +eine Inhaltsangabe setzen will, das feinste Level der Einträge aus dem dritten +Teil zu spezifizieren. Man muss z.\,B. nur \csa{etocsetlevel}|{partIII}{1}| +schreiben. Es wird die Abschnitte limitieren (sofern |tocdepth| mindestens auf +diesem Level war, wenn die Inhaltsangabe ausgegeben wurde). + +Die Methode hat ein paar Beschränkungen: +\begin{enumerate*}[label={(\roman*)}] + \item Das zweite Argument von \csb{etocsetlevel} muss numerisch sein; + \item es kann nicht auf |-3| gesetzt werden (was nötig wäre, wenn man ganze + Bücher aus der Inhaltsangabe streichen wöllte in den Klasse |memoir|); + \item es ist ein bisschen getrickst, seit |partIII| kein richtiger unterteilender + Abschnitt ist sondern nur ein \emph{tag}. +\end{enumerate*} + +Version |1.07h| enthält den Befehl \csb{etocdepthtag.toc}, der +es einfacher macht, diese variable lokale Kontrolle des |tocdepth| zu erreichen, +wenn die Inhaltsangabe erstellt wird. + + +Es wird als \csb{etocdepthtag.toc}\marg{tag\_name} genutzt, wo der +\meta{tag\_name} irgendetwas ist, das wird den Tag in die |.toc|-Datei setzen. +Wenn die Inhaltsangabe erstellt wird, initiiert das eine Reihe von Befehlen +\csb{etocsettagdepth}\marg{tag\_name}\marg{level}, wo das \meta{level} entweder +numerisch (von |-3| bis |5|) oder ein Name einer unterteilenden Einheit, die +\etoc bekannt ist, oder |none| oder |all|. Der Effekt von den Tags innerhalb der +|.toc|-Datei ist es, den |tocdepth|-Zählers auf den gewünschten Wert zu setzen +(das kann wie schon erwähnt, nicht feiner sein als der initiale Wert des +|tocdepth|-Zählers). + +Die hinzugefügte Flexibilität wirkt sich insofern aus, dass \csb{etocsetlevel} +nicht mehr mit dieser getricksten Methode, bei der man Level-Tiefen und |none| +und |all| benutzt hat. + +Wie immer, wenn die Tag-Tiefen gesetzt wurden, bleiben sie wirkend, bis sie +wieder definiert werden oder ihr Wirkungsgebiet beendet wird, indem die +umschließende Gruppe geschlossen wird. Für ein Beispiel, siehe hier: +\autoref{ssec:tocwithdepthtags}. + + +\subsection{Die Befehle \csbhyp{etocobeydepthtags} und \csbhyp{etocignoredepthtags}} +\label{etocobeydepthtags} +\label{etocignoredepthtags} + + +Nach \csb{etocignoredepthtags} werden die |.toc|-Tiefentags ignoriert +(nach \csb{etocdepthtag.toc} funktionieren sie jedoch noch). Das Paket +führt zu Beginn \csb{etocobeydepthtags} aus. Dieses befielt \etoc auf die +gefundenen Tags in der |.toc|-Datei zu reagieren. + +\section{Befehle zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei hinzufügen} +\label{sec:addingtotoc} + +Wir beschrieben oben die Befehle \csb{etocsettocdepth.toc} und +\csb{etocdepthtag.toc}, welche beide Befehle in die |.toc|-Datei einfügen. Ein +noch allgemeinerer Weg, um "`action tags"' in die |.toc|-Datei einzufügen, wäre +vorstellbar, allerdings würde auch nur indirekt +|\addtocontents{toc}{\something}| benutzt werden. + +Man sollte vorsichtig sein, wenn man auf diesem Weg Dinge zur |.toc|-Datei +hinzufügt. Zum Beispiel das Einfügen von +\csa{addtocontents}|{toc}{\string\clearpage}| direkt vor einem \csa{part} behebt +den Fehler, dass Teileinträge in Inhaltsangaben vom Rest getrennt am Ende der +Seite auftauchen, kann aber auch Probleme mit mehreren Inhaltsangaben haben: +\csa{clearpage} wird jedes Mal ausgeführt, wenn \etoc über ein \toc oder +\localtoc stolpert. Die schlauere Methode wäre es: +{\csa{addtocontents}|{toc}{\string\myclearpage}|,} den |\let\myclearpage\relax|, +man hätte den Befehl |\let\myclearpage\relax| zu Beginn des Dokuments und wenn +benötigt, benutzt man etwas wie: +\begin{verbatim} +\let\myclearpage\clearpage +\tableofcontents +\let\myclearpage\relax +\end{verbatim} +Die |memoir|-Klasse besitzt den Befehl \csa{settocdepth}, der einen +\csa{changetoc\-depth}-Befehl in die |.toc|-Datei setzt. Dieses +beeinflusst die Schriftsetzung von \etoc bei \emph{allen} Inhaltsangaben mit +möglichen unvorhersehbaren Ergebnissen: Stellen Sie sich vor, irgendwo im Dokument +stünde \csa{settocdepth}|{chapter}|, um die Abschnitte von Unterabschnitten +nicht in der Hauptinhaltsangabe aufzulisten. In diesem Fall würde eine +lokale Inhaltsangabe in einem dieser Kapitel einen Titel ohne jeden Eintrag ausgeben. + +Da die |memoir|-Klasse von Haus aus schon mehrfache \toc erlaubt, tritt dieser +Fehler schon viel früher, und unabhängig von \etoc, auf. Siehe Seite 170 der +|memoir|-Anleitung. + +Für diesen Spezialfall gibt es folgende Befehle: \csb{etocsettocdepth.toc}, +\csb{etocignoretoctocdepth}, \csb{etocobeytoctocdepth} oder deren +Varianten \csb{etocdepthtag.toc} und \csb{etocsettagdepth}. + +Nebenbei, jeder |\setcounter{tocdepth}{n}|-Befehl fügt direkt in die +|.toc|-Datei hinzu. Es scheint so, dass seine Wirkung ist (seit der Version +|1.07g|), beendet den Abschluss jedes Inhaltsverzeichnis zu beenden, automatisch +wird ein |\setcounter{tocdepth}{previous_value}| genommen, mit dem Wert, aktiv +ein Inhaltsverzeichnis zu nehmen. + +\subsection{Die hyperref-Option \emph{hidelinks}}\label{ssec:hidelinks} + +Die farbigen Links (und auch die Kastenlinks) sind einwenig ärgerlich, wenn in +Inhaltsverzeichnissen verwendet, insbesonders, wenn das Dokument \etoc verwendet +und viele von ihnen beinhaltet! Man kann sich wünschen, farbige Links +\emph{ausschließlich} für Inhaltsverzeichnisse! In der Tat, warum sollten in +TOCs diese Dinge gerahmt oder farbig sein müssen, wenn der Benutzer +\emph{bereits erwartet, dass dort Links sind}? + +Ich nehme den folgenden Trick: Entweder in der Präambel zu nehmen +|\AtBeginDocument| oder danach |\begin{document}|, ich habe den Befehl \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|} + + \begin{framed} + Alle TOCs, die von \etoc gesetzt sind, haben ihre Inhalte in eine + Gruppierung getan, (wie in einer Umgebung eingeschlossen). So wird der + Befehl \csa{hypersetup}|{hidelinks}| ausgeführt von \emph{jedem} TOC, aber + sein Effekt wird limitiert zu dem TOC. + \end{framed} + +Experimentell habe ich herausgefunden, dass die Option |hidelinks| oftmals mit +|\hypersetup| eingestellt werden kann (Dies ist nicht bei allen +|hyperref|-Optionen der Fall). + + + +\section{Zwei Beispiele} + +\subsection{Eine wunderschöne Beispielthese} + +Hier ist noch ein relativ einfaches Beispiel für die Verwendung der +Paket-Funktionsweisen. Lassen Sie uns einige Linienstile einrichten. Wir wählen +einen Stil für Abschnitte und Unterabschnitte, welche für die Abschnitte und +Unterabschnitte in einem durchschnittlichen Memoirenumfang geeignet wären. Die +Linienstilspezifikationen haben eine gewisse Redundanz für die Klarheit, und sie +interessieren sich nicht dafür, was bei möglichen Seitenumbrüchen zu tun ist. +Auch sind sie nicht besorgt über die potentielle mehrspaltige Nutzung. + +\begin{verbatim} +\begingroup % wir starten, um eine Gruppe zu behalten +\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm} +\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm} + +\etocsetstyle{section} % wird vorgegeben, ein Kapitel zu sein +{\addvspace{1ex}\parfillskip0pt + \leftskip\tocleftmargin % (bereits im Titel getan) + \rightskip\the\tocrightmargin plus 1fil + \parindent0pt\color{cyan}} % (bereits getan) +{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} +{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\etocsetstyle{subsection} % wird vorgegeben, ein Abschnitt zu sein +{} +{\mdseries\large\addvspace{.5ex}\leavevmode} +{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\def\tmptitle{My Beautiful Thesis} +\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin + \leavevmode\leaders\hrule height 1pt\hfill\ + \huge\textit{\tmptitle}\par}{\bigskip} + +\tableofcontents \ref{toc:overview} +\endgroup +\end{verbatim} + +\begingroup +\newlength{\tocleftmargin} +\setlength{\tocleftmargin}{5cm} +\newlength{\tocrightmargin} +\setlength{\tocrightmargin}{1cm} + +\etocsetstyle{section} +{\addvspace{1ex}\parfillskip0pt + \leftskip\tocleftmargin + \rightskip\the\tocrightmargin plus 1fil + \parindent0pt\color{cyan}} +{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode} +{\llap{Kapitel\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\etocsetstyle{subsection} +{} +{\mdseries\large\addvspace{.5ex}\leavevmode} +{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}% + \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par} +{} + +\def\tmptitle{Meine wunderschöne These} + +\etocsettocstyle{\color{cyan}\parindent0pt\leftskip\tocleftmargin + \leavevmode\leaders\hrule height 1pt\hfill\ + \huge\textit{\tmptitle}\par}{\bigskip} + +\tableofcontents \ref{toc:overview} +% And again, for the fun of it: +% \def\tmptitle{My Very Beautiful Thesis} +% \tableofcontents \ref{toc:c} +\endgroup + + +\subsection{Ein TOC mit einer Hintergrundfarbe}\label{ssec:again} + +Lassen Sie uns nun einige anspruchsvollere Linienstile versuchen. Das Display +wird den Paket-Befehl \csa{etocframedstyle} verwenden, damit das erzeugte +Inhaltsverzeichnis auf eine einzige Seite passt. Wir wickeln es in eine +\hyperref[toc:floating]{Figur-Umgebung}, damit es auf der aktuellen Seite +angezeigt wird. \vpageref{toc:floating}. + + +\begin{figure}[htbp!]\centering +\colorlet{subsecnum}{black} +\colorlet{secbackground}{green!30} +\colorlet{tocbackground}{red!20!green!20} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 3cm} +\renewcommand{\etocrightrule}{\vrule width 1cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip +\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} +{\shiftedwhiterule{\leftskip}{6pt}} +{\sffamily\footnotesize +\leftskip2.3cm\hangindent1cm\rightskip.5cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par +\nointerlineskip\vskip3pt} +{} + +\etocsetstyle{subsection}{\etocskipfirstprefix} +{\shiftedwhiterule{1.5cm}{6pt}} +{\sffamily\small +\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent +\hbox to .75cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par +\nointerlineskip\vskip3pt} +{} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +% v1.07l on the occasion of traduction into German documentation: + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{blue} + {\hfil \bfseries\large Inhalt von Teil Eins\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{blue} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}% + \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}% + \vskip6pt } +{} + + +% attention car \ref{toc:floating} fera référence au compteur de +% toutes les toc, pas visibletoc. + +\etocframedstyle[1]{} +\tableofcontents \label{toc:floating} \ref{toc:overview} +\vspace{-\baselineskip} +\centeredline{|\tableofcontents \ref{toc:overview}| +(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})} +\end{figure} + +Das aktuelle Design ist nicht in \etoc vorgefertigt; sondern nutzt seine +`eingerahmten' Stile mit einer Hintergrundfarbe. Die Rahmengrenzen wurden so +gesetzt, dass die gleiche Farbe, wie die Hintergrundfarbe, für die gesamte Sache +dienen soll. Dieses Design (mit anderen Farben) wird auch für +\hyperref[toc:clone]{dieses andere Inhaltsverzeichnis} benutzt, und der Leser +bezieht sich auf seine \hyperref[ssec:tocclone]{Unterabschnitte}, welche für die +Kodierung vorgesehen sind. + + +\etocdepthtag.toc {surprising} +\part{Ãœberraschende Anwendungen von \etoc} +\label{part:surprising} + +\thispartstats %% (pas de sous-section) + +% in dtx of release 1.07h there was here a \thisspecialstats, but it +% originated from the period when this \part was only a \section. So its +% effect was not the intended one, basically it had the same effect as this: +\etocstandardlines +\etocsettocstyle {}{} +\localtableofcontents + +\section{Das TOC für TOCs} + +\begingroup % \endgroup just after the \tableofcontents command +\etocinline +\etocsetlevel{part}{1} +\etocsetlevel{visibletoc}{0} +\etocsetstyle{visibletoc} + {\etocskipfirstprefix} + {, } + {{\color{niceone}\etocname}} + {} +\etocsettocstyle{}{} +\etocsetnexttocdepth{visibletoc} + +Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die +in diesem Dokument dargestellt sind \footnote{Die Inhaltsverzeichnisse können + "`Schwimmer"' setzen, um die Reihenfolge zu ändern: die Zahlen werden in der + Reihenfolge der Inhaltsverzeichnisse in dem Dokument aufgeführt; aber die + Nummerierung selbst ist von der Reihenfolge der Inhaltsverzeichnisse in der + \emph{Quelle} dieses Dokumentes \ldots} +\tableofcontents\endgroup. Und hier erhalten wir, was +wir gerade geschrieben haben:\par\smallskip +{\leftskip1cm\rightskip2cm + \ttfamily\small\baselineskip11pt \noindent Hier ist die + nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die in + diesem Dokument dargestellt sind:~\string\tableofcontents.\par} + +Die vorausgehenden Arbeiten waren wie folgt. Zuerst definierten wir einen Zähler +|visibletoc|, dessen Berufung es ist, bei jedem angezeigten Inhaltsverzeichnis +erhöht zu werden. \etoc hat einen eigenen Zähler, aber es zählen alle +Inhaltsverzeichnisse, auch wenn diese nicht angezeigt werden, da die |tocdepth| +Werte |-2| oder |-3| waren. + +Wir könnten manuell |\refstepcounter{visibletoc}| und |\label| an allen +geeigneten Stellen im Dokument hinzufügen, und wir würden dann |\ref|- Befehle +verwenden, aber dies stellt eine hohe manuelle Bearbeitung der Quelle dar. + +Es gibt eine viel bessere Möglichkeit: Es gibt einen Aufhänger +\csb{etocaftertitlehook} und wir sagten, es erhöht sich der |visibletoc|-Zähler +und wir schreiben eine Anlage zu der |.toc|-Datei, in analoger Weise zu dem +Gliederungsbefehl, zum Beispiel |Kapitel|, |Abschnitt| oder |Unterabschnitt|. +Wie \etoc seinen eigenen Zähler erhöht, noch bevor der Titel des +Inhaltsverzeichnisses gesetzt wird, bietet diese (die meiste Zeit) einen +besseren Link-Zielpunkt als jeder Zähler von \csa{etocaftertitlehook} (der Link +wird nach dem Titel platziert). Anstatt mit |\refstepcounter{visibletoc}|, +innerhalb von \csa{etocaftertitlehook}, formulieren wir +|\stepcounter{visibletoc}|, dann folgt der Befehl +\csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. Dieser \etoc-Befehl +\csb{etoctoccontentsline}\marg{level\_name}\marg{name} hat die gleiche Wirkung +wie: \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}} aber +sein Nutzen ist es \footnote{Mit \csa{addtocontents} anstatt + \csa{addcontentsline}.}, die Reparatur der automatischen Erstellung von +Lesezeichen zu verhindern mit \csa{addcontentsline} bei dem |hyperref|-Paket, +wie die pdf-Lesezeichen machen sie nicht viel Sinn hier (und würde eine +Beschwerde bezüglich von |hyperref| eruieren, denn das Lesezeichen-Niveau ist +`unbekannt').\footnote{ Das Paket bietet eine Stern-Variante + \staritb{etoctoccontentsline}, die zulässt, dass die Erstellung von + Lesezeichen und das Haben eines dritten obligatorischen Arguments, welches das + Lesezeichen-Niveau darstellt, funktioniert; abhängig vom Kontext kann die + Hauptrolle und die Nicht-Stern-Variante profitabel durch \csa{phantomsection} + sein.} + +Schließlich war in der Präambel des Dokuments |\etocsetlevel{visibletoc}{6}|. +Das Niveau |6| (oder etwas mit einer höheren Zahl) wird ignoriert, auch wenn +|tocdepth| zum Beispiel den Wert |10| hat; das ist unabhängig davon, ob \etoc +die Dokumentenklasse als Standardlinien oder als eigene Linienstile nutzt oder +die, die vom Benutzer mit \csa{etocsetstyle} Befehl definiert wurden. Es gibt +also keinen Grund zur Sorge, dass etwas schief gehen könnte. + +Dann haben wir hier nur |\etocsetlevel{visibletoc}{0}| gesetzt. Und nur diese +Art von Einträgen weisen wir vorübergehend eine |Teil|- und |Kapitel|-Ebene |1| +zu (oder etwas höher als null) und setzen |tocdepth| auf den Wert |0|. Wir haben +auch \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{, + \}\{\string\etocname\}\{\}}, welche eine innere Anzeige mit dem Komma als +Trennzeichen definiert. Wie \etoc Aspekte |\par| automatisch als Standard das +Inhaltsverzeichnis setzt, verwendeten wir den Befehl \csb{etocinline} (auch als +\cs{etocnopar} bekannt), welches die Reaktion ausmacht . + +Hier sind die Details der Implementierung: + +\begingroup +\begin{verbatim} + < in der Prämbel > +\newcounter{visibletoc} +\renewcommand{\etocaftertitlehook} + {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}} +\etocsetlevel{visibletoc}{6} +\begin{document} + < document body > +\subsection{Surprising uses of etoc} +\begingroup + \etocinline + \etocsetlevel{part}{1} + % \etocsetlevel{chapter}{1} % (keine Kapitel in scrartcl Klasse) + \etocsetlevel{visibletoc}{0} + \etocsetstyle{visibletoc} + {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{} + \etocsettocstyle{}{} % keine Titel, Regeln oder Rahmen festgelegt! + \etocsetnexttocdepth{visibletoc} % zeigt nur die `visibletoc' Einträge an aus .toc + +Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, +die in diesem Dokument angezeigt werden: \tableofcontents. +\endgroup +\end{verbatim} + +\endgroup + +Nach |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, wird für alle zukünftigen +Inhaltsverzeichnisse (nicht im +Kompatibilitätsmodus) der definierte Stil für das Niveau +|0| verwendet (was normalerweise der Pegel für ein Kapitel +ist). Um diese Änderung auf die einfachste Art und Weise zu halten, muss man +alles in eine Gruppe setzen. + +Der \autoref{subsec:interverting} gibt eine andere Verwendung +von Verschachtelungsstufen an. + +\section{Willkürliche "`Listen von \ldots "', \csbhyp{etoctoccontentsline}} +\label{etoctoccontentsline} + +Die Idee der Internabwehr ist leistungsfähig und ermöglicht +\etoc-Anzeigelisten, um beliebige Dinge in dem Dokument enthalten zu lassen. +Und all das mit noch nichts anderem als der +|.toc| Datei! +Beispiel: Stellen Sie sich ein Dokument mit Dutzenden von Ãœbungen vor, +vielleicht als |\newtheorem{exercise}{}[section]|. +Lassen Sie uns erklären, wie man \etoc anweist, eine verlinkte Liste all dieser +Ãœbungen anzuzeigen. Dafür haben wir in der Präambel geschrieben: +\begin{verbatim} + \newtheorem{exerci}{}[section] + % the exercice number will be recoverable via \etocname: v--here--v + \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}} + \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}} + \etocsetlevel{exercise}{6} +\end{verbatim} +Auf diese Weise wird \csa{etocname} die Ãœbungsnummer vergeben (aber +\csa{etocnumber} wird leer sein). Hätten wir stattdessen +\begin{verbatim} + \newcommand*{\exercisetotoc} + {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}} +\end{verbatim} +% +verwendet, wäre die Ãœbungsnummer via \csa{etocnumber} verfügbar und +\csa{etocname} wäre leer gewesen. Es spielt keine Rolle, welches der beiden +Verfahren verwendet wird. Der \etoc Befehl \csa{etoctoccontentsline}|{..}{..}| +wird als Ersatz für \csa{addcon\-tentsline}|{toc}{..}{..}| verwendet: Das ist +die, die durch das Reparieren von |hyperref| zu \csa{addcontentsline} verwendet +wird, um in ihrem Prozess die Erstellung von Lesezeichen zu vermeiden. Wenn man +|hyperref| ermächtigt, Lesezeichen auf einer bestimmten Ebene \meta{n} zu +erschaffen, kann einer (hier mit \meta{n}$=$|2|) die Stern-Variante +\starit{etoctoccontentsline} benutzen, welche ein zusätzliches Argument hat: +% +\begin{verbatim} +\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}} +\end{verbatim} + +Der Zähler |exerci| wird bereits durch das |exerci|-Theoremumfeld erhöht und +sorgt für den richtigen Ort für den Link zusätzlich zum Paket +|hyperref|. Der Befehl \csa{exercisetotoc} fügt für jede Ãœbung eine Zeile in die +|.toc|-Datei, entsprechend einer fiktiven Dokumenteinheit +mit dem Namen `|Ãœbung|' ein. Eine +Vier-Säulen-Liste, einschließlich der Abschnitte, kann dann erreichen mit +\begin{verbatim} + \etocsetnexttocdepth{2} % Abschnitte sind auf Stufe 1 und werden anzeigen +\begingroup + \etocsetlevel{exercise}{2} % aber: + \etocsetlevel{chapter}{3} % keine Kapitel + \etocsetlevel{subsection}{3} % keine Unterabschnitte + \etocsetlevel{part}{3} % keine Parts + \etocsetstyle{exercise}{}{} % \etocname = exercise number + {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par} + {\pagebreak[2]\vskip\baselineskip} + \etocsetstyle{section}{}{} + {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par + \nopagebreak[3]}{} + \etocruledstyle[4]{\Large\bfseries List of the exercises} + \setlength{\columnseprule}{.4pt} + \tableofcontents +\endgroup + \end{verbatim} + + +\section{Ein TOC mit einem extravagantem Layout} + +Hier ist ein Inhaltsverzeichnis, wo die Abschnitte aus einem bestimmten Kapitel +durch einen Zahlenbereich dargestellt werden sollen +(wie 18--22 bei einem bestimmten Kapitel, 42--49 für ein anderes \ldots\ +natürlich in das Inhaltsverzeichnis automatisch eingefügt wurden). + +Dies ist kein Abbildungseinschluss, das Inhaltsverzeichnis wird von seiner +ursprünglichen +|tex|-Quelle in dieses Dokument nach dem Austausch des +|Teils|, |Kapitels| oder |Abschnitts| mit |Dummy-Teil|, |Dummy-Kapitel| und +|Dummy-Abschnitt| (und da ist auch eine Dummy-Seitenzahl) produziert. Wir +kopierten die Linienstile, wie im Original verwendet, und +das Inhaltsverzeichnis zeigt folgende Situation an: +\begin{verbatim} + \etocsetlevel{dummypart} {-1} \etocsetlevel{part} {2} + \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2} + \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2} + \etocsetnexttocdepth{dummysection} +\end{verbatim} + +Jedes Kapitel zeigt die Zahl nur von dem ersten und dem letzten Abschnitt an. +Siehe in der Quelldatei |etoc.dtx| für die Details nach, wie das gemacht wird. + +Eine andere Technik für diese Art der Dinge erläutert + \autoref{ssec:statistics}. + +\begingroup + + \etocsetlevel{dummypart}{-1} + \etocsetlevel{dummychapter}{0} + \etocsetlevel{dummysection}{1} + \etocsetlevel{part}{2} + \etocsetlevel{chapter}{2} + \etocsetlevel{section}{2} + + \newif\ifextraidone + \newif\ifextraiidone + + \etocsetstyle{dummypart} + {} + {} + {\begin{center}\Large\bfseries TEIL \etocnumber + \ifextraiidone\\\etocname.\fi\end{center} + \ifextraidone\else + \noindent\hskip.7\linewidth + \hbox to .2\linewidth +% février (ou janvier?) 2013 +% je modifie ici en ajoutant un \hss, pour compenser la plus petite +% taille de txrm. Ok. + {\hss\small\textsc{\bfseries Kapitel.\hss Seite.}}\par\fi + \extraidonetrue + } + {} + + \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}} + \etocsetstyle{dummychapter} + {} + {\par\noindent\etocifnumbered + {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}} + {\hspace*{.15\linewidth}}} + {\hbox to .65\linewidth + {\hspace{1em}\etocname\leaders\mytocleaders\hss}% + \hskip-.1\linewidth + \hbox to .2\linewidth{\hspace{1.5em}...\hss + \etocifnumbered + {\etocpage} + {\ifextraiidone\else\etocpage\fi}}% + \hskip-.2\linewidth + } + {} + + \newbox\forsectionnumbers + \makeatletter +% 21 février 2013: je rajoute \color@begingroup et \color@endgroup + \etocsetstyle{dummysection} + {\setbox\forsectionnumbers=\hbox to .1\linewidth + \bgroup\color@begingroup\hss\etocskipfirstprefix} + {\@gobble} + {\etocnumber---} + {\etocnumber\color@endgroup\egroup + % for reasons I do not quite understand, in some pdf viewers the dots + % do not completely disappear if here \fboxsep0pt is used. + % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...) + % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais + % sans doute je pourrais réfléchir à une autre façon évitant d'avoir à + % « effacer ») + \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par + \ifextraiidone\else + \begin{center}\bfseries Kongruenz.\end{center} + \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Ãœbung.}}\par + \fi\extraiidonetrue + } + \makeatother + + \renewcommand{\etocinnertopsep}{0pt} + + \etocruledstyle[1]{% + \parbox{\linewidth}{% + \centering + \textsc{\bfseries\LARGE\MakeUppercase{Inhaltsverzeichnis}}\\ + \rule{.2\linewidth}{2pt}}% + } + + \etocsetnexttocdepth{dummysection} + + \tableofcontents + +\makeatletter + \def\adddummysection {\stepcounter{dummysection}% + \addtocontents {toc}{\protect\contentsline + {dummysection}{\protect\numberline{\thedummysection}}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummychapter #1{\stepcounter{dummychapter}% + \advance\dummypage2 + \addtocontents {toc}{\protect\contentsline + {dummychapter}{\protect\numberline{\thedummychapter}#1}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummychapno #1{\advance\dummypage2 + \addtocontents {toc}{\protect\contentsline + {dummychapter}{#1}{\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} + + \def\adddummypart #1{\stepcounter{dummypart}% + \advance\dummypage4 + \addtocontents {toc}{\protect\contentsline + {dummypart}{\protect\numberline{\Roman{dummypart}}#1}% + {\the\dummypage }% + %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX + {\@currentHref }% + %\fi + }} +\makeatother + + \newcount\dummypage \dummypage-1 + + \adddummypart {} + + \adddummychapno {Einleitung} + + \newcount\tempcount + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<8 + \repeat + + \adddummychapter {Kongruenz von Subjekt und Verb} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<17 + \repeat + + \adddummychapter {Kongruenz von Substantiven und Adjektiven} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<22 + \repeat + + \adddummychapno {Kongruenz von Relativen und Antezendenten} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<25 + \repeat + + \adddummypart {Government} + + \adddummychapter {Der Akkusativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<30 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<37 + \repeat + + \adddummychapter {Verbrektion über zwei Akkusative} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<41 + \repeat + + \adddummychapter {Der Kausativ} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<49 + \repeat + + \adddummychapter {Der Instrumental} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<54 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<59 + \repeat + + \adddummychapter {Der Dativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<65 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<71 + \repeat + + \adddummychapter {Der Ablativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<75 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<86 + \repeat + + \adddummychapter {Der Lokativ} + + \adddummychapno {Allgemeine Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<92 + \repeat + + \adddummychapno {Besondere Anwendungen} + + \loop\advance\tempcount by 1 + \adddummysection + \ifnum\tempcount<100 + \repeat +\endgroup + +\section{Ein weiterer Kompatibilitätsmodus} + +Wie in \autoref{ssub:compat} erläutert, sagen die Befehle +\csa{etocstandardlines} und \csa{etocstandarddisplaystyle} \etoc im +Wesentlichen, wie man als Beobachter fungiert. Das Dokumentenklasse-Layout für +das Inhaltsverzeichnis wird dann gehorchen. Es gibt keine Möglichkeit, dieses +Standard-Layout aus dem Paket anzupassen (ändern von Schriftarten, Rändern, +vertikalen Abständen, etc.) . Definieren Sie dazu ein Paket von dieser Funktion; +weil entweder \etoc (vorübergehend vielleicht) im Kompatibilitätsmodus ohne +Anpassung auf seinen Teil möglich ist oder der Benutzer hat das Layout in +\csa{etocsetstyle}-Befehlen angegeben (und \csa{etocsettocstyle}) ist (angeblich +\ldots ) in der kompletten Steuerung. + +Nun, es ist eigentlich eine Alternative. Es ist möglich, die Verwendung der +\csa{etocsetstyle}-Befehle zu nutzen, um einen künstlichen Kompatibilitätsmodus +neu zu erstellen, um Effekte zu erreichen, wie die folgenden, alle Dinge +gleichen andererseits dem Dokumentenklassen-Standard: +\begin{enumerate}[noitemsep] +\item Enthält der |hyperref|-Link nur die Namen, aber nicht die Anzahl der + jeweils zu kapselnden Einträge der Inhaltstabellen; +\item verwenden Sie den Dokumentenklassen-Stil für Kapitel und Abschnitte, aber + ändern Sie es nur für Teilbereiche; +\end{enumerate} + +Hier ist beschrieben, wie Sie vorgehen müssen. Man nimmt in die Präambel: +\begin{verbatim} +\makeatletter +\newcommand{\MyStandardTOC}{% + \begingroup + \let\savedpartline\l@part + \let\savedchapterline\l@chapter %% remove if article/scrartcl class + \let\savedsectionline\l@section + \let\savedsubsectionline\l@subsection + % and so on if \subsubsection, etc... is used + % + % for the book or article classes: + \etocsetstyle{part}{}{} + {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}% + % for the scrbook or scrartcl classes: + \etocsetstyle{part}{}{} + {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + % identical in book/article/scrbook/scrartcl classes: + \etocsetstyle{chapter}{}{} %%% only for book and scrbook + {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \etocsetstyle{section}{}{} + {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + \etocsetstyle{subsection}{}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}% + % etc... if further sectioning units are used + % (see the text for what to do with the memoir class) + \etocstandarddisplaystyle % this is for the title, page-marks, etc... + \tableofcontents + \endgroup} +\makeatother +\end{verbatim} +Natürlich ist es so, wenn das Dokument nur ein Inhaltsverzeichnis hat, dann gibt +es keine Notwendigkeit, die Befehle in ein Makro zu setzen oder sogar in eine +Gruppe. \footnote{Und wenn darüber hinaus, um das gleiche Layout wie im Standard +zu halten, kann man sich die Frage stellen, warum man \etoc benutzt \ldots\ Es +gibt \emph{einen} guten Grund: Zahlen und Namen sind separate +\texttt{hyperref}-Links, nach der Regel gibt es nur eine Verbindung, die sowohl +die Nummer und den Namen auf einem toc-Eintrag entsprechen.} Mit dem Befehl +\etoc ist ein Inhaltsverzeichnis völlig identisch zu einem von der +Dokumentenklasse: |article|, |book|, |scrartcl|, |scrbook|. \footnote{Für die +|memoir|-Klasse braucht man ein bisschen mehr: Jeder der Befehle +\csa{booknumberline}, +\csa{partnumberline} und \csa{chapternumberline} müssen in ein +\csa{let} gebettet werden und sie ergeben dann ein: +\centeredline{% +\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{% +\string\savedchapternumberline}} +\hbox to \linewidth{\hfil\hfil \ttfamily + \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} +(und analog für |part| und |book|).} +Die Anzahl und die Namen der einzelnen Einträge sind jeweils separat in einem +|hyperref|-Link, wie es immer der Fall bei \etoc ist, wenn man nicht im +Kompatibilitätsmodus ist. Ersetzt man \csa{etocnumber} mit \csa{etocthenumber}, +dann ergibt es ein Inhaltsverzeichnis, wo die Zahlen nicht mehr verlinkt sind, +aber die Namen noch. Oder man kann sich entscheiden, \csa{etocthename} zu +verwenden und eine Hyperlink-Nummer mit \csa{etocnumber} zu erhalten. + +Hier ist ein subtiles Beispiel, wo nur geringfügig die "`sections"' modifiziert +wurden (hinzufügen von Farbe für die Nummer und das Entfernen des +|hyperref|-Links) und die Unterabschnitte, wie in der Standardeinstellung, +\emph{mit Ausnahme} von einer bestimmte "`section"' im Layout komplett geändert +wurde: \MyQuasiStandardTOC{\ref{toc:overview}} \bigskip Dieses Beispiel hat nur +Abschnitte und Unterabschnitte und der in \csa{MyStandardTOC} verwendete Code +war: +\begin{verbatim} +\etocsetstyle{section}{} + {\ifnum\etocthenumber=3 + \etocsetstyle{subsection} + {\par\nopagebreak\begingroup + \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue + \parindent 0pt \normalfont\normalsize\rmfamily\itshape + % \columnsep1em + % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}% + % \begin{multicols}{2}% + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname\ \textup{(\etocnumber)}} + {.\par\endgroup}% + % {.\par\end{multicols}\end{minipage}\par\endgroup}% + \else + \etocsetstyle{subsection} + {}{} + {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}} + {}% + \fi} + {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}} + {}% +\end{verbatim} + +Beachten Sie die Seite mit den Kopf-Zeichen, welche man dem Inhaltsverzeichnis +hinzufügen kann. Abschnitte und Unterabschnitte sind genauso wie im Standard +(mit Ausnahme der Unterabschnitte, welche von einem bestimmten +Benutzer-Abschnitt aus gewählt wird und bis auf die Farbe der +Abschnittsnummern), ohne das explizit die Länge, die Schriftart oder andere +Formatierungsanweisungen gegeben werden. Aber wir mussten die |scrartcl|-Quellen +untersuchen, um festzustellen, was zu nehmen ist für \csa{leftskip} und +\csa{rightskip} für unsere Nutzer-sections-Einträge. + +\section{Das TOC als ein Baum}\label{tocastree} + +Mit |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} und dem Paket +|forest|\footnote{\url{http://ctan.org/pkg/forest}} wird das Inhaltsverzeichnis +als Baum angezeigt. Die Technik ist, den von \etoc geänderten Befehl +\csa{tableofcontents} nicht für den Satz zu verwenden, sondern ein Makro, oder +besser hier eine \emph{symbolische Liste}-Variable vorzubereiten, mit allen +Anweisungen, die später ausgeführt werden. \textsc{Leslie Lamport}'s Buch +erwähnt überhaupt nicht die symbolische Liste und \LaTeX{} vermittelt den +Eindruck, nicht wirklich darauf zu warten, dass die Mehrheit der Nutzer immer +über sie (oder begrenzte Makros) etwas hört; die ganze Sache und der folgende +Abschnitt sind daher für fortgeschrittene Anwender. + +Setzt man die \csa{etocnumber}- und \csa{etocname}-Befehle in \csa{treetok}, +dann würde das nichts nützen: Auf welche Zahl oder Namen würde sich das dann +beziehen, in einer verzögerten Ausführung? + +Wir brauchen die Speicherung der Makro-Namen, aber nicht die Makro-Inhalte. Und +wir wollen auch die korrekten |hyperref|-Hyper-Links erhalten.\footnote{Dieses +Handbuch bis zu der Version vom 14. Mai 2013 verwendete das Paket |tikz-qtree|, +aber es gab Probleme mit den Hyper-Links. Kein solches Problem entsteht mit +|forest| oder mit der nativen Syntax |tikz| für Bäume (die im nächsten Abschnitt +dargestellt sind).} Die Hyper-Link-Informationen von \etoc setzen innen +\csa{etocname}, etc. \ldots, aber es ist nur ein Zeiger, nicht lagerungsfähig +für die spätere Verwendung; aber das Paket bietet \csa{etocthelinkednumber}, +\csa{etocthelinkedname} und \csa{etocthelinkedpage}, deren Inhalte enthalten den +Hyper-Link in einer Form, die gespeichert und später wiederverwendet werden +können. + +Aus diesem |forest|-Baum haben wir ganz besondere \etoc-Stile für Abschnitte und +Unterabschnitte konzipiert. Sie verwenden ein symbolisches Listenregister mit +dem Namen |\treetok| und ein Makro |\appendtotok|, deren Aufgabe es ist, zu +einer bestimmten symbolischen Listenvariablen den Inhalt eines Makros als +zweites Argument anzuhängen. All dies wird in Reaktion auf einen Befehl +|\tableofcontents| passieren, aber noch ist \emph{nichts} in deren +Prozess.\footnote{Es gibt immer ein \csa{par}, welches kein Problem ist, es kann +aber unterdrückt werden, wenn der Bedarf über den Befehl \csb{etocinline} oder +dessen Synonym \csb{etocnopar} besteht.} Das ist der spätere Job einer +|forest|-Umgebung, die den Inhalt von |\treetok| wiedergeben soll. +\newtoks\treetok +\newtoks\tmptok + +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter + {\expandafter\the\expandafter #1#2}} + + +% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f +% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de +% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre +% TikZ natif. + +% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème +% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu +% de sa syntaxe et de celle de TikZ). + +\newcommand*\PrepareSectionNode{% + \tmptok {\centering\bfseries}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% +} + +% 7 mars: j'utilise maintenant \etocthelinkedname +\newcommand*{\PrepareSubsectionNode}{% + \tmptok {\raggedright}% j'ai essayé aussi avec \sloppy + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsettocstyle + {\treetok{[{\hyperref[part:overview]{Ãœberblick}}}} + {\global\appendtotok\treetok{ ]}} + + +% 11 octobre +% forest ne veut pas @\the\treetok avec un \treetok vide, donc +% il faut lui donner une valeur par défaut. +\treetok{[{run latex again}]} + +% 12 octobre +% pour que varioref fonctionne bien, je dois mettre la \tableofcontents +% au plus près de l'environnement forest + +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:forest}\ref{toc:overview} + \hypersetup{hidelinks}% + \bracketset{action character=@} + \begin{forest} + for tree={anchor=center,child anchor=west, + grow'=east,draw,thick, + edge={draw,thick,dashed,color=teal}}, + where={level()==1}{circle,thick,fill=blue!5, + before computing xy={l=3cm}}{}, + where={level()==2}{fill=red!5, + before computing xy={l=6cm}}{}, + % je trouve ce truc pour une position absolue. OK! + rectangle, thick, fill=cyan!5, inner sep=6pt, + @\the\treetok + \end{forest} + \centeredline{Ein Inhalsverzeichnis in Form eines |forest|-Baums.} +\end{figure} + +Der resultierende Baum wird in einem \hyperref[toc:forest]{Puffer} angelegt, welcher +\vpageref[oben]{toc:forest} erscheint. Hier ist der zur Herstellung notwendige Code: +\begin{verbatim} +\newtoks\treetok +\newtoks\tmptok + +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter + {\expandafter\the\expandafter #1#2}} + +\newcommand*\PrepareSectionNode{% + \tmptok {\centering\bfseries}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% +} + +\newcommand*{\PrepareSubsectionNode}{% + \tmptok {\raggedright}% + \appendtotok\tmptok\etocthelinkedname + \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendtotok\treetok{ ]}} + {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode} + {\appendtotok\treetok{ ]}} + +\etocsettocstyle + {\treetok{[{\hyperref[part:overview]{Ãœberblick}}}} + {\global\appendtotok\treetok{ ]}} + +% forest does not like @\the\treetok if \treetok is empty. On first latex +% run, this will be the case because the TOC style defined above will not +% have been executed, as the label {toc:overview} does not refer to a valid +% TOC yet. So we must give a safe default value to \treetok +\treetok{[{run latex again}]} + +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:forest}\ref{toc:overview} + \hypersetup{hidelinks}% + \bracketset{action character=@} + \begin{forest} + for tree={anchor=center,child anchor=west, + grow'=east,draw,thick, + edge={draw,thick,dashed,color=teal}}, + where={level()==1}{circle,thick,fill=blue!5, + before computing xy={l=3cm}}{}, + where={level()==2}{fill=red!5, + before computing xy={l=6cm}}{}, + rectangle, thick, fill=cyan!5, inner sep=6pt, + @\the\treetok + \end{forest} +\end{figure} +\end{verbatim} + +Warum |\hypersetup{hidelinks}|? Wie in \autoref{ssec:hidelinks} erläutert ist, +werden die Links in Inhaltsverzeichnissen nicht eingefärbt, noch gerahmt, so +dass dieses Dokument den Befehl +|\hypersetup{hidelinks}| +hinzufügt. Aber immer werden die |\treetok|-Inhalte in die +|\hyperlink|-Ursprungsbefehle in |\etocthelinkedname| ausgepackt, etc. \ldots{} +Sie werden in der normalen Umgebung für Links (die in diesem Dokument zu +kolorieren sind) ausgeführt. Der \etoc -Code versucht zu erraten, was der +aktuelle "`Stil"' für Links ist (ein Begriff, der nicht wirklich von |hyperref| +vorausgesetzt zu sein scheint) und speichert es in |\etocthelinkedname|, etc. +\ldots, Ich entschied mich für die einfachere Lösung, es dem Benutzer zu +überlassen, ob er es neu erstellt, was auch immer für Bedingungen erwünscht +sind. So, hier ist es notwendig, das |\hypersetup{hidelinks}| in dem +|figure|-Umgebung neu zu erstellen. + +Es gibt einige andere Beispiele in dieser Dokumentation, wobei +|\tableofcontents| verwendet wird, um Material zu haben für den späteren +Schriftsatz: +\begin{itemize} +\item Für das Drucken der Statistiken zu Beginn der einzelnen Abschnitte (siehe + \autoref{ssec:statistics}) wurden unbeschädigte Boxen benutzt (das Problem der + Darstellung der Links funktioniert nicht). +\item Zum Setzen des Inhaltsverzeichnisses als eine Tabelle (siehe \autoref{ssec:tocastable}); + auch dort werden wir |\hypersetup{hidelinks}| setzen, nachdem wir die Namen, + Nummern und Seitennummern in einem symbolischen Listenregister gesetzt haben. +\item Und zwei weitere Baum-Beispiele sind im nächsten Abschnitt. +\end{itemize} + + +\section{Das TOC als ein Molekül}\label{ssec:molecule} + +Es ist auch möglich, einen Inhaltsverzeichnisbaum nach der TikZ-Syntax für Bäume +zu konstruieren: Aber das ist eine kompliziertere Aufgabe für die \etoc +Linienstile, welche die Klammern in einer Art und Weise von \TeX{} behandeln. +(Sie brauchen für das Auffüllen der symbolischen Liste im Zusammenhang mit jedem +Schritt immer eine Balance, sonst müssen immer kompliziertere Tricks angewandt +werden.). + +Die einfachste Strategie ist es, eine symbolische Liste zuzuweisen (oder Sie +verwenden ein Makro) für jede Ebene: Wir brauchen ein \csa{parttok}, ein +\csa{chaptertok}, ein \csa{sectiontok} und ein \csa{subsectiontok}, um in der +Aufgabe die \csa{treetok} zu befüllen. Wir interessieren uns hier für die +Tabelle der Inhalte von diesem (oder einem anderen) Dokumententeil, nur ein +\csa{sectiontok} und ein \csa{subsectiontok} wird dafür gebraucht. + +\begin{verbatim} +% \newtoks\treetok % already done earlier +\newtoks\sectiontok \newtoks\subsectiontok \newcommand*{\treenode}{} + +\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} + \edef\tmp{\the#1 child {\the#2}}% + #1\expandafter{\tmp}% +} +\newcommand*{\preparetreenode}{% + \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory) + \edef\treenode{node {\the\tmptok}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendchildtree\treetok\sectiontok} + {\preparetreenode \sectiontok\expandafter{\treenode}} + {\appendchildtree\treetok\sectiontok} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendchildtree\sectiontok\subsectiontok} + {\preparetreenode \subsectiontok\expandafter{\treenode}} + {\appendchildtree\sectiontok\subsectiontok} + +\etocsettocstyle + {\treetok{\node {\hyperref[part:overview]{Overview}}}} + {\global\appendtotok\treetok{ ;}} + +% moved to the inside of the figure environment for correct \pageref{toc:molecule} +% \etocsetnexttocdepth{subsection} +% \tableofcontents \label{toc:molecule} \ref{toc:overview} +\end{verbatim} + +\newtoks\sectiontok +\newtoks\subsectiontok +\newcommand*\treenode {} + +\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2} + \edef\tmp{\the#1 child {\the#2}}% + #1\expandafter{\tmp}% +} + +\newcommand*{\preparetreenode}{% + \tmptok\expandafter{\etocthelinkednumber}% + \edef\treenode{node {\the\tmptok}}% +} + +\etocsetstyle{section} + {\etocskipfirstprefix} + {\appendchildtree\treetok\sectiontok} + {\preparetreenode + \sectiontok\expandafter{\treenode}} + {\appendchildtree\treetok\sectiontok} + +\etocsetstyle{subsection} + {\etocskipfirstprefix} + {\appendchildtree\sectiontok\subsectiontok} + {\preparetreenode + \subsectiontok\expandafter{\treenode}} + {\appendchildtree\sectiontok\subsectiontok} + +\etocsettocstyle + {\treetok{\node {\hyperref[part:overview]{Ãœberblick}}}} + {\global\appendtotok\treetok{ ;}} + +\begin{figure}[th!]\centering +\etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:molecule}\ref{toc:overview} + \hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=4cm,sibling angle=72}, + level 2/.style={level distance=2cm,sibling angle=60}, + every node/.style={ball color=red,circle,text=SkyBlue}, + edge from parent path={[dashed,very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture} + \centeredline{Ein Inhaltsverzeichnis als ein "`Molekül"'.} +\end{figure} + +% Pour que \pageref fonctionne correctement, je dois mettre +% le \tableofcontents dans la figure. + +Der |\tableofcontents|-Befehl erscheint direkt über der Umgebung in dem +|tikzpicture|-Umfeld und ist eine Gleitfigur (über Inhaltslabel sicherlich auf +die gleiche Seite zu beziehen, wie die in dem das Bild tatsächlich gedruckt +werden soll). Wir erhalten somit das Inhaltsverzeichnis als +"`\hyperref[toc:molecule]{Molekül}"', welches oben erscheint +\vpageref[above]{toc:molecule}. Hier ist der aktuelle, tatsächlich produzierte +Code: +\begin{verbatim} +\begin{figure}[th!]\centering + \etocsetnexttocdepth{subsection} + \tableofcontents \label{toc:molecule} \ref{toc:overview} + \hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=4cm,sibling angle=72}, + level 2/.style={level distance=2cm,sibling angle=60}, + every node/.style={ball color=red,circle,text=SkyBlue}, + edge from parent path={[dashed,very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture} +\end{figure} +\end{verbatim} + +Dieses \hyperref[toc:molecule]{TikZ-TOC} ist komplett verlinkt, wie das +vorherige \hyperref[toc:forest]{Forest-TOC} auch. + +\etocsettocstyle + {\treetok{\node {\autoref{part:globalcmds}}}} + {\global\appendtotok\treetok{ ;}} + +\etocsetnexttocdepth {subsection} +\tableofcontents \ref{toc:globalcmds} + +\noindent +\parbox{4cm}{\hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=60}, + level 2/.style={level distance=1cm,sibling angle=45}, + every node/.style={ball color=red!50,circle,text=black}, + edge from parent path={[very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture}}% +\begin{minipage}{\dimexpr\linewidth-4cm\relax} + Seitlich ist das (völlig mit Hyper-Links versehene) Inhaltsverzeichnis von + \autoref{part:globalcmds}. + \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}% +\begin{verbatim} +\etocsettocstyle + {\treetok{\node {\autoref{part:globalcmds}}}} + {\global\appendtotok\treetok{ ;}} +\etocsetnexttocdepth {subsection} +\tableofcontents \ref{toc:globalcmds} +\noindent +\parbox{4cm}{\hypersetup{hidelinks}% + \begin{tikzpicture} + [grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=60}, + level 2/.style={level distance=1cm,sibling angle=45}, + every node/.style={ball color=red!50,circle,text=black}, + edge from parent path={[very thick,color=cyan] + (\tikzparentnode) --(\tikzchildnode)}] + \the\treetok + \end{tikzpicture}}% +... +\end{verbatim} +\end{minipage} + +% \vfill\eject + +\etocdepthtag.toc {linestyles} + +\part{Befehle für die TOC-Linienstile} +\label{part:linestyles} + +\thispartstats + +\etocsetstyle{section} +{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered + {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]} +% Dec 7, 2012. I hit upon a problem whose origin I found was +% with xcolor, as xcolor modifies \fbox +% (try \section{\fbox{A}} with and without xcolor). The fix +% was to \protect the \fbox used in the |enumitem| label. +% Strangely enough, with |hyperref| active, the problem did +% not show up. Anyhow I now use \fcolorbox rather than \fbox +% and there is no problem anymore. Also I don't have now to +% use \normalcolor which already needed protection. +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (Seite \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]} +{\normalfont \item} +{\etocname{} (S.~\etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsubsection} +{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix} +{\allowbreak\,--\,} +{\etocname} +{.\hfil\par\endgroup\pagebreak[3]} + +% 27 janvier 22:30 +% je définis les macros (non protégées) +% \etocthename, \etocthenumber, \etocthepage + +\etocruledstyle[1]{\etocfontminusone\color{green}% + \fboxrule1pt\fboxsep1ex + \framebox[\linewidth] + {\normalcolor\hss Inhalt von \autoref{part:linestyles}\hss}} + +\localtableofcontents \label{toc:a} + +\section{Der \csbhyp{etocsetstyle}-Befehl} +\label{etocsetstyle} + +\subsection{Die \csbhyp{etocname}- und \csbhyp{etocpage}-Befehle} +\label{etocname} +\label{etocpage} + +Hier soll erläutert werden, wie \etoc\ dazu verwendet wurde, das +Inhaltsverzeichnis am Beginn des zweiten Teils zu erstellen. Es handelt sich +dabei um ein lokales Inhaltsverzeichnis, weshalb der Befehl \localtoc\ verwendet +wurde. + +Wir müssen hierbei unterscheiden zwischen den Linienstilen (\emph{line styles}) +und dem Ausgabestil (\emph{toc display style}). Die \emph{line styles} erhält +man grundsätzlich auf die folgende Art und Weise: + + +\footnote{Das vorliegende Dokument hat + {\ttfamily\string\renewcommand\string{% + \string\familydefault\string}\string{\string\sfdefault\string}} + in seiner Präambel, deshalb schaltet der Befehl \csa{normalfont} zur + |sans| Schriftart; aus diesem Grund habe ich im Abschnitt line-style + \csa{rmfamily} geschrieben.} + +\begingroup\small +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsection} +{\begin{enumerate}} +{\normalfont\item} +{\etocname{} (p.~\etocpage)} +{\end{enumerate}} + +\etocsetstyle{subsubsection} +{\par\nobreak\begingroup\normalfont + \footnotesize\itshape\etocskipfirstprefix} +{\allowbreak\,--\,} +{\etocname} +{.\hfil\par\endgroup\pagebreak[3]} +\end{verbatim} +\endgroup + +Diese provisorischen Stil-Definitionen beruhen auf der automatischen +Nummerierung, die von der |enumerate|-Umgebung generiert wird, es ist aber +wesentlich besser den Befehl \csb{etocnumber} innerhalb des Item-labels zu +verwenden, denn das gibt das richtige Ergebnis. Die verbesserten Definitionen +werden dahingehend später erklärt. + +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 \marg{prefix} und \marg{contents}-Teile aus der +\csa{etocsetstyle}-Spezifikation. Diese enthalten den Namen, die Nummerierung +und die Seitennummer des entsprechenden toc-Eintrags. Ist das Paket |hyperref| +im Dokument eingebunden, und es existieren Verlinkungen zu den TOC-Daten, dann +werden diese Links in den Befehlen \csa{etocname}, \csa{etocnumber} und +\csa{etocpage} gehalten (Der letzte hat nur einen Link, wenn |hyperref| die +Option \emph{linktoc=all} übergeben wurde). + +\subsection{Der \csbhyp{etoc\-skip\-first\-pre\-fix}-Befehl} +\label{etocskipfirstprefix} + +Der gewählte |subsubsection|-Stil benutzt außerdem den Befehl +\csb{etocskipfirstprefix}, welcher -- falls verwendet -- der letzte im +\emph{start}-Code sein \emph{muss}. Er sorgt dafür, dass der "`prefix"'-Code +nicht für das erste Objekt ausgeführt wird. 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! + +\subsection{Der \csbhyp{etocnumber}-Befehl} +\label{etocnumber} + +Bis hierhin würde unsere Spezifikation die Nummerierung verwenden, die von der +|enumerate|-Umgebung generiert wird, jedoch möchten wir natürlich die in +der |.toc|-Datei deklarierten Nummern benutzen. Das kann man mit Hilfe des +\csb{etocnumber}-Befehls erreichen. Um die Bezeichnungen in die +|enumerate|-Auflistung zu bekommen, fährt man mit der Syntax +{\ttfamily label=\char32} des |enumitem|-Pakets fort: +\begin{verbatim} +\etocsetstyle{section} +{\begin{enumerate}[label=\etocnumber]} +{\normalsize\bfseries\rmfamily\item} +{\etocname{} (page \etocpage)} +{\end{enumerate}} +\end{verbatim} +Lieber als nur \csa{etocnumber} haben wir dann so etwas wie |\fbox{\etocnumber}| +benutzt. Dabei ist festzuhalten, dass \csa{etocnumber} ein robuster Befehl ist, +was erklärt, warum er in der Label-Spezifikation benutzt werden kann, ohne +|\protect| hinzuzufügen. + +\subsubsection{Der \csbhyp{etocifnumbered}-Schalter} +\label{etocifnumbered} + +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}|. + +\subsection{Die Befehle \csbhyp{etocthename}, \csbhyp{etocthenumber} sowie +\csbhyp{etocthepage}} +\label{etocthename} +\label{etocthenumber} +\label{etocthepage} + +Es ist manchmal wünschenswert, Zugriff auf Name, Nummer und Seitenzahl zu haben, +ohne die hyperref-Daten: Ähnlich wie die *-Variante des \csa{ref}-Befehls, wenn +das |hyperref|-Paket verwendet wird. Beispielsweise könnte man den Wunsch haben, +eine Einheit oder Seitenzahl in einer Art numerischem Kontext verwenden zu +wollen oder seine Formatierung zu ändern. Diese Funktionalität wird von +\csb{etocthename}, \csb{etocthenumber} und \csb{etocthepage} bereitgestellt. + +Diese Befehle sind aber nicht geschützt, also sollten sie in veränderlichen +Kontexten (zum Beispiel Label-Beschreibungen mit vorangestelltem |\protect|) +verwendet werden. + +\subsection{Der \csbhyp{etoclink}-Befehl} +\label{etoclink} + +Der Befehl \csb{etoclink}\marg{linkname} kann in Linienstil-Beschreibungen +benutzt werden, in ähnlicher Art und Weise wie die argumentlosen Befehle +\csa{etocname}, \csa{etocnumber} und \csa{etocpage}. Er erzeugt einen Link +(falls solch ein von |hyperref| zur |.toc|-Datei hinzugefügt wurde), dessen Ziel +der entsprechende Dokumentteil ist und dessen Name das angegebene Argument ist. +Daher ist |\etoclink{\eotcthename}| das ursprüngliche |\etocname|. Es ist darauf +zu achten, dass wenn |hyperref| nicht damit beauftragt wurde, die Seitenzahl mit +einem Link zu versehen (mittels seiner Option \emph{linktoc=all}), dann hat +\etoc's \csa{etocpage} auch keinen Link, |\etoclink{\etocthepage}| allerdings +schon. + +Der Befehl \csa{etoclink} ist robust. + +\subsection{Die Befehle \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber}, +\csbhyp{etocthelinkedpage} und \csbhyp{etocthelink}} +\label{etocthelinkedname} +\label{etocthelinkednumber} +\label{etocthelinkedpage} +\label{etocthelink} + +Das Folgende ist für fortgeschrittene Anwendungen von fortgeschrittenen +Benutzern. Das \csa{etocthename}-Makro wurde bereits schon einmal erwähnt; +verwendet man es in Anweisungen wie |\global\let\lastone\etocthename| in einem +\etoc line-Stil, definiert das Macro |\lastone| so, dass es sich ausbreitet bis +zum letzten Namen auf dem korrespondieren Level. Jedoch bestand bisher keine +Möglichkeit, dass Gleiche auch für die Link-Daten zu tun. + +Das in diesem Paket enthaltene \csa{etocthelinkedname} stellt dies nun zur +Verfügung, inklusive der Link-Daten. Es wurde in dieser Dokumentation benutzt +bei Erstellung der \hyperref[tocastree]{Beispiele mit Bäumen}. + +Ebenfalls bereit gestellt mit ähnlichen Funktionen: \csa{etocthelinkednumber}, +\csa{etocthelinkedpage} (welches nur einen Link enthält, wenn |hyperref| einen +zu dieser Seitenzahl hinzugefügt hat) und \csa{etocthelink}\marg{linkname}, +welches es erlaubt einen Link mit einem beliebigen Name zu erstellen. + +All diese Befehle sind \emph{nicht} robust. + +Beispiel\begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{S. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% + \texttt{enumitem}-Umgebung): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup + +\begin{verbatim} +Beispiel\begingroup + \etocsetstyle {section} + {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]} + {\global\let\TmpEtocNumber\etocthelinkednumber + \global\let\TmpEtocName\etocthelinkedname + \global\let\TmpEtocPage\etocthelinkedpage } +% Obiges ist erforderlich, da \item, hier in itemize*, eine Gruppe schließt. + {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\ + (\emph{S. \TmpEtocPage})} + {\end{itemize*}.}% + \etocsetnexttocdepth {section}% + \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-% + \texttt{enumitem}-Umgebung): }{}% + \etocinline\tableofcontents \ref{toc:globalcmds} +\endgroup +\end{verbatim} + +\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. + +\etocdepthtag.toc {globalcmds} + +\part{Befehle für den toc-Display-Stil} +\label{part:globalcmds} + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents \label{toc:globalcmds} + + +\section{Festlegung des toc-Display-Stils} + + +Der \emph{toc display}-Stil gibt an, ob das Inhaltsverzeichnis mit mehreren +Spalten erscheint oder nur mit einer, ob der Titel gesetzt ist wie in der +|article|- oder |book|-Klasse, oder ob er über den Einträgen zentriert sein +soll, mit Regeln an der Seite, oder ob das gesamte Inhaltsverzeichnis in einen +Rahmen gepackt werden soll. Entscheidet man sich bspw. für eine einheitliche +Ãœberschrift und ein Ein-Spalten-Layout, so verwendet man dafür folgende Befehle: +\begin{verbatim} +\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents) +shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title}) +\end{verbatim} + +\subsection{Der Befehl \csbhyp{etocsettocstyle}} +\label{etocsettocstyle} + +Dies ist ein Befehl mit zwei notwendigen Argumenten: +% +\centeredline{\csb{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}} +% +Der \marg{before\_toc}-Teil ist verantwortlich für den Schriftsatz der +Ãœberschriften, so kann er beispielsweise etwas sein wie +\starit{section}|{\contentsname}|. + +Generell gesprochen, sollte diese Ãœberschrift \TeX{} im "`Vertikal-Modus"' +lassen, wenn der eigentliche Schriftsatz des Inhalts beginnt: die Linienstile +(entweder von den Standardklassen oder den Paketlinenstilen) erwarten alle im +`Vertikal-Modus' zu starten. + +Das erste Argument von \csb{etocsettocstyle} kann auch Instruktionen beinhalten, +um die Seitenüberschriften zu markieren. Oder es kann prüfen (|book|-Klasse), ob +der Zwei-Spalten-Modus eingeschaltet ist, um dann zum Ein-Spalten-Modus zu +wechseln. Der \meta{after\_toc}-Teil würde dann wieder den Ein-Spalten-Modus +aktivieren. + +Die im Folgenden beschriebenen Befehle \csb{etocmulticolstyle}, +\csb{etocruledstyle} und \csb{etocframedstyle} rufen alle \csa{etocsettocstyle} +als Subroutine auf, um eine \texttt{Mehr\-spalten}-Umgebung mit Hilfe von +\marg{before\_toc} zu starten, welche mit \marg{after\_toc} wieder geschlossen +wird. + +\subsection{Die Befehle \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol} und +\csbhyp{etoclocalmulticol}} +\label{etocmulticolstyle} +\label{etocmulticol} +\label{etoclocalmulticol} + +Dies ist ein Befehl mit einem optionalen und einem notwendigen Argument: +% +\centeredline{\csb{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}} +% +Die +\oarg{number\_of\_coloumns} können von 1 bis 10 gehen (default: 2; ist der Wert +1, so wird natürlich keine |multicols|-Umgebung angelegt). Das \meta{heading} +wird typischerweise `vertikaler' Art sein, also wie: \meta{heading} = +|\section*|\marg{title}, aber man kann auch horizontale Dinge realisieren wie +|\fbox{Hallo Welt}| (\etoc fügt automatisch ein |\par| ans Ende des +"`heading"'-Arguments von \csb{etocmulticolstyle}). Hier ist einmal exemplarisch +dargestellt, wie das Haupt-Inhaltsverzeichnis dieses Dokuments konfiguriert +wurde: +\begin{verbatim} +\etocmulticolstyle{\noindent\bfseries\Large + \leaders\hrule height1pt\hfill + \MakeUppercase{Table of Contents}} +\end{verbatim} +Nach \csa{etocmulticolstyle} haben alle zukünftigen \csa{tableofcontents} den +spezifizierten Stil, falls es zwischendurch nicht mehr geändert wird. Eine +kürzere Variante für nur ein Inhaltsverzeichnis ohne Einfluss auf spätere ist: +\centeredline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} oder +\centeredline{\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}.} + +\subsubsection{Der Befehl \csbhyp{etoctocstyle}} +\label{etoctocstyle} + +\centeredline{\csb{etoctocstyle}\oarg{kind}% +\marg{number\_of\_columns}\marg{title}} +\centeredline{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% +|{\kind*{|\itshape title\upshape|}}|} +Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Standardwert ist +|chapter| oder |section|, abhängig von der Dokumentklasse. + +\paragraph{\texorpdfstring{\csbhyp{etoc\-toc\-style\-with\-marks}}{etoctocstylewithmarks}}% +\leavevmode\unskip{\color{blue}\oarg{kind}\marg{number\_of\_columns}\marg{title}\marg{mark}} +\label{etoctocstylewithmarks} +\label{etoctocstylewithmarksnouc} + +\centeredline +{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|% +|{\kind*{|\itshape title \ttfamily\upshape\string\markboth% +|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|} +Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Die wirkliche Anzeige der +Markierungen ("`marks"') hängt vom Seitenstil ab. Es gibt die Variante +\csb{etoctocstylewithmarksnouc}, welche Großschreibung unterdrückt. + +\paragraph{Möchten wir wirklich pargraph-Einträge im Inhaltsverzeichnis?} + +\paragraph{Wirklich?} + +\subsection{Die Befehle \csbhyp{etocruledstyle}, \csbhyp{etocruled} und + \csbhyp{etoclocal\-ruled}} +\label{etocruledstyle} +\label{etocruled} +\label{etoclocalruled} + +Das generelle Format von \csa{etocruledstyle} ist: +\centeredline{\csb{etocruledstyle}% + \oarg{number of columns}\marg{title of the toc}} +\noindent +Der Titel ist horizontales Material (der |LR|-Modus von \emph{\LaTeX{}, ein +Dokument-Vorbereitung-System,}): wenn es nicht in eine Zeile passt, dann sollte +es in eine \csa{parbox} mit einer gegebenen Weite geschrieben werden. Der grüne +Rahmen für die Ãœberschrift des Inhaltsverzeichnisses zu \hyperref[toc:a]{Beginn +des zweiten Teils dieses Dokuments} wurde erzeugt durch: +\begin{verbatim} +\etocruledstyle[1]{\etocfontminusone\color{green}% + \fboxrule1pt\fboxsep1ex + \framebox[\linewidth] + {\normalcolor\hss Contents of this part\hss}} +\end{verbatim} + +Eine kürzerer Weg den Stil zu setzen mit \csb{etocruledstyle} und dann einen +\csa{tableofcontents} zu erstellen, alles zusammen in einer Gruppe damit +zukünftige Inhaltsverzeichnisse nicht betroffen sind, ist: +\centeredline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}} + +\subsection{Die Befehle \csbhyp{etocframedstyle}, \csbhyp{etocframed} +und \csbhyp{etoclocal\-framed}} +\label{etocframedstyle} +\label{etocframed} +\label{etoclocalframed} + +Die gleiche Arbeitsweise: +% +\centeredline{\csb{etocframedstyle}\oarg{number\_of\_columns}\marg{title}} +und die passende Abkürzung: +% +\centeredline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} +Diese wird +verwendet, wenn man nicht den Stil zukünftiger Inhaltsverzeichnisse modifizieren +will (eine ändere Möglichkeit wäre es, das Ganze in Klammern zu packen oder +innerhalb eines |\begingroup...\endgroup|; es gibt auch noch einen +\csa{etoclocalframed} für ein lokales Inhaltsverzeichnis). + +Das gesamte Inhaltsverzeichnis ist eingerahmt. Der Titel selbst aber nicht: +Möchte man das erreichen, dann muss man das im \meta{title}-Argument mit +\csa{etocframedstyle} oder \csa{etocframed} festhalten. Die Farben für den +Hintergrund und der anderen Komponenten (oben, links, rechts, unten) des Rahmens +sind festgelegt mittels geeigneter |\renewcommand|'s (siehe +\autoref{ssec:customdisplay}). + +Eine |minipage| wird benutzt, von daher ist das produzierte Inhalsverzeichnis +nicht kompatibel mit Seitenumbrüchen. Um diese zu erlauben, wird empfohlen, die +Befehle +\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}} +oder +\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}} +in den Argumenten von \csb{etocsettocstyle} zu verwenden. + +Beispiele in diesem Dokument findet man auf den Seiten \pageref{toc:d}, +\pageref{toc:floating}, \pageref{toc:b} und \pageref{toc:clone}. + +\subsection{Ãœberschriften, Titel, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}} +\label{etocinnertopsep} +\label{etocoldpar} + +Das für \csb{etocmulticolstyle} notwendige \meta{heading}-Argument kann entweder +Vertikal-Modus-Material sein wie |\section*{\emph{Inhaltsverzeichnis}}| oder die +horizontale Variante wie das einfache |\etocmulticolstyle{Hallo Welt}|. + +Es kann kein explizites |\par| oder eine Leerzeile in das notwendige Argument +von \csb{etocmulticolstyle} eingefügt werden, aber \etoc stellt \csb{etocoldpar} +als Ersatz bereit: Es fügt |\let\etocoldpar\par| vor der |multicols|-Umgebung +ein und eben dieses |\etocoldpar|\footnote{Dieser Befehl \csa{etocoldpar} (= +funktionierendes \csa{par} im Argument von \csa{etocmulticolstyle}) ist nicht +verwandt mit dem Schalter \csb{etocinline}, dessen Zweck es ist \etoc +mitzuteilen, kein \csa{par} vor dem Inhaltsverzeichnis auszuführen.} am Ende der +Ãœberschrift ein, und macht dann noch einen vertikalen Sprung der Größe +\csa{etocinnertopsep}. + +Auf der anderen Seite erwarten die Befehle \csb{etocruledstyle} und +\csb{etocframedstyle} ein Argument im "`LR-Modus"' (um die Terminologie von +\emph{\LaTeX, a document preparation system} zu nutzen). Das bedeutet, dass +mehrzeilige Titel nur möglich sind, wenn man sie in etwas wie eine \csa{parbox} +einschließt. + +Eine wichtige Größe verwendet von sowohl \csb{etocmulticolstyle}, +\csb{etocruledstyle} als auch \csb{etocframedstyle} ist \csb{etocinnertopsep}. +Es gibt an, wieviel Platz zwischen den Ãœberschriften und dem Start des Inhalts +liegen soll. Der Default-Wert ist |2ex| und man kann es mittels +|\renewcommand*{\etocinnertopsep}|\marg{neuer\_Wert} ändern, nicht mit +|\setlength|. + +\subsection{Der Kompatibilitätsmodus \csbhyp{etocstandarddisplaystyle}} +\label{etocstandarddisplaystyle} + +\etoc wird dann das emulieren, für was eigentlich die Dokument-Klasse +verantwortlich ist, in Bezug auf den globalen Display-Stil des +Inhaltsverzeichnisses. Allen Änderung von innerhalb der Klasse sollten +berücksichtigt werden. + +\subsection{Der Befehl \csbhyp{etoc\-inline}} +\label{etocinline} +\label{etocnopar} + +Mit \csb{etocinline} oder seinem Synonym |\etocnopar|, dem +|\tableofcontents|-Befehl und seinen Varianten wird \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. + +\section{Gesternde Varianten des \csbhyp{tableofcontents} etc. Befehls} +\label{tableofcontents*} +\label{localtableofcontents*} +\label{etocaftertitlehook} +\label{etocaftercontentshook} +\label{etocmemoirtoctotocfmt} + +Die Befehle \toc, \localtoc, \csa{etocmulticol} und all ihre Cousins und +Varianten haben Stern-Varianten (der Stern muss vor den anderen Argumenten +kommen). Für alle Klassen außer |memoir| verhalten diese sich wie die Originale. +Für |memoir| jedoch, schreibt das Original einen Eintrag in die |.toc|-Datei, +genau so wie die Verwendung des echten \toc Befehls in dieser Klasse, während +aber die Stern-Variante genau das nicht tut, wie es in |memoir| die Regel ist. + +Sobald man damit beginnt, lokale Inhaltsverzeichnisse zu benutzen merkt man, +dass der |memoir|-Standard, welcher dazu gedacht ist, einen |chapter|-Eintrag +für jedes Inhaltsverzeichnis zu erzeugen, nicht praktisch ist. Der Befehl +\csb{etocmemoirtoctotocfmt}\marg{Typ}\allowbreak\marg{name} ändert das Format +(\meta{Typ} ist wieder |chapter|, |section|, |subsection| etc. und \meta{name} +kann bspw. \csa{contentsname} sein.) Die Standardwerte für diese Größen sind +|chapter| und |\contentsname|. + +Das Format der tatsächlichen Ãœberschrift des Inhaltsverzeichnisses sollte +ebenfalls ordnungsgemäß gesetzt werden (z.\,B. mit \csa{etoctocstyle}), um +einfach die selbe Einheitsgröße zu nutzen wie im ersten Argument von +\csa{etocmemoirtoctotocfmt}. + +Eine ungewöhnliche Situation tritt auf, wenn man zwei aufeinanderfolgende +\csa{localtableofcontents} hat (offensichtlich ist das eine nicht sehr +wahrscheinliche Situation), direkt nach einem \csa{part} zum Beispiel. Der erste +würde dann eine Kapitelüberschrift erzeugen (wenn der Standard nicht geändert +wurde, wie oben angedeutet), welche in die |.toc|-Datei geschrieben werden +würde. Das zweite Inhaltsverzeichnis denkt dann, es ist ein lokales zu diesem +Kapitel gehörig und würde aus diesem Grund nichts darstellen. Die Lösung für +dieses Problem ist es, das zweite als Klon des ersten zu definieren. + +Unabhängig von der Situation hat man bei der |memoir|-Klasse immer ein +Hook-Makro namens \csb{etocaftertitlehook}, welches man unterdrückt, indem man +die Stern-Varianten der Darstellungsbefehle nutzt. Außer für die |memoir|-Klasse +ist dieser Hook dazu gedacht, überhaupt nichts zu tun. Außerdem gibt es noch +\csb{etocaftercontentshook}, ähnlich definiert, um nichts zu tun. Sie können für +einige spezielle Effekte genutzt werden. + +\section{Das In\-halts\-ver\-zeic\-hnis von die\-sem Teil} + +\subsection{Ãœber\-prü\-fen des Kom\-pa\-tibilitäts\-modus} + +Als drittes Beispiel wollen wir nun das Inhaltsverzeichnis dieses Teils setzen. +Dazu wollen wir zuerst den Kompatibilitätsmodus testen.\footnote{Dieses +Dokument wurde als |scrartcl| gesetzt. Wir wollen nun testen, ob +der Kompatibilitätsmodus des \etoc-Pakets die Anpassungen innerhalb der +Klassenbefehle umsetzt.} Das ursprüngliche Inhaltsverzeichnis ist +unsichtbar und wurde am Anfang von \autoref{part:globalcmds} definiert, +wobei es mit einem Label versehen wurde. +\begin{verbatim} +\KOMAoptions{toc=left} +\etocstandarddisplaystyle % wird benötigt, damit toc=left gilt +\etocstandardlines +\tableofcontents \ref{toc:globalcmds} +\end{verbatim} +\KOMAoptions{toc=left} +\etocstandarddisplaystyle +\etocstandardlines +\tableofcontents \ref{toc:globalcmds} + +\subsection{Ein In\-halts\-ver\-zeich\-nis mit Rahmen} + +Als nächstes wollen wir ein gerahmtes Inhaltsverzeichnis erzeugen, wobei wir den +vom Paket vorgegebenen Linienstil nutzen und ein paar Farben hinzufügen wollen. +(Es wurde in eine Float-Umgebung eingefügt, die man \vpageref{toc:b} +findet.)\footnote{Innerhalb der |figure|-Umgebung und vor dem gerahmten +Inhaltsverzeichnis, welches die Option |multicols| nutzt, haben wir den Befehl +\csa{normalcolor} eingefügt, um einen Bug zu umgehen, der durch die Interaktion +zwischen |multicols|, |color| und der |figure|-Umgebung entsteht. (Wir brauchen +den Befehl \csa{color\{red\}} in der |.toc|-Datei.) Der Fehler wird nicht durch +das \etoc-Paket verursacht.} + +\begin{verbatim} +\etocdefaultlines +\begingroup +\renewcommand{\etoccolumnsep}{2em} +\renewcommand{\etocinnerleftsep}{1.5em} +\renewcommand{\etocinnerrightsep}{1.5em} +% Befehle für die Hintergrundfarbe des Inhaltsverzeichnisses +\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} +% Befehle für die Rechtecke vor und nach dem Inhalt des Verzeichnisses +\renewcommand{\etoctoprule}{\hrule height 1pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} +\renewcommand{\etocbottomrule}{\hrule height 1pt} +\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} +% Befehle für die Rechtecke links und rechts des Inhaltsverzeichnisses +\renewcommand{\etocleftrule}{\vrule width 5pt} +\renewcommand{\etocrightrule}{\vrule width 5pt} +\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} +\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} +% mit \fcolorbox legen wir einen farbigen Rahmen für den Titel an +\fboxrule1pt +\renewcommand{\etocbelowtocskip}{0pt\relax} +\etocframedstyle {\normalsize\rmfamily\itshape + \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering + Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches + jedoch nur die Abschnitte und Unterabschnitte dieses Teils + enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite. + Es hat das Label |toc:b|.}}} +\begin{figure}[ht!] + \centering +\normalcolor % Workaround für einen Bug von color und multicols (und figure) +\tableofcontents \label{toc:b} \ref{toc:globalcmds} +\end{figure} +\endgroup +\end{verbatim} + + +\etocdefaultlines +\begingroup +\renewcommand{\etoccolumnsep}{2em} +\renewcommand{\etocinnerleftsep}{1.5em} +\renewcommand{\etocinnerrightsep}{1.5em} +% specify a background color for the toc contents +\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}} +% set up the top and bottom rules +\renewcommand{\etoctoprule}{\hrule height 1pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red!25}} +\renewcommand{\etocbottomrule}{\hrule height 1pt} +\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}} +% set up the left and right rules +\renewcommand{\etocleftrule}{\vrule width 5pt} +\renewcommand{\etocrightrule}{\vrule width 5pt} +\renewcommand{\etocleftrulecolorcmd}{\color{red!25}} +\renewcommand{\etocrightrulecolorcmd}{\color{red!25}} +% use \fcolorbox to set up a colored frame for the title +\fboxrule1pt +\renewcommand{\etocbelowtocskip}{-.5\baselineskip\relax} +\etocframedstyle {\normalsize\rmfamily\itshape + \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering + Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches + jedoch nur die Abschnitte und Unterabschnitte dieses Teils + enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite. + Es hat das Label |toc:b|.}}} +\begin{figure}[ht!] + \centering +\normalcolor % work-around to a bug involving color and multicols (and figure) +\tableofcontents \label{toc:b} \ref{toc:globalcmds} +\end{figure} +\endgroup + +% Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le +% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder +% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle +% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie +% donc un problème d'interaction avec multicol là. à voir. Pas le temps +% maintenant. + +% 2013/10/14 +% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec +% etoc: +% http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure +% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor +% _avant_ le multicols à l'intérieur de figure + +\subsection{Eine (verrückte) In\-line-Dar\-stellung} + +Nun wollen wir eine etwas verrückte Inline-Darstellung erzeugen, womit das +Inhaltsverzeichnis des gesamten Dokuments gesetzt werden soll. Hier werden die +Unterabschnitte als Fußnoten dargestellt. Diese Art der Darstellung bietet sich +eher für verlinkte Dokumente an, weniger für gedruckte! (Mir hingegen gefällt +diese Art der Darstellung, obwohl mein Geschmack scheinbar oft nicht geteilt +wird.) + +%%%% Note: 27 april 2014 + +%%%% except for a miraculous situation depending from the quantity of previous +%%%% material this TOC will have links extending accross pagebreaks, which +%%%% dvipdfmx does not know how to handle completely. Apart from that the output +%%%% is ok, thus no need to try seriously to avoid them. + +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape}{\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, }{\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; } + {\etocname} + {\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection}{ (\itshape\etocskipfirstprefix} + {, }{\etocname}{\/\upshape)} +\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par} +\tableofcontents \label{toc:crazyinline} +\endgroup + +Zur Erzeugung dieses Inhaltsverzeichnisses wurde folgender Code genutzt: +\begin{verbatim} +\begingroup +\newsavebox{\forsubsections} +\etocsetstyle{part}{\upshape. \etocskipfirstprefix}{. \upshape} + {\bfseries\etocname:~~}{} +\etocsetstyle{section}{\itshape\etocskipfirstprefix}{, } + {\mdseries\etocname}{} +\etocsetstyle{subsection} + {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix} + {; }{\etocname}{\end{lrbox}\footnote{\unhbox\forsubsections.}} +\etocsetstyle{subsubsection} + { (\itshape\etocskipfirstprefix}{, }{\etocname}{\/\upshape)} +\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par} +\tableofcontents +\endgroup +\end{verbatim} + +\etocdepthtag.toc {custom} + +\part{\etoc nutzen und an\-passen} +\label{part:custom} +\thispartstats + +\etocdefaultlines +\renewcommand{\etoctoprule}{\hrule height2pt depth0pt} +\renewcommand{\etoctoprulecolorcmd}{\color{red}} + +\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}% + \fbox{\parbox{.8\linewidth}{\centering\normalcolor Dies ist das + Inhaltsverzeichnis mit den Abschnitten und Unterabschnitten von + diesem Teil. Es hat das Label |toc:c|.}}} + +\localtableofcontents \label{toc:c} + +\section{Ãœber\-blick über die Grund\-befehle zur Stil\-bearbeitung} + +\subsection{Ein lokales Inhalts\-ver\-zeich\-nis an\-passen} +\hbox{\color{green}\fboxrule1pt\fboxsep1em +\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links}}% +\framebox[\linewidth][c] +{\vbox{\hsize\wd0\normalcolor\noindent +\csa{etocsetstyle}\marg{Name der Ebene}% + \marg{Start}\marg{Präfix}\marg{Inhalt}\marg{Abschluss}\\ +\csa{etocname}, \csa{etocnumber}, \csa{etocpage}, +\csa{etocifnumbered}\marg{A}\marg{B}\\ +\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links} +}}} + +\subsection{Das Aus\-sehen eines Inhalts\-ver\-zeichnisses an\-passen} +\medskip +\hbox{\color{green}\fboxrule1pt\fboxsep 1em +\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{Ebene}% +\marg{Anzahl der Spalten}\marg{Titel}\marg{Symbol}}% +\framebox[\linewidth][c] +{\vbox{\hsize\wd0 +\normalcolor\noindent +\csa{etocmulticolstyle}\oarg{Anzahl der Spalten}\marg{Ãœberschrift}\\ +\csa{etoctocstyle}\oarg{Ebene}\marg{Anzahl der Spalten}\marg{Titel}\\ +\csa{etoctocstylewithmarks}\oarg{Ebene}\marg{Anzahl der Spalten}% +\marg{Titel}\marg{Symbol}\\ +\csa{etoctocstylewithmarksnouc}\oarg{Ebene}\marg{Anzahl der Spalten}% +\marg{Titel}\marg{Symbol}\\ +\csa{etocruledstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\ +\csa{etocframedstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\ +\csa{etocsettocstyle}\marg{vor dem Inhaltsverzeichnis}\marg{nach dem Inhaltsverzeichnis}}}} + +\subsection{In\-halts\-ver\-zeich\-nisse dar\-stellen} +\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em + \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, + \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \framebox[\linewidth][c] + {\vbox{\hsize\wd0\normalcolor\noindent + \toc\\ + \localtoc\\ + \csa{etocmulticol}\oarg{Anzahl der Spalten}\marg{Ãœberschrift}\\ + \csa{etoclocalmulticol}\oarg{Anzahl der Spalten}\marg{Ãœberschrift}\\ + \csa{etocruled}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \csa{etoclocalruled}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \csa{etocframed}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \csa{etoclocalframed}\oarg{Anzahl der Spalten}\marg{Titel}\\ + \hbox{}{\itshape\ttfamily\ \ \ \ und die mit Sternchen versehenen Varianten} + }}} + +\subsection{Label und Referenzen} + +Optional dürfen die Befehle für Label oder Referenzen auf die Befehle, die die +Darstellung des Inhaltsverzeichnisses realisieren, folgen. Hierbei ist +unwichtig, ob letztere mit Sternchen versehen sind oder nicht.\par + +\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em + \setbox0\hbox{\csa{etocname}, \csa{etocnumber}, + \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}% + \framebox[\linewidth][c] + {\vbox{\hsize\wd0\normalcolor\noindent + \toc \csa{label}|\{toc:here\}|\\ + \toc \csa{ref}|\{toc:far\}| \\ + \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\ + \localtoc \csa{label}|\{toc:here\}|\\ + \hbox{}{\itshape\ttfamily\ \ \ \ \ }% + \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich} + }}} + + +\medskip Ein \csa{ref}-Befehl, der auf einen Befehl zur Erzeugung eines lokalen +Inhaltsverzeichnisses folgt, hat \emph{keinen} Einfluss auf diesen. Wird ein +anderes Inhaltsverzeichnis erneut dargestellt, so wird nur dessen Inhalt +angepasst. Sowohl das Aussehen des Inhaltsverzeichnisses als auch die +Darstellung seiner Linien orientieren sich an dem, das gerade definiert wurde +und nicht an dem, von dem der Inhalt übernommen wurde. + +\section{Der Linien\-standard des Pakets: \csbhyp{etoc\-defaultlines}} +\label{etocdefaultlines} + +Die Linienstile stammen bereits aus einer frühen Entwicklungsphase des Pakets, +weswegen sie sich noch sehr an \TeX{} orientieren und dadurch gruselig aussehen. +Daher bieten sie keinen guten Einstiegspunkt. Oft muss man, will man an dem Stil +etwas ändern, diesen aus dem Quellcode kopieren und direkt bearbeiten. Trotzdem +soll in diesem Abschnitt erläutert werden, wie die Schriftarten, die vertikalen +Abstände, etc. des gewählten Linienstils verändert werden können. + +Wurden die vorgegebenen Linienstile nicht durch \csa{etocsetstyle} verändert, so +kann man sie mit den Befehlen \csa{etocdefaultlines} bzw. \csa{etoctoclines} +einschalten. Außer, dass der Einzug eines Unterabschnitts etwas kleiner ist als +der eines Abschnitts, gleichen sich beide Gliederungsebenen. (Wie dieses +Dokument zeigt, werden Abschnitte in Dokumentklassen, denen der Befehl +\csa{chapter} fehlt, stets mit einer fettgedruckten Type gesetzt.) +Unter-Unterabschnitte werden inline, im selben Paragraphen und ohne Nummer oder +Seitenzahl dargestellt. Dieser Stil wurde für Dokumente, die viele +Unter-Unterabschnitte enthalten, entwickelt und anschließend mit solchen +getestet. Für derartige Dokumente sollte ein zweispaltiges Layout verwendet +werden, da diese Darstellung kompakter ist als jene, die standardmäßig durch +\LaTeX{} erzeugt wird.\footnote{Außerdem werden dadurch einzelne Teil- bzw. + Kapiteleinträge am Ende einer Seite oder einer Spalte vermieden, solange diese + weiter untergliedert sind.} Verwendet man hingegen ein einspaltiges Layout und +enthält der Teil nur wenige Unter-Unterabschnitte, so wird das +Inhaltsverzeichnis im Vergleich zur mit \LaTeX{} gesetzten Variante etwas in die +Breite gezogen. Weiterhin wirkt diese Darstellung weniger hierarisch als der +\LaTeX{}-Standard, da sich die Darstellung von Abschnitten und Unterabschnitten +kaum unterscheidet. (Dies gilt besonders, wenn die Dokumentklasse den Befehl +\csa{chapter} erlaubt.) + +Da wir für das \hyperref[toc:main]{zentrale Inhaltsverzeichnis} +|\etocsetlevel{subsection}{3}| gesetzt haben, werden die Unterabschnitte und die +Unter-Unterabschnitte inline dargestellt. + +Im Gegensatz dazu wollen wir nun das zentrale Inhaltsverzeichnis so darstellen, +als ob wir eine Dokumentklasse genutzt hätten, die den Befehl \csa{chapter} +erlaubt. Daher werden die Abschnitte im Folgenden als Kapitel und die +Unterabschnitte als Abschnitte gedruckt, was wir u. a. mit Hilfe des Befehls +\csa{etocsetlevel} erreichen. Zusätzlich nutzen wir für Abschnitte, welche in +Wirklichkeit unsere Unterabschnitte sind, statt der fetten Serie einer +Schriftart die halbfette Variante. Hierfür modifizieren wir den Befehl +\csa{etocfontone}. Weiterhin nutzen wir einen gepunkteten Einzug, da dieser +weniger Platz einnimmt als der Paketstandard. + +\begin{verbatim} +\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape + \fbox{\parbox{.6\linewidth}{ + \leftskip 0pt plus .5fil + \rightskip 0pt plus -.5fil + \parfillskip 0pt plus 1fil + Dies ist das zentrale zweispaltige Inhaltsverzeichnis, das den + Standardlinienstil von \etoc nutzt, wobei die Abschnitte wie Kapitel und die + Unterabschnitte wie Abschnitte gesetzt wurden. }}} +\etocdefaultlines +\etocsetnexttocdepth{1} +\begingroup +\etocsetlevel{section}{0} +\etocsetlevel{subsection}{1} +\renewcommand*{\etocfontone}{\normalfont \normalsize} +\renewcommand*{\etoctoclineleaders} + {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} +\sloppy +\tableofcontents +\endgroup +\end{verbatim} + +\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape + \fbox{\parbox{.6\linewidth}{ + \leftskip 0pt plus .5fil + \rightskip 0pt plus -.5fil + \parfillskip 0pt plus 1fil Dies ist das zentrale zweispaltige + Inhaltsverzeichnis, das den Standardlinienstil von \etoc nutzt, wobei die + Abschnitte wie Kapitel und die Unterabschnitte wie Abschnitte gesetzt + wurden. }}} + +\etocdefaultlines +\etocsetnexttocdepth{1} + +\begingroup +\etocsetlevel{section}{0} +\etocsetlevel{subsection}{1} +\renewcommand*{\etocfontone}{\normalfont \normalsize} +\renewcommand*{\etoctoclineleaders} + {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}} +\sloppy +\tableofcontents +\endgroup + +\section{\etoc individuell an\-passen} + +\subsection{Den durch \etoc vor\-de\-finierten Linien\-stil individualisieren} + +Im Folgenden sollen einfach die wichtigsten Befehle des Pakets aufgelistet werden. Man kann diese +bequem mittels \csa{renewcommand} anpassen: +\begin{verbatim} +\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries} +\newcommand*\etocfontminusone{\normalfont \large \bfseries} +\newcommand*\etocfontzero{\normalfont \large \bfseries} +\newcommand*\etocfontone{\normalfont \normalsize \bfseries} +\newcommand*\etocfonttwo{\normalfont \normalsize} +\newcommand*\etocfontthree{\normalfont \footnotesize} + +\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex} +\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex} +\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex} +\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex} +\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex} +\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex} + +\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil} +\newcommand*\etocminustworightmargin{1.5em plus -0.5fil} +\newcommand*\etocminusoneleftmargin{1em} +\newcommand*\etocminusonerightmargin{1em} + +\newcommand*\etocbaselinespreadminustwo{1} +\newcommand*\etocbaselinespreadminusone{1} +\newcommand*\etocbaselinespreadzero{1} +\newcommand*\etocbaselinespreadone{1} +\newcommand*\etocbaselinespreadtwo{1} +\newcommand*\etocbaselinespreadthree{.9} +\newcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}} +\newcommand*\etocabbrevpagename{p.~} % muss der Sprache angepasst werden + % deutsche Nutzer: \renewcommand*\etocabbrevpagename{S.~} +\newcommand*\etocpartname{\partname} +\newcommand*\etocbookname{Book} % muss der Sprache angepasst werden +\end{verbatim} + +Der Standardlinienstil kann innerhalb der \etoc-Umgebung nicht individualisiert +werden. Wie bereits erwähnt, wird das Paket nach Aufruf des Befehls +\etocstandardlines kaum verwendet und agiert lediglich auf globaler Ebene, +sodass die Einträge des Inhaltsverzeichnisses (hoffentlich) so dargestellt +werden, als ob das Paket \etoc fehlen würde.\footnote{Innerhalb der + KOMA-script-Klassen muss der Befehl \csa{etocstandarddisplaystyle} genutzt + werden, damit die Option |toc=left| auch für die Linieneinträge gilt.} + +Wurde mittels \csa{etocsetlevel} die Tiefe der Gliederung soweit herabgesetzt, +dass \etoc die Befehle für bestimmte Gliederungsebenen kennt, so wirkt der +Kompatibilitätsmodus, also \csa{etocstandardlines}, auch auf diese. Dies gilt +natürlich nur für Gliederungsbefehle, die dem Standard von \LaTeX{} entsprechen +und die alle Definitionen liefern, welche zum Darstellen von Einträgen im +Inhaltsverzeichnis benötigt werden. (Es muss ein Makro der Art \csa{l@irgendwas} +existieren.) + +Sobald der Befehl \csa{etocsetstyle} aufgerufen wird, wird zusätzlich der +Kompatibilitätsmodus ausgeschaltet. Es spielt hierbei keine Rolle, ob der Befehl +in der Präambel oder im Hauptteil des Dokuments steht. + +\subsection{Die Dar\-stellung eines Inhalts\-ver\-zeich\-nisses an\-spassen} +\label{ssec:customdisplay} + +Erneut wollen wir uns darauf beschränken die relevanten Makros aufzulisten, da +deren Funktion aus ihrem Namen ableitbar ist. Soll die Länge eines Befehls +verändert werden, so muss der entsprechende Befehl mittels \csa{renewcommand} +und nicht durch \csa{setlength} verändert werden. Weiterhin erlauben Befehle, +welche die Farbe verändern, nicht nur die Standardfarben. Will man ihr Verhalten +ändern, so muss man in der neuen Definition den Befehl \csa{color} aufrufen. Um +ihre Wirkung zu beenden, muss man sie so neu definieren, dass sie danach nur den +Befehl \csa{relax} enthalten. +\begin{verbatim} +\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex} +\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex} + +\newcommand*\etoccolumnsep{2em} +\newcommand*\etocmulticolsep{0ex} +\newcommand*\etocmulticolpretolerance{-1} +\newcommand*\etocmulticoltolerance{200} +\newcommand*\etocdefaultnbcol{2} +\newcommand*\etocinnertopsep{2ex} +\newcommand*\etoctoprule{\hrule} +\newcommand*\etoctoprulecolorcmd{\relax} + +% nur für gerahmte Inhaltsverzeichnisse: +\newcommand*\etocinnerleftsep{2em} +\newcommand*\etocinnerrightsep{2em} +\newcommand*\etocinnerbottomsep{3.5ex} + +\newcommand*\etocleftrule{\vrule} +\newcommand*\etocrightrule{\vrule} +\newcommand*\etocbottomrule{\hrule} +\newcommand*\etocleftrulecolorcmd{\relax} +\newcommand*\etocrightrulecolorcmd{\relax} +\newcommand*\etocbottomrulecolorcmd{\relax} + +\newcommand*\etocbkgcolorcmd{\relax} + +% Haken +\newcommand\etocframedmphook{\relax} +\end{verbatim} + +Der Befehl \csa{etocframedmphook} ist direkt hinter dem Anfang einer Minipage, +innerhalb der der Inhalt eines gerahmten Verzeichnisses gesetzt wird, verankert. + +Wurden die Farbbefehle, also \csa{...colorcmd}, nicht verändert, so expandieren +sie lediglich zu \csa{relax}. (Daher muss man für ihre Verwendung nicht die +Pakete |color| oder |xcolor| einbinden.) Hat man jedoch einen solchen Befehl - +wie zum Beispiel \csa{etocbkgcolorcmd} - so verändert, dass er nun tatsächlich +eine Farbe anzeigt, so kann dies nur mittels +|\renewcommand{\etocbkgcolorcmd}{\relax}| aufgehoben werden und nicht durch +\csa{let}\csa{etocbkgcolorcmd}\csa{relax}. + +Wie man an dem Beispiel \centeredline{|\renewcommand{\etoctoprule}{\hrule height + 1ex}|} erkennen kann, werden die Größen des oberen Rechtecks in den Maßen +|ex| und |em| angegeben. + +Sobald der Titel während der Befehlsausführung von \csa{etocruledtoc} oder +\csa{etocframedtoc} gesetzt wurde, nutzt der Paketcode dessen Schriftgröße, um +die Bedeutung von \glq1ex\grq~zu ermitteln. Natürlich dürfen auch die anderen +Befehle zur Erzeugung eines Rechtecks Maße annehmen, deren Wert sich nur durch +eine zugehörige Schriftgröße ergibt. Hierbei dient jedoch die Schrift vor dem +Inhaltsverzeichnis als Referenz. + +Wie in \TeX{} üblich, werden sowohl das Rechteck vor als auch das nach dem +Inhalt des Verzeichnisses durch einfache Einzüge (einer festgelegten Höhe) +realisiert. Es muss sich hierbei also nicht um echte Rechtecke handeln. Die +Rechtecke links und rechts vom Inhalt werden hingegen nicht durch (horizontale) +Einzüge verwirklicht. Sie stellen vielmehr Objekte einer bestimmten Weite dar. +Daher darf hier \emph{nur} die Syntax von \TeX{}-Befehlen, mit deren Hilfe man +Rechtecke erzeugt, genutzt werden. + +\section{Ein weiteres Bei\-spiel für ein farbiges Inhalts\-verzeichnis} +\label{ssec:tocclone} + +Beim Befehl \csa{etocframedstyle} wird der Titel in der Mitte des oberen Rechtecks positioniert. Dies würde im folgenden Beispiel +jedoch sehr unschön aussehen, weswegen wir den Titel innerhalb der \meta{start}-Umgebung eines Abschnittbefehls +platzieren. Hierdurch wird er innerhalb des Rahmens gesetzt. + +\begin{verbatim} +\begingroup +\definecolor{subsecnum}{RGB}{13,151,225} +\definecolor{secbackground}{RGB}{0,177,235} +\definecolor{tocbackground}{RGB}{212,237,252} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 1cm} +\renewcommand{\etocrightrule}{\vrule width .5cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} + {\shiftedwhiterule{\leftskip}{6pt}} + {\sffamily\footnotesize + \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent + \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% + \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill + \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par + \nointerlineskip\vskip3pt} + {} + +\etocsetstyle{subsection}{\etocskipfirstprefix} + {\shiftedwhiterule{1.5cm}{6pt}} + {\sffamily\small + \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent + \hbox to 1cm{\color{subsecnum}\etocnumber\hss}% + \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill + \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par + \nointerlineskip\vskip6pt} + {} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % Auch ohne Rahmen nutzt \colorbox den Befehl \fboxsep! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +\etocsetstyle{section} +{\coloredstuff{white} + {\hfil \hyperref[toc:b]{\bfseries\large Ich bin der Zwilling von + diesem Verzeichnis (Klick mich an!)}\hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} + +\etocframedstyle[1]{} +\tableofcontents \label{toc:clone} \ref{toc:globalcmds} +\endgroup +\end{verbatim} + +\begingroup +\definecolor{subsecnum}{RGB}{13,151,225} +\definecolor{secbackground}{RGB}{0,177,235} +\definecolor{tocbackground}{RGB}{212,237,252} + +\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}} +\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}} +\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}} + +\renewcommand{\etocleftrule}{\vrule width 1cm} +\renewcommand{\etocrightrule}{\vrule width .5cm} +\renewcommand{\etocbottomrule}{\hrule height 12pt} +\renewcommand{\etoctoprule}{\hrule height 12pt} + +\renewcommand{\etocinnertopsep}{0pt} +\renewcommand{\etocinnerbottomsep}{0pt} +\renewcommand{\etocinnerleftsep}{0pt} +\renewcommand{\etocinnerrightsep}{0pt} + +\newcommand\shiftedwhiterule[2]{% + \hbox to \linewidth{\color{white}% + \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip +\vskip#2} + +\etocsetstyle{subsubsection}{\etocskipfirstprefix} +{\shiftedwhiterule{\leftskip}{6pt}} +{\sffamily\footnotesize +\leftskip2.5cm\hangindent1cm\rightskip1cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par +\nointerlineskip\vskip3pt} +{} + +\etocsetstyle{subsection}{\etocskipfirstprefix} +{\shiftedwhiterule{1.5cm}{6pt}} +{\sffamily\small +\leftskip1.5cm\hangindent1cm\rightskip1cm\noindent +\hbox to 1cm{\color{subsecnum}\etocnumber\hss}% +\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill +\rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par +\nointerlineskip\vskip6pt} +{} + +\newcommand{\coloredstuff}[2]{% + \leftskip0pt\rightskip0pt\parskip0pt + \fboxsep0pt % \colorbox uses \fboxsep also when no frame! + \noindent\colorbox{secbackground} + {\parbox{\linewidth}{% + \vskip5pt + {\noindent\color{#1}#2\par}\nointerlineskip + \vskip3pt}}% + \par\nointerlineskip} + +% v1.07l on the occasion of traduction into German documentation + % APRIL 26, 2014 Improvement in the section style for better placement of + % page number when the section name is more than one line long. Use of + % \makebox rather than \hbox, to be more LaTeX like. +\etocsetstyle{section} +{\coloredstuff{white} + {\hfil \hyperref[toc:b] + {\bfseries\large Ich bin der Zwilling von diesem + Verzeichnis (Klick mich an!)}% + \hfil}} +{\vskip3pt\sffamily\small} +{\coloredstuff{white} + {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip + \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}% + \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}% + \vskip6pt } +{} + +\etocframedstyle[1]{} + +\begin{figure}[ht!]\centering + \tableofcontents \label{toc:clone} \ref{toc:globalcmds} +\end{figure} +\endgroup + +Das Inhaltsverzeichnis befindet sich in einer +\hyperref[toc:clone]{float}-Umgebung, die man \vpageref{toc:clone} findet. Da +diese Art von Code keine zusätzlichen Pakete verlangt, ist er etwas +komplexer.\footnote{Zudem zeigt er die Vorliebe des Autors für die +\TeX{}-Syntax.} Außerdem wurde er in einem früheren Stadium entwickelt und +seither nicht überarbeitet. + +Da Rahmen (welche hier genutzt wurden, um die Hintergrundfarbe zu setzen) nur +die Hintergrundfarbe innerhalb einer Seite verändern, würde es sich anbieten, +weitere Pakete einzubinden, mit deren Hilfe man die Hintergrundfarbe über +mehrere Seiten hinweg verändern kann. + +Alle Befehle, welche die Farbe verändern, sind in \etoc zu Beginn so definiert, +dass sie nichts verändern. Daher kann der Nutzer selbst entscheiden, ob er +Farben nutzen will oder nicht. + + +\etocdepthtag.toc {tips} + +\part{Tipps} +\label{part:tipsandtricks} + +\thispartstats + +\etocsettocstyle{}{} +\etocstandardlines +\localtableofcontents + +\section{\ldots\ und Tricks} + +\subsection{Hacken "`framed parboxes"'} + + +\begin{verbatim} +\etocdefaultlines +\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} +\etocruled{\color{green}\fboxrule2pt\fboxsep1ex + \fbox{\raisebox{-\fontdimen22\textfont2} + {\color{blue}\parbox{.5\linewidth} + {\normalfont Dieser Text ist vertikal perfekt zentriert + unter Berücksichtigung der \emph{surrounding horizontal rules.}}}} +\ref{toc:globalcmds} +\end{verbatim} + +\etocdefaultlines + +\renewcommand\etoctoprule{\hrule height 2pt depth 2pt} + +\etocruled{\color{green}\fboxrule2pt\fboxsep1ex + \fbox{\raisebox{-\fontdimen22\textfont2} + {\color{blue}\parbox{.5\linewidth} + {\normalfont Dieser Text ist vertikal perfekt zentriert + unter Berücksichtigung der \emph{surrounding horizontal rules.}}}}} + \ref{toc:globalcmds} + + +\subsection{Umstellen der Ebenen} +\label{subsec:interverting} + +Lasst uns alle Unterabschnitte zeigen und aufzählen, die in diesem Dokument +vorkommen (Siehe \autoref{part:surprising} für andere Verwendungen dieser Technik.): +\begin{verbatim} +\etocsetnexttocdepth{2} +\begingroup +\etocsetlevel{part}{3} +\etocsetlevel{section}{3} +\etocsetstyle{subsection} + {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} + {\normalfont\bfseries\item} + {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)} + {\end{enumerate}} +\renewcommand{\etoccolumnsep}{2.75em} +\renewcommand{\columnseprule}{1pt} +\etocmulticol[3]{\subsection{Alle Unterabschnitte in diesem Dokument}} +\endgroup +\end{verbatim} + +\etocsetnexttocdepth{2} + +\begingroup +\etocdefaultlines +\etocstandarddisplaystyle +\etocsetlevel{book}{3} +\etocsetlevel{part}{3} +\etocsetlevel{chapter}{3} +\etocsetlevel{section}{3} +\etocsetstyle{subsection}{\small +\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]} +{\normalfont\bfseries\item} +{\roman{enumi}. \mdseries\etocname{} (\etocnumber, S.~\etocpage)} +{\end{enumerate}} + +\renewcommand{\etoccolumnsep}{2.75em} +\renewcommand{\columnseprule}{1pt} + +%%\etocmarkbothnouc{List of all subsections} +%% le mark (\markright) est fait par \subsection + +\etocmulticol[3]{\subsection{{Alle Unterabschnitte in diesem Dokument}}\label{toc:allsubsections}} + + +\endgroup + +\subsection{Sta\-ti\-sti\-ken anzeigen}\label{ssec:statistics} + +Jeder Teil dieses Dokuments beginnt mit einem Paragraphen, der sagt, wieviele +Kapitel und Unterkapitel er hat. Nun, jeder von diesen Paragraphen ist ein +Inhaltsverzeichnis! Wir haben ein Makro \csa{thispartstats} geschaffen, um dies +zu tun. Es nutzt "`Speicher"'-Boxen, um die Informationen über die ersten und +späteren Kapitel und Unterkapitel zu halten. Boxen zu nehmen, ist die einfachste +Art und Weise |hyperref|-Links für spätere Verwendungen zu kapseln (ob es einer +ist oder keiner). Allerdings kann man dann nichts an der Schriftart oder Farbe +ändern (die \TeX -Primitive \csa{setbox} eher nehmend als von \LaTeX{} +\csa{sbox} würde die Farbe Farbe um das ohne Boxen gespeicherte Feld verändern). +Wenn eine solche Notwendigkeit entsteht, muss man von der Boxenverwendung zum +Makro nehmen wechseln und die |hyperref|-Daten für später speichern, wie im oben +im Code von \autoref{ssec:molecule} vorgestellt. Wir präsentieren auch diese +zweite Methode. + +Aber als Erstes der Code von \csa{thispartstats}:\par +\begin{verbatim} +\newsavebox\firstnamei \newsavebox\firstnumberi +\newsavebox\lastnamei \newsavebox\lastnumberi +\newsavebox\firstnameii \newsavebox\firstnumberii +\newsavebox\lastnameii \newsavebox\lastnumberii +\newcounter{mycounti} \newcounter{mycountii} +\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{} +\newcommand*{\oldtocdepth}{} +\newcommand*{\thispartstats}{% + \setcounter{mycounti}{0}% + \setcounter{mycountii}{0}% + \def\thispartstatsauxi{% + \sbox{\firstnamei}{\etocname}% + \sbox{\firstnumberi}{\etocnumber}% + \def\thispartstatsauxi{}}% + \def\thispartstatsauxii{% + \sbox{\firstnameii}{\etocname}% + \sbox{\firstnumberii}{\etocnumber}% + \def\thispartstatsauxii{}}% + \begingroup + \etocsetstyle{subsection} {} {} + {\thispartstatsauxii + \stepcounter{mycountii}% + \sbox{\lastnameii}{\etocname}% + \sbox{\lastnumberii}{\etocnumber}} {}% + \etocsetstyle{section} {} {} + {\thispartstatsauxi + \stepcounter{mycounti}% + \sbox{\lastnamei}{\etocname}% + \sbox{\lastnumberi}{\etocnumber}} + {Here are some statistics for this part: it contains \arabic{mycounti} + section\ifnum\value{mycounti}>1 s\fi{} and \arabic{mycountii} + subsection\ifnum\value{mycountii}>1 s\fi. The name of the first section is + \unhbox\firstnamei{} and the corresponding number is \unhbox\firstnumberi. + The name of the last section is \unhbox\lastnamei{} and its number is + \unhbox\lastnumberi. The name of the first subsection is \unhbox\firstnameii{} + and the corresponding number is \unhbox\firstnumberii. The name of the last + subsection is \unhbox\lastnameii{} and its number is \unhbox\lastnumberii.}% + \etocinline % cancels the automatic \par automatically before the TOC + \etocsettocstyle {}{} + \etocsetnexttocdepth{2}% + \localtableofcontents % to be used at the top level of a Part. + \endgroup +} +\end{verbatim} + +Und nun, die Variante mit Makros anstelle von der mit Boxen (diese Variante +steht hier für die Verwendung in einem Kapitel). +\begin{verbatim} +\makeatletter +\newcommand*\firstsubname {} \newcommand*\lastsubname {} +\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {} +\newcommand*\thisspecialstatsaux{} +\newcommand*{\thisspecialstats}{% + \setcounter{mycounti}{0}% + \def\thisspecialstatsaux{% + \let\firstsubname\etocthelinkedname + \let\firstsubnumber\etocthelinkednumber + \def\thisspecialstatsaux{}} + \begingroup + \etocsetstyle{subsection} {} {} + {\thisspecialstatsaux + \stepcounter{mycounti}% + \let\lastsubname\etocthelinkedname + \let\lastsubnumber\etocthelinkednumber } + {Here are some statistics for this section. It contains \arabic{mycounti} + subsections. The name of its first is \emph{\firstsubname{}} and the + corresponding number is {\firstsubnumber}. The name of the last + subsection is \emph{\lastsubname{}} and its number is {\lastsubnumber}.}% + \etocsettocstyle {}{} + \etocinline + \etocsetnexttocdepth {1}% + \localtableofcontents % to be used within a section + \endgroup +} +\makeatother +\end{verbatim} + +\subsection{Tiefe Tags nehmen} +\label{ssec:tocwithdepthtags} + +Wir wollen ein TOC, das für jeden |\part| eine Ãœberschrift hat (außer der letzte +Teil mit dem Quellcode, wofür beschließen, ihn nicht einzubeziehen), und wir +wollen \autoref{part:globalcmds} öffnen für die Paragraphen. Um dies zu +erreichen, fügen wir zu dieser Quelle verschiedene +\csb{etocdepthtag.toc}-Befehle und es bleibt jetzt, zu setzen die Levels für +jeden Tag mit \csb{etocsettagdepth} (dies wurde oben in diesem Dokument +verwendet in \autoref{sec:secondexample}, in einer Gruppe, damit es keine +Auswirkungen auf andere Inhaltsverzeichnisse hat). + +Allerdings sind die Linienstile des Pakets nicht in der Lage Paragraphen +anzuzeigen und die Standardlinienstile der Dokumentklasse geben zu viel +vertikalen Abstand (in diesem Zusammenhang) bei der Anzeige einer +Teilüberschrift im TOC aus.Deshalb kochen wir unseren eigenen, schnell +entwickelten Linienstil, in der Art von \autoref{sec:firstexample} (aber auf dem +Weg Seitenzahlen von rechts, was mehr wie eine Methode von \LaTeX2e's +|\@dottedtocline| ist; und mehrzeilige Ãœberschriften lassen nun den Bereich +unter den Zahlen leer, im Gegensatz zu dem Code von \autoref{sec:firstexample}). +Und nach ein paar Minuten für die Wahl der Längen (jetzt ist das erstmal getan, +es kann leicht recycelt) erhalten wir: + +\etocsetnexttocdepth {all} +\begingroup +\parindent 0pt +\leftskip 0cm +\rightskip 0.75cm +\parfillskip -\rightskip +\newcommand*{\EndParWithPagenoInMargin} + {\nobreak\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par} +\renewcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} +\newcommand*{\EndParWithPagenoInMarginAndLeaders} + {\nobreak\leaders\etoctoclineleaders\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par } +\etocsetstyle {part} + {} + {\leavevmode\leftskip 1cm\relax} + {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% + \etocname\EndParWithPagenoInMargin\smallskip} + {} +\etocsetstyle {section} + {} + {\leavevmode\leftskip 1.75cm\relax} + {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip 2.75cm\relax } + {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 4cm\relax } + {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {paragraph} + {} + {\leavevmode\leftskip 5.5cm\relax } + {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {part} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {part} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {paragraph} +\etocsettagdepth {custom} {part} +\etocsettagdepth {tips} {part} +\etocsettagdepth {code} {none} +\renewcommand\etoctoprule {\hrule height 3pt\relax } +\renewcommand\etoctoprulecolorcmd {\color{blue}} +\renewcommand\etocaftercontentshook + {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } +\etocruledstyle [1]{\Large\bfseries + \fbox{\makebox[8cm]{Ein TOC -- nehmend tiefe Tags}}} +\sloppy +\tableofcontents + +\begin{verbatim} +\etocsetnexttocdepth {all} +\begingroup +\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip +\newcommand*{\EndParWithPagenoInMargin} + {\nobreak\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par} +\renewcommand*\etoctoclineleaders + {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}} +\newcommand*{\EndParWithPagenoInMarginAndLeaders} + {\nobreak\leaders\etoctoclineleaders\hfill + \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}% + \par } +\etocsetstyle {part} + {} + {\leavevmode\leftskip 1cm\relax} + {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}% + \etocname\EndParWithPagenoInMargin\smallskip} + {} +\etocsetstyle {section} + {} + {\leavevmode\leftskip 1.75cm\relax} + {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsection} + {} + {\leavevmode\leftskip 2.75cm\relax } + {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {subsubsection} + {} + {\leavevmode\leftskip 4cm\relax } + {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsetstyle {paragraph} + {} + {\leavevmode\leftskip 5.5cm\relax } + {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}% + \etocname\EndParWithPagenoInMarginAndLeaders} + {} +\etocsettagdepth {preamble} {none} +\etocsettagdepth {overview} {part} +\etocsettagdepth {arbitrarily}{part} +\etocsettagdepth {surprising} {part} +\etocsettagdepth {linestyles} {part} +\etocsettagdepth {globalcmds} {paragraph} +\etocsettagdepth {custom} {part} +\etocsettagdepth {tips} {part} +\etocsettagdepth {code} {none} +\renewcommand\etoctoprule {\hrule height 3pt\relax } +\renewcommand\etoctoprulecolorcmd {\color{blue}} +\renewcommand\etocaftercontentshook + {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup } +\etocruledstyle [1]{\Large\bfseries + \fbox{\makebox[8cm]{A TOC using depth tags}}} +\sloppy +\tableofcontents +\endgroup +\end{verbatim} +\endgroup + +\subsection{Das TOC als eine Tabelle setzend}\label{ssec:tocastable} + +Tabellenzellen erstellen Gruppen; Definitionen von |\etocname|, |\etocnumber|, +|\etocpage| sind lokal gemacht, also wenn die erste Zelle einer Zeile ist, wo +die |.toc|-Dateizeile gelesen wird und|\etocname| und |\etocnumber| definiert +wird, werden diese Definitionen nach dem Tabularzeichen |&| verloren gehen. Der +Quellcode von \etoc beginnt, die "`Anfangs"'- und "`End"'teile der Linienstile +zu öffnen oder Gruppen zu schließen, durch ein |&| beispielsweise im +"`Präfix"'-Teil des Linienstils ist nicht zu erwarten. + +Weiterhin, ähnlich sieht die Sache der Neudefinition von |\contentsline|, made +by \etoc , aus, jedesmal wird ein TOC gesetzt. Es wird nach dem ersten Argument +getan, wenn \csb{etocsettocstyle} ausgeführt wurde, weil, wenn dieses Argument +eine Tabelle öffnet, die |etoc|-Neudefintion der |\contentsline| in die erste +Zelle der ersten Zeile getan werden will und danach verloren geht. + +So, mit dem Öffnen und Schließen mit |\etocsettocstyle| und dem Nehmen von |&| | +und | innerhalb eines Level-Stils, kann man nicht direkt ein TOC in eine Tabelle +setzen. + +Der \etoc -Quellcode könnte geändert werden, zu machen Modifizierungen von +einigen relevanten globalen Definitionen, aber ich habe mich dagegen +entschieden. Setzen als eine |tabular| (oder später als |longtable|) wird nur +fortgeschrittene Anwendern gesucht und fortgeschrittene Anwender können die +Technik einsetzen, die in \autoref{tocastree} erklärt wurden. Hier ist ein +Beispiel mit einem vollverlinkten Inhaltsverzeichnis. Der Code kommt nach der +Tabelle. + + +\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\\}% +} + +\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 + +\begin{verbatim} +\newtoks\toctabletok +\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2 + #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} + +\newcommand*\PreparePart{% + \toks0 \expandafter{\etocthelinkednumber}% + \toks2 \expandafter{\etocthelinkedname}% + \toks4 \expandafter{\etocthelinkedpage}% + \edef\toctablepiece {\noexpand\hline + \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\\}% +} + +\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 +\end{verbatim} + +\subsection{Kompatibilität mit anderen Paketen} +\label{etocaftertochook} + + +\etoc lädt das Paket |multicol|. Es ist +|hyperref| bekannt und hoffentlich kompatibel mit ihm! Es ist kein Thema, ob +\etoc vor oder nach |hyperref| geladen wird. + +Die Release |1.07k| fügt Kompatibilität mit dem Paket |tocloft| hinzu: +\footnote{\url{http://ctan.org/pkg/tocloft}} Schritte wurden getan, um eine Neudefinition +von |\tableofcontents| zu vermeiden, getan von |tocloft| an |\begin{document}|. +% + +Solange \etoc ungeschickt ist im Kompatibilitätsmodus, wird von |tocloft| die +Anpassung sowohl für den Lin ienstil als auch den TOC-Titel getan. Man kann +immer noch von den \emph{tiefen Tags}-Management mit \etoc profitieren, von +seinem |\localtableofcontents|, von seinem |\label+\ref|-Mechanismus. Man kann +|\etocsetstyle| nehmen, um mit \etoc das Layout des TOC zu definieren und dann +eher |tocloft| für etwas anderes, wenn auf |\tableofcontents| folgen +\csb{etocstandardlines} und \csb{etocstandarddisplaystyle}. In diesem +Kompatibiltätsmodus |\etocsetlevel{division unit}{6}| wird die gewählte +Bereichsebene gerendert, aber der Austausch von Ebenen ist andererseits nicht +möglich. +\begin{framed} + Man sollte \etoc \emph{nach} \texttt{tocloft laden}. Sonst wird eine Warnung + ausgegeben. +\end{framed} + +Die Release |1.07l| hat ebenfalls die Kompatibilität mit der |memoir|-Klasse +verbessert: Seine |appendix|-Ebene kann mit \etoc gemacht werden. Es ist die +gleiche Ebene wie wie bei |chapter|, also der Kapitelebenstil kann eventuell ein +Test für einige boolesche-Ausdrücke sein, die aktiviert sein können via einer +Instruktion an die |.toc|-Datei aufgenommen werden, wenn man zwei Arten von +Unterteilungen unterscheidet. + +Die Inhalte der |.toc|-Datei (falls bereits vorhanden) werden einmal in den +Speicher von \etoc getan, bei \csa{usepackage\{etoc\}}. 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 kann nicht wirklich mit Paketen zusammensein, die +\csa{tableofcontents}-Befehle ändern: Eine Art Waffenstilstand kann erreicht +werden, wenn \etoc zuletzt geladen wird, daher ist es der Gewinner. + \begin{framed} + Ändern Sie nicht den |\tableofcontents|-Befehl, wie diesen folgenden: + \centeredline{|\let\oldtableofcontents\tableofcontents|,} + \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents\mystuff}|,} + da dies den |\label/\ref|-Mechanismus unmöglich macht. Sie können vielmehr + \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} ausführen und es + ergibt auch \csb{etocaftercontentshook}, das führt ein bisschen eher + \footnotemark{} aus, gerade vor dem Schließen des Teils vom toc-Anzeigestil + (und damit innerhalb einer Gruppe). + \end{framed} +\footnotetext{Im Gegensatz zu \csa{etocaftertochook}, + \csa{etocaftercontentshook} wird nicht ausgeführt, wenn |tocdepth| das + Drucken des TOC nicht ermöglicht.} + +\etoc zu verwenden, kann unvereinbar sein mit dem Paket +|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; jetzt lebt es , +sortierend, wie es deaktiviert die Modifikationen des |\tableofcontents| durch +|tocvsec2| (getan im Stile von oben) und es kanzelt auch andere |toc|-bezogene +Macros, aber es reimplantiert partiell ihre Funktionalität mit +\csb{etocsettocdepth.toc}. In der Art und Weise, die letzten beiden \LaTeX-Läufe +sind für das erneute Nehmen des Befehls in einem Dokument notwendig, um einen +Effekt im Inhaltsverzeichnis zu haben. + +Wenn ein \localtoc durch den Nutzer in das Dokument aufgenommen wird, eine +Zeile, in einen inneren \etoc-Befehl und eine Identifikationszahl in die +|.toc|-Datei aufgenommen wird. Das korrekte Inhaltsverzeichnis wird nur nach dem +nächsten \LaTeX -Lauf angezeigt werden. + +\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. 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 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. + +Es ist möglich, simultan \etoc und +{\color{niceone}|tableof|}\footnote{\url{http://ctan.org/pkg/tableof}} zu +nehmen. Für die erweiterte Nutzung, sowas wie das Nehmen von in +\autoref{ssec:molecule}, ist es wichtig, zu wissen dass |tableof| eine Ebene der +Gruppierung selbst in die |.toc|-Datei einfügt. Also, wenn man einige +Information \csa{global} machen möchte, kann man nicht warten, um auf der Ebene +des zweiten Arguments von \csa{etocsettocstyle} zu sein, |tableof| wird die +Gruppe dann schon geschlossen haben. Die \csa{global}-Dinge (auf flüchtigen +Daten) müssen spätestens im letzten Teil der oberen (oder letzten) +Untergliederungsebene eingeführt sein. Dies gilt natürlich nur für +\csa{tableofcontents} oder \csa{localtableofcontents} und die folgenden +\csa{nexttocwithtags}|{erforderlichen}||{verbotenen}| Befehle von |tableof|. + +Und wenn die Befehle \csa{tableof} oder \csa{tablenotof} vom Paket |tableof| +genutzt werden, setzen sie das Inhaltsverzeichnis nach den Standards der +Dokumentklasse: Um von den \etoc-Stilen zu profitieren, ist es zwingend +erforderlich, entweder \csa{tableofcontents} oder \csa{localtableofcontents} +oder einen anderen \etoc-Befehl zu nehmen, und |tableof (v1.1)| wird das +Ergebnis nur beeinflussen, wenn \csa{nexttocwithtags}|{required}||{forbidden}| +hinzugefügt wurde, bevor dar Inhaltsverzeichnis-typesetting-Befehl kommt. + +\subsection{\TeX -nische Sachen} + +Die \csa{etocname}, \csa{etocnumber}, \csa{etocpage} Befehle sind gegen +vorzeitige Expansion geschützt. Sie enthalten geeignete |hyperref|-Links, wenn +das Paket |hyperref| geladen und aktiviert für das TOC ist. Die Befehle +\csa{etoclink} und \csa{etocifnumbered} sind auch gegen vorzeige Expansion +geschützt. + +Andererseits \csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, haben +keine Anbindung an |hyperref|-Links und sind nicht gegen Expansionen geschützt. + +Befehle wie \csa{etocsetstyle}, \csa{etocsetlevel}, \csa{etocsettocstyle}, +\csa{etocmulticolstyle}, \csa{etocruledstyle}, \csa{etocframedstyle} folgen +Gruppierungen von \LaTeX. Alle TOCs werden in Gruppierungen gesetzt. + +\subsection{Fehler und Katastrophen} + +Nach der Verwendung von \csa{etocsetstyle}für eine Ebene nehmen die restlichen, +nicht angepassten Ebenen die Standardstile von \etoc (diejenigen, die aktiviert +werden von \csa{etocdefaultlines}). Man muss sicherstellen, dass alle Ebenen, +die für das nächste Inhaltsverzeichnis gebraucht werden, miteinander kompatibel +sind: Insbesonders, dass die Standardlinienstile jeweils im "`vertikalen Modus"' +gestartet werden. + +Wenn man mehrere \toc-Befehle in einem Dokument verwendet, sollte man sich +hüten, mehrere Satzanweisungen in der |.toc|-Datei zu addieren, so sie mit \toc +ausgeführt für alle TOCs ausgeführt werden: Auch für \localtoc spielt es keine +Rolle, ob die Anweisungen Material außerhalb des Anwendungbereichs betreffen, +sie werden sie trotzdem erhalten. Falls unbedingt erforderlich (aber es das +sollte es nie) müssen dies Instruktionen so sein, dass einfach aktiviert oder +deaktiviert werden von der Dokumentquelle, wie es sein muss. + +So wie es üblich ist bei TOCs und Labels, muss nach jeder Änderung \LaTeX{} eine +bestimmte Anzahl von Durchführungen haben, um für das Dokument das endgültige +Aussehen zu erhalten (mindestens zweimal durchlaufen). + + +%%\clearpage %% not useful for current (2014/04/28) German version + +\etocdepthtag.toc {code} + +\part{Der Code} + +\section{Zeitstempel} + +Dies ist die deutsche Dokumentation von \texttt{\etocDEdocdate}, erzeugt von der +Quelldatei mit dem Stempel \texttt{\etocdtxtimestamp}. Die dokumentierte +Paketversion ist \texttt{\etocDEpkgversion} von \texttt{\etocDEpkgdate}. + +% STOP GERMAN (DEUTSCH) VERSION + +^^Afi + +^^Acatcode92 0 + +\catcode1 13 + +\begingroup +\renewcommand\lowast{{\normalsize\raisebox{-.4\height}{*}}} +\small + +\ifnum\ForEnglish=1 + \section{Change history} +\fi + +\ifnum\ForDeutsch=1 + \section{Änderungen} +\fi + +\selectlanguage{english} + +\setlength{\columnsep}{\etoccolumnsep} + +\makeatletter + +% 27 avril 2014 un petit hack pour hyphénation (éventuelle) en allemand +% j'ai déjà ~ qui sera de catcode 0, cependant il faudrait aussi les accolades, +% donc finalement pour aller vite, je rends le + actif. Je modifie aussi le test +% fait par \jfverbaspace (n'ayant pas commenté mon code, j'ai dû réfléchir pour +% me rappeler à peu près ce que c'était censé faire). + +\def\jfverbatim{\@beginparpenalty \predisplaypenalty + \parindent \z@ + \parfillskip \@flushglue + \parskip \tw@\p@ plus 1fil\relax + \let \do \@makeother \dospecials \makestarlowast \catcode`+ \active + \begingroup\lccode`~`+ + \lowercase{\endgroup\def~[##1]{\foreignlanguage{german}{##1}}}% + \catcode`> \active + \begingroup\lccode`~`> + \lowercase{\endgroup\def~{\nopagebreak}}% ajouté 2014/04/28, oblige à un peu + % plus de mark-up cependant + \catcode`\~\z@ + \footnotesize\normalfont\baselineskip10pt\relax + \frenchspacing \obeyspaces \jf@xverbatim } + +\begingroup +\catcode `|=0 \catcode `[= 1 \catcode`]=2 +\catcode `\{=12 \catcode `\}=12 \catcode`\\=12 +|long|gdef|jf@xverbatim#1\end{jfverbatim}[#1|end[jfverbatim]] +|endgroup + +\def\endjfverbatim{} + +\newdimen\jfverbadim + +\everypar{\leftskip\jfverbadim\bgroup + \def\par{\egroup\jfverbadim\z@\@@par}% + \def\jfverbaspace#1{\if\@sptoken\string#1\unskip\else\ \fi#1}} + +\begingroup\obeyspaces\def\x{\endgroup% +\def {\ifvmode\advance\jfverbadim.5em\relax\else\expandafter\jfverbaspace\fi}}\x + +\makeatother + +\begin{multicols}{2} +\begin{jfverbatim} +v1.07l [doc of 2014/04/29]> + + added to the documentation an example of use of \etocthelinkedname together + with an enumitem inline itemize* environment; moved main TOC to immediately + after the title, and license to the first pages. + + incorporation of the translation into German done on the initiative of + +[Christine Römer] by +[Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel + Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU Jena).] My + grateful thanks to all! + +v1.07l [2014/04/22]> + + fixes a bug with the 1.07k compatibility layer with tocloft which had broken + the 1.07k (sic) compatibility with memoir (yes, memoir class 1.07k testing + had been done before adding the tocloft thing to the source code . . . ). + Also, etoc when detecting tocvsec2 now checks if this is under the memoir + class, as then nothing special needs to be done to rescue \tableofcontents, + contrarily to the situation with the native tocvsec2. + +v1.07k [2014/03/06]> + + compatibility with package tocloft; and improved compatibility with + class memoir. Novel TOC example in Overview. + +v1.07j [2013/12/03]> + + some issues with the documentation formatting (now two-sided) have been + addressed, and a novel documentation section ``Typesetting the TOC as a + table'' has been added. Very minor code change (\Etoc@readtoc). + +v1.07i [2013/10/21]> + + changes to the \etocmulticolstyle and \etocruledstyle codes + to lessen the risk of a page break after the title (in the one-column case). + +v1.07h [2013/10/16]> + + new commands \etocdepthtag.toc, \etocsettagdepth, \etocobeydepthtags, + \etocignoredepthtags. + +v1.07g [2013/10/13]> + + new commands \etocsettocdepth, \etocsettocdepth.toc, + \etocobeytoctocdepth, \etoc~-ignoretoctocdepth which + emulate part of tocvsec2 functionality ; measures to + make tocvsec2 partially compatible with etoc. + + new commands \etocsetnexttocdepth, \invisibletableofcontents, + \invisiblelocaltableofcontents. switched from tikz-qtree to forest for the first `toc as tree' example. @@ -4932,13 +9151,13 @@ v1.07g [2013/10/13] dvipdfmx which produces the smallest file). -v1.07f [2013/03/07] +v1.07f [2013/03/07]> new macros \etocthelinkedname, \etocthelinkednumber, \etocthelinkedpage, and \etocthelink. -v1.07e [2013/03/01] +v1.07e [2013/03/01]> improvements in the package own line styles with regards to penalties and vertical spaces. @@ -4948,25 +9167,25 @@ v1.07e [2013/03/01] more such examples added 2013/03/03. -v1.07d [2013/02/24] +v1.07d [2013/02/24]> minor code improvements and new documentation section ``Another compatibility mode''. -v1.07b [2013/02/02] +v1.07b [2013/02/02]> removal of the \xspace from the macros \etocname, \etocnumber, \etocpage. additional examples in the documentation. - -v1.07 [2013/01/29] + +v1.07 [2013/01/29]> new commands: - \etocthename, \etocthenumber, \etocthepage, \etoclink, + \etocthename, \etocthenumber, \etocthe~-page, \etoclink, \etoctoccontentsline, \etoctoccontentsline~lowast @@ -4979,7 +9198,7 @@ v1.07 [2013/01/29] addition to the tables of contents. -v1.06 [2012/12/07] +v1.06 [2012/12/07]> the standard macros \l@section etc... are modified only during the calls to \tableofcontents; they can thus be @@ -4988,7 +9207,7 @@ v1.06 [2012/12/07] by etoc for the TOCs typeset in compatibility mode. -v1.05 [2012/12/01] +v1.05 [2012/12/01]> \localtableofcontents replaces \tableofcontents~lowast (for compatibility with the memoir class). @@ -4997,19 +9216,19 @@ v1.05 [2012/12/01] classes. -v1.04 [2012/11/24] +v1.04 [2012/11/24]> a (possibly local) table of contents can be labeled: - + \tableofcontents \label{toc:1} and reproduced elsewhere in the document (with a possibly completely different layout): - + \tableofcontents \ref{toc:1} - -v1.02 [2012/11/18] + +v1.02 [2012/11/18]> initial version. @@ -5018,26 +9237,58 @@ v1.02 [2012/11/18] \endgroup % group for modified verbatim printing of the changes log \makeatletter - -\let\check@percent\original@check@percent + \let\check@percent\original@check@percent \makeatother \small -% \def\MacroFont{\ttfamily\hyphenchar\font45 \baselineskip11pt\relax } - +\ifnum\ForEnglish=1 \section{Implementation} +\fi -\StopEventually{\normalsize\ifnum\NoSourceCode=1 - \texttt{% - This documentation has been compiled without inclusion of the source - code. To produce the documentation with source code included:\endgraf - \ \ \ \ run latex on etoc.dtx (or on etoc.tex if available), \endgraf - \ \ \ \ (or first run tex on etoc.ins if available to produce - etoc.tex)\endgraf - \ \ \ \ then twice latex on etoc.tex,\endgraf - \ \ \ \ then dvipdfmx on etoc.dvi\endgraf} +\ifnum\ForDeutsch=1 +\section{Ausführung} \fi + +\StopEventually{\normalsize + \ifnum\NoSourceCode=1 + \ifnum\ForEnglish=1 + \texttt{\parindent 0pt\rightskip 1cm minus 1cm + This documentation has been compiled without inclusion of the source + code. To produce the English documentation with source code included:\endgraf + \ \ \ \ run tex on etoc.dtx or etoc.ins to produce etoc.tex,\endgraf + \ \ \ \ then thrice latex on etoc.tex, then dvipdfmx on etoc.dvi.\endgraf + \medskip + To produce the German documentation with source code included, run tex on + etoc.dtx or etoc.ins to produce etoc-DE.tex, then edit etoc-DE.tex + to set \string\NoSourceCode\space to 0, and run latex thrice on etoc-DE.tex + then dvipdfmx on etoc-DE.dvi\endgraf + \medskip + (ignore dvipdfmx warnings, or, in case of problems caused by an old version + of dvipdfmx, set \string\Withdvipdfmx\space to 0 in etoc.tex or + etoc-DE.tex, to compile with pdflatex)\endgraf }% + \fi + \ifnum\ForDeutsch=1 + \texttt{\hyphenchar\font-1 + \parindent 0pt\rightskip 0.5cm minus 0.5cm \selectlanguage{german}% + Diese Dokumentation wurde ohne Einbeziehung des Quellcodes erstellt. Um + die englische Dokumentation mit dem Quellcode zu produzieren, ist + einzubeziehen: \endgraf + \ \ \ \ kompilieren tex mit etoc.dtx oder etoc.ins, um etoc.tex zu + produzieren, \endgraf + \ \ \ \ dann dreimal latex mit etoc.tex, dann dvipdfmx mit etoc.dvi.\endgraf + \medskip + Um die deutsche Dokumentation mit Einbeziehung des Quellcodes zu erstellen, + ist zu kompilieren tex mit etoc.dtx oder etoc.ins, um etoc-DE.tex zu + erzeugen, dann ist \string\NoSourceCode\space in etoc-DE.tex auf 0 zu + setzen, dann ist latex dreimal mit etoc-DE.tex laufen zu lassen, dann + dvipdfmx mit etoc-DE.dvi.\endgraf + \medskip + (Ignorieren Sie dvipdfmx-Warnungen oder, im Falle von Problemen mit einer + alten Version von dvipdfmx, setzen Sie \string\Withdvipdfmx\space auf 0 in + etoc.tex oder etoc-DE.tex um dann pdflatex laufen zu lassen.)\endgraf }% + \fi + \fi \end{document}} % Writing-up source code comments is hopefully for a future @@ -5061,8 +9312,8 @@ v1.02 [2012/11/18] \everypar{\global\advance\c@CodelineNo\@ne \llap{\theCodelineNo\ \hskip\@totalleftmargin}}% \fi -\string\ProvidesPackage\string{\jfbpkgname\string}\par -\noindent\space [\jfbpkgdate\space\jfbpkgversion\space\jfbpkgdescription]\par +\string\ProvidesPackage\string{etoc\string}\par +\noindent\space [\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]\par \nointerlineskip \global\@inlabelfalse \endtrivlist @@ -5073,7 +9324,6 @@ v1.02 [2012/11/18] % in the commented source code... % (c) 2012/11/19 jf burnol ;-) - \MakePercentIgnore % diff --git a/Master/texmf-dist/source/latex/etoc/etoc.ins b/Master/texmf-dist/source/latex/etoc/etoc.ins index 2bb03fbf323..ffd370fd96c 100644 --- a/Master/texmf-dist/source/latex/etoc/etoc.ins +++ b/Master/texmf-dist/source/latex/etoc/etoc.ins @@ -1,37 +1,55 @@ -\def\jfbpkgname {etoc} \def\jfbpkgdate {2014/04/22} \def\jfbpkgversion {v1.07l} -\def\jfbpkgdescription {Completely customisable TOCs (jfB)} %% %% Package: etoc -%% Version: 2014/04/22 v1.07l -%% Copyright (C) 2012-2013-2014 by Jean-Francois Burnol +%% Version: 1.07l (2014/04/22) +%% License: LPPL 1.3c or later (see etoc.dtx for more information) +%% Copyright (C) 2012-2013-2014 Jean-Francois Burnol +%% Copyright (C) 2014 Christine Roemer +%% and collaborators for the translation into German of the documentation %% -%% Run tex on this file to extract etoc.sty and etoc.tex from etoc.dtx +\def\etocpkgdate {2014/04/22} +\def\etocpkgversion {v1.07l} +\def\etocpkgdescription {Completely customisable TOCs (jfB)} +%% Run tex on this file to extract from etoc.dtx: +%% etoc.sty, etoc.tex, etoc-DE.tex %% -%% At least three ways to produce etoc.pdf: +%% At least three ways to produce etoc.pdf (method (3) is preferred): %% (1) latex etoc.dtx (three times), then dvips, then ps2pdf %% (2) pdflatex etoc.dtx (three times) %% (3) latex etoc.tex (three times), then dvipdfmx %% %% Method (3) produces the smallest pdf files. -%% Options can be set in etoc.tex: +%% Options can be set in etoc.tex (and etoc-DE.tex): %% - scrdoc class options (paper size, font size, ...) %% - with or without source code, %% - with dvipdfmx or with latex/pdflatex. %% +%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins +%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with +%% latex (thrice) then dvipdmx, or edit the suitable toggle in +%% etoc-DE.tex to allow compilation to proceed with pdflatex. +%% +%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen +%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen +%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen, +%% dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen. +%% %% Installation: -%% etoc.sty->TDS:tex/latex/etoc/etoc.sty -%% etoc.dtx->TDS:source/latex/etoc/etoc.dtx -%% etoc.pdf->TDS:doc/latex/etoc/etoc.pdf +%% +%% etoc.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 %% \input docstrip.tex \askforoverwritefalse -\def\jfbpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% -\string\ProvidesPackage{\jfbpkgname}^^J% -\space[\jfbpkgdate\space\jfbpkgversion\space\jfbpkgdescription]}% +\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J% +\string\ProvidesPackage{etoc}^^J% +\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}% \generate{\nopreamble -\file{\jfbpkgname.tex}{\from{\jfbpkgname.dtx}{driver}}% -\usepreamble\jfbpkgpreamble -\file{\jfbpkgname.sty}{\from{\jfbpkgname.dtx}{package}}}% +\file{etoc.tex}{\from{etoc.dtx}{tex}}% +\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}% +\usepreamble\etocpkgpreamble +\file{etoc.sty}{\from{etoc.dtx}{package}}}% \catcode32=13\relax% active space \let =\space% \Msg{************************************************************************} @@ -42,7 +60,8 @@ \Msg{* etoc.sty} \Msg{*} \Msg{* To produce the documentation run latex thrice on file etoc.tex} -\Msg{* and then run dvipdfmx on file etoc.dvi} +\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.} +\Msg{* etoc-DE.dvi} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} -- cgit v1.2.3