etoc_doxygen.sty 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178
  1. %%
  2. %% This is file etoc_doxygen.sty
  3. %%
  4. %% Apart from this header notice and the renaming from etoc to
  5. %% etoc_doxygen (also in \ProvidesPackage) it is an identical
  6. %% copy of
  7. %%
  8. %% etoc.sty
  9. %%
  10. %% at version 1.2b of 2023/07/01.
  11. %%
  12. %% This file has been provided to Doxygen team courtesy of the
  13. %% author for benefit of users having a LaTeX installation not
  14. %% yet providing version 1.2a or later of etoc, whose
  15. %% deeplevels feature is required.
  16. %%
  17. %% The original source etoc.dtx (only of the latest version at
  18. %% any given time) is available at
  19. %%
  20. %% https://ctan.org/pkg/etoc
  21. %%
  22. %% and contains the terms for copying and modification as well
  23. %% as author contact information.
  24. %%
  25. %% In brief any modified versions of this file must be renamed
  26. %% with new filenames distinct from etoc.sty.
  27. %%
  28. %% Package: etoc
  29. %% Version: 1.2b
  30. %% License: LPPL 1.3c
  31. %% Copyright (C) 2012-2023 Jean-Francois B. <user jfbu at github>
  32. \NeedsTeXFormat{LaTeX2e}[2003/12/01]
  33. \ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)]
  34. \newif\ifEtoc@oldLaTeX
  35. \@ifl@t@r\fmtversion{2020/10/01}
  36. {}
  37. {\Etoc@oldLaTeXtrue
  38. \PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak
  39. Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak
  40. as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak
  41. and used to require it (from 1.1a to 1.2).\MessageBreak
  42. This etoc (1.2b) does not *require* it, but has not been\MessageBreak
  43. tested thoroughly on old LaTeX (especially if document\MessageBreak
  44. does not use hyperref) and retrofitting was done only\MessageBreak
  45. on basis of author partial remembrances of old context.\MessageBreak
  46. Reported}}
  47. \RequirePackage{kvoptions}
  48. \SetupKeyvalOptions{prefix=Etoc@}
  49. \newif\ifEtoc@lof
  50. \DeclareVoidOption{lof}{\Etoc@loftrue
  51. \PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak
  52. Barely tested, use at own risk}%
  53. }
  54. \newif\ifEtoc@lot
  55. \DeclareVoidOption{lot}{\Etoc@lottrue
  56. \PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak
  57. Barely tested, use at own risk}%
  58. }
  59. \@ifclassloaded{memoir}{
  60. \PackageInfo{etoc}
  61. {As this is with memoir class, all `...totoc' options\MessageBreak
  62. are set true by default. Reported}
  63. \DeclareBoolOption[true]{maintoctotoc}
  64. \DeclareBoolOption[true]{localtoctotoc}
  65. \DeclareBoolOption[true]{localloftotoc}
  66. \DeclareBoolOption[true]{locallottotoc}
  67. }{
  68. \DeclareBoolOption[false]{maintoctotoc}
  69. \DeclareBoolOption[false]{localtoctotoc}
  70. \DeclareBoolOption[false]{localloftotoc}
  71. \DeclareBoolOption[false]{locallottotoc}
  72. }
  73. \DeclareBoolOption[true]{ouroboros}
  74. \DeclareBoolOption[false]{deeplevels}
  75. \DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}}
  76. \ProcessKeyvalOptions*
  77. \DisableKeyvalOption[action=error,package=etoc]{etoc}{lof}
  78. \DisableKeyvalOption[action=error,package=etoc]{etoc}{lot}
  79. \DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels}
  80. \def\etocsetup#1{\setkeys{etoc}{#1}}
  81. \def\etocifmaintoctotoc{\ifEtoc@maintoctotoc
  82. \expandafter\@firstoftwo
  83. \else
  84. \expandafter\@secondoftwo
  85. \fi}
  86. \def\etociflocaltoctotoc{\ifEtoc@localtoctotoc
  87. \expandafter\@firstoftwo
  88. \else
  89. \expandafter\@secondoftwo
  90. \fi}
  91. \def\etociflocalloftotoc{\ifEtoc@localloftotoc
  92. \expandafter\@firstoftwo
  93. \else
  94. \expandafter\@secondoftwo
  95. \fi}
  96. \def\etociflocallottotoc{\ifEtoc@locallottotoc
  97. \expandafter\@firstoftwo
  98. \else
  99. \expandafter\@secondoftwo
  100. \fi}
  101. \RequirePackage{multicol}
  102. \def\etoc@{\etoc@}
  103. \long\def\Etoc@gobtoetoc@ #1\etoc@{}
  104. \newtoks\Etoc@toctoks
  105. \def\Etoc@par{\par}
  106. \def\etocinline{\def\Etoc@par{}}
  107. \let\etocnopar\etocinline
  108. \def\etocdisplay{\def\Etoc@par{\par}}
  109. \let\Etoc@global\@empty
  110. \def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global}
  111. \def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty}
  112. \newif\ifEtoc@numbered
  113. \newif\ifEtoc@hyperref
  114. \newif\ifEtoc@parskip
  115. \newif\ifEtoc@tocwithid
  116. \newif\ifEtoc@standardlines
  117. \newif\ifEtoc@etocstyle
  118. \newif\ifEtoc@classstyle
  119. \newif\ifEtoc@keeporiginaltoc
  120. \newif\ifEtoc@skipprefix
  121. \newif\ifEtoc@isfirst
  122. \newif\ifEtoc@localtoc
  123. \newif\ifEtoc@skipthisone
  124. \newif\ifEtoc@stoptoc
  125. \newif\ifEtoc@notactive
  126. \newif\ifEtoc@mustclosegroup
  127. \newif\ifEtoc@isemptytoc
  128. \newif\ifEtoc@checksemptiness
  129. \def\etocchecksemptiness {\Etoc@checksemptinesstrue }
  130. \def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse }
  131. \newif\ifEtoc@notocifnotoc
  132. \def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue }
  133. \newcounter{etoc@tocid}
  134. \def\Etoc@tocext{toc}
  135. \def\Etoc@lofext{lof}
  136. \def\Etoc@lotext{lot}
  137. \let\Etoc@currext\Etoc@tocext
  138. \def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else
  139. \expandafter\@secondoftwo\fi
  140. }
  141. \def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext
  142. \expandafter\@firstoftwo\else
  143. \expandafter\@secondoftwo\fi}%
  144. {\@secondoftwo}%
  145. }
  146. \def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext
  147. \expandafter\@firstoftwo\else
  148. \expandafter\@secondoftwo\fi}%
  149. {\@secondoftwo}%
  150. }
  151. \def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext
  152. \expandafter\@firstoftwo\else
  153. \expandafter\@secondoftwo\fi}%
  154. {\@secondoftwo}%
  155. }
  156. \expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@}
  157. \expandafter\def\csname Etoc@-2@@\endcsname {-\tw@}
  158. \expandafter\let\csname Etoc@-1@@\endcsname \m@ne
  159. \expandafter\let\csname Etoc@0@@\endcsname \z@
  160. \expandafter\let\csname Etoc@1@@\endcsname \@ne
  161. \expandafter\let\csname Etoc@2@@\endcsname \tw@
  162. \expandafter\let\csname Etoc@3@@\endcsname \thr@@
  163. \expandafter\chardef\csname Etoc@4@@\endcsname 4
  164. \expandafter\chardef\csname Etoc@5@@\endcsname 5
  165. \expandafter\chardef\csname Etoc@6@@\endcsname 6
  166. \ifEtoc@deeplevels
  167. \expandafter\chardef\csname Etoc@7@@\endcsname 7
  168. \expandafter\chardef\csname Etoc@8@@\endcsname 8
  169. \expandafter\chardef\csname Etoc@9@@\endcsname 9
  170. \expandafter\chardef\csname Etoc@10@@\endcsname 10
  171. \expandafter\chardef\csname Etoc@11@@\endcsname 11
  172. \expandafter\chardef\csname Etoc@12@@\endcsname 12
  173. \fi
  174. \expandafter\let\expandafter\Etoc@maxlevel
  175. \csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname
  176. \edef\etocthemaxlevel{\number\Etoc@maxlevel}
  177. \@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}}
  178. \let\Etoc@none@@ \Etoc@minf
  179. \expandafter\let\expandafter\Etoc@all@@
  180. \csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname
  181. \let\Etoc@dolevels\@empty
  182. \def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter
  183. {\Etoc@dolevels\Etoc@do{#1}}}
  184. \ifdefined\expanded
  185. \def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}%
  186. \else
  187. \def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}%
  188. \fi
  189. \def\etoc@setlevel#1#2{%
  190. \edef\Etoc@tmp{\the\numexpr#2}%
  191. \if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1%
  192. \ifEtoc@deeplevels
  193. \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,%
  194. .7,.8,.9,.10,.11,.12,}%
  195. \else
  196. \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}%
  197. \fi
  198. \ifin@\else\if\@car#1\@nil @\in@true\fi\fi
  199. \ifin@
  200. \PackageWarning{etoc}
  201. {Sorry, but `#1' is forbidden as level name.\MessageBreak
  202. \if\@car#1\@nil @%
  203. (because of the @ as first character)\MessageBreak\fi
  204. Reported}%
  205. \else
  206. \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}%
  207. \expandafter\let\csname Etoc@#1@@\expandafter\endcsname
  208. \csname Etoc@\Etoc@tmp @@\endcsname
  209. \expandafter\edef\csname Etoc@@#1@@\endcsname
  210. {\expandafter\noexpand\csname Etoc@#1@@\endcsname}%
  211. \expandafter\edef\csname toclevel@@#1\endcsname
  212. {\expandafter\noexpand\csname toclevel@#1\endcsname}%
  213. \fi
  214. \else
  215. \PackageWarning{etoc}
  216. {Argument `\detokenize{#2}' of \string\etocsetlevel\space should
  217. represent one of\MessageBreak
  218. \ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi,
  219. \the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space
  220. but evaluates to \Etoc@tmp.\MessageBreak
  221. The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak
  222. Tables of contents will ignore `#1' as long\MessageBreak
  223. as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).%
  224. \MessageBreak
  225. Reported}%
  226. \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}%
  227. \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel
  228. \fi
  229. }
  230. \def\etoclevel#1{\csname Etoc@#1@@\endcsname}
  231. \def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname}
  232. \def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}}
  233. \@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{}
  234. \etocsetlevel{part}{-1}
  235. \etocsetlevel{chapter}{0}
  236. \etocsetlevel{section}{1}
  237. \etocsetlevel{subsection}{2}
  238. \etocsetlevel{subsubsection}{3}
  239. \etocsetlevel{paragraph}{4}
  240. \etocsetlevel{subparagraph}{5}
  241. \ifdefined\c@chapter
  242. \etocsetlevel{appendix}{0}
  243. \else
  244. \etocsetlevel{appendix}{1}
  245. \fi
  246. \def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}}
  247. \Etoc@dolevels
  248. \let\Etoc@figure@@\Etoc@maxlevel
  249. \let\Etoc@table@@ \Etoc@maxlevel
  250. \let\Etoc@gobblethreeorfour\@gobblefour
  251. \ifdefined\@gobblethree
  252. \let\Etoc@gobblethree\@gobblethree
  253. \else
  254. \long\def\Etoc@gobblethree#1#2#3{}%
  255. \fi
  256. \AtBeginDocument{%
  257. \@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}%
  258. \@ifpackageloaded{hyperref}
  259. {\Etoc@hyperreftrue}
  260. {\ifEtoc@oldLaTeX
  261. \let\Etoc@gobblethreeorfour\Etoc@gobblethree
  262. \let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@
  263. \long\def\Etoc@etoccontentsline@#1#2#3{%
  264. \Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}%
  265. }%
  266. \fi
  267. }%
  268. }
  269. \def\etocskipfirstprefix {\global\Etoc@skipprefixtrue }
  270. \def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}}
  271. \def\Etoc@stackofends{{-3}{}}
  272. \def\Etoc@doendsandbegin{%
  273. \expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@
  274. }
  275. \def\Etoc@traversestackofends#1{%
  276. \ifnum#1>\Etoc@level
  277. \csname Etoc@end@#1\endcsname
  278. \expandafter\Etoc@traversestackofends
  279. \else
  280. \Etoc@traversestackofends@done{#1}%
  281. \fi
  282. }
  283. \def\Etoc@traversestackofends@done#1#2{#2%
  284. \ifnum#1<\Etoc@level
  285. \csname Etoc@begin@\the\numexpr\Etoc@level\endcsname
  286. \Etoc@global\Etoc@isfirsttrue
  287. \edef\Etoc@tmp{{\the\numexpr\Etoc@level}}%
  288. \else
  289. \Etoc@global\Etoc@isfirstfalse
  290. \let\Etoc@tmp\@empty
  291. \fi
  292. \expandafter\Etoc@updatestackofends\Etoc@tmp{#1}%
  293. }
  294. \def\Etoc@etoccontentsline #1{%
  295. \let\Etoc@next\Etoc@gobblethreeorfour
  296. \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel
  297. \else
  298. \Etoc@skipthisonefalse
  299. \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
  300. \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi
  301. \ifEtoc@localtoc
  302. \ifEtoc@stoptoc
  303. \Etoc@skipthisonetrue
  304. \else
  305. \ifEtoc@notactive
  306. \Etoc@skipthisonetrue
  307. \else
  308. \unless\ifnum\Etoc@level>\etoclocaltop
  309. \Etoc@skipthisonetrue
  310. \global\Etoc@stoptoctrue
  311. \fi
  312. \fi
  313. \fi
  314. \fi
  315. \ifEtoc@skipthisone
  316. \else
  317. \unless\ifnum\Etoc@level>\c@tocdepth
  318. \ifEtoc@standardlines
  319. \let\Etoc@next\Etoc@savedcontentsline
  320. \else
  321. \let\Etoc@next\Etoc@etoccontentsline@
  322. \fi
  323. \fi
  324. \fi
  325. \fi
  326. \Etoc@next{#1}%
  327. }
  328. \def\Etoc@etoccontentsline@ #1#2#3#4{%
  329. \Etoc@doendsandbegin
  330. \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand
  331. \csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }%
  332. \Etoc@global\edef\Etoc@contents{\expandafter\noexpand
  333. \csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }%
  334. \ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi
  335. \global\Etoc@skipprefixfalse
  336. \Etoc@lxyz{#2}{#3}{#4}%
  337. \Etoc@prefix
  338. \Etoc@contents
  339. }
  340. \def\Etoc@lxyz #1#2#3{%
  341. \ifEtoc@hyperref
  342. \Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}%
  343. \else
  344. \Etoc@global\let\etocthelink\@firstofone
  345. \fi
  346. \Etoc@global\def\etocthepage {#2}%
  347. \ifEtoc@hyperref
  348. \ifx\etocthepage\@empty
  349. \Etoc@global\let\etocthelinkedpage\@empty
  350. \else
  351. \Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}%
  352. \fi
  353. \else
  354. \Etoc@global\let\etocthelinkedpage\etocthepage
  355. \fi
  356. \Etoc@global\def\etocthename{#1}%
  357. \futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@
  358. \ifEtoc@hyperref
  359. \def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}%
  360. \expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname
  361. \ifEtoc@numbered
  362. \expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber
  363. \else
  364. \Etoc@global\let\etocthelinkednumber\@empty
  365. \fi
  366. \else
  367. \Etoc@global\let\etocthelinkedname \etocthename
  368. \Etoc@global\let\etocthelinkednumber\etocthenumber
  369. \fi
  370. \Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink
  371. \Etoc@global\expandafter\let\csname etocname \endcsname \etocthename
  372. \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber
  373. \Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage
  374. \ifEtoc@hyperref
  375. \Etoc@lxyz@linktoc
  376. \fi
  377. }
  378. \def\Etoc@lxyz@linktoc{%
  379. \ifcase\Hy@linktoc
  380. \or
  381. \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname
  382. \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber
  383. \or % page
  384. \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage
  385. \else % all
  386. \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname
  387. \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber
  388. \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage
  389. \fi
  390. }
  391. \def\Etoc@@getnb {%
  392. \let\Etoc@next\Etoc@getnb
  393. \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi
  394. \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi
  395. \Etoc@next
  396. }
  397. \def\Etoc@getnb #1{%
  398. \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}%
  399. \ifin@
  400. \let\Etoc@next\Etoc@getnb@nmbrd
  401. \else
  402. \ifnum\Etoc@level=\m@ne
  403. \let\Etoc@next\Etoc@@getit
  404. \else
  405. \let\Etoc@next\Etoc@getnb@nonbr
  406. \fi
  407. \in@{#1}{\nonumberline}%
  408. \ifin@
  409. \let\Etoc@next\Etoc@getnb@nonumberline
  410. \fi
  411. \fi
  412. \Etoc@next #1%
  413. }
  414. \def\Etoc@getnb@nmbrd #1#2{%
  415. \Etoc@global\Etoc@numberedtrue
  416. \Etoc@global\def\etocthenumber {#2}%
  417. \Etoc@getnb@nmbrd@getname\@empty
  418. }%
  419. \def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {%
  420. \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}%
  421. }
  422. \def\Etoc@getnb@nonbr #1\etoc@ {%
  423. \Etoc@global\Etoc@numberedfalse
  424. \Etoc@global\let\etocthenumber \@empty
  425. }
  426. \def\Etoc@getnb@nonumberline #1\hspace\etoc@ {%
  427. \Etoc@global\Etoc@numberedfalse
  428. \Etoc@global\let\etocthenumber \@empty
  429. \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}%
  430. }
  431. \def\Etoc@@getit #1\hspace#2{%
  432. \ifx\etoc@#2%
  433. \Etoc@global\Etoc@numberedfalse
  434. \Etoc@global\let\etocthenumber \@empty
  435. \else
  436. \Etoc@global\Etoc@numberedtrue
  437. \Etoc@global\def\etocthenumber {#1}%
  438. \expandafter\Etoc@getit@getname \expandafter\@empty
  439. \fi
  440. }
  441. \def\Etoc@getit@getname #1\hspace\etoc@ {%
  442. \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}%
  443. }
  444. \let\etocthename \@empty
  445. \let\etocthenumber \@empty
  446. \let\etocthepage \@empty
  447. \let\etocthelinkedname \@empty
  448. \let\etocthelinkednumber \@empty
  449. \let\etocthelinkedpage \@empty
  450. \let\etocthelink \@firstofone
  451. \DeclareRobustCommand*{\etocname} {}
  452. \DeclareRobustCommand*{\etocnumber}{}
  453. \DeclareRobustCommand*{\etocpage} {}
  454. \DeclareRobustCommand*{\etoclink} {\@firstofone}
  455. \DeclareRobustCommand*{\etocifnumbered}
  456. {\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
  457. \expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname
  458. \DeclareRobustCommand*{\etociffirst}
  459. {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
  460. \expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname
  461. \def\Etoc@readtoc {%
  462. \ifeof \Etoc@tf
  463. \else
  464. \read \Etoc@tf to \Etoc@buffer
  465. \Etoc@toctoks=\expandafter\expandafter\expandafter
  466. {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}%
  467. \expandafter\Etoc@readtoc
  468. \fi
  469. }
  470. \Etoc@toctoks {}% (superfluous, but for clarity)
  471. \AtBeginDocument{\IfFileExists{\jobname.toc}
  472. {{\endlinechar=\m@ne
  473. \makeatletter
  474. \newread\Etoc@tf
  475. \openin\Etoc@tf\@filef@und
  476. \Etoc@readtoc
  477. \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}%
  478. \closein\Etoc@tf}}
  479. {\typeout{No file \jobname.toc.}}}
  480. \def\Etoc@openouttoc{%
  481. \ifEtoc@hyperref
  482. \ifx\hyper@last\@undefined
  483. \IfFileExists{\jobname .toc}
  484. {\Hy@WarningNoLine
  485. {old toc file detected; run LaTeX again (cheers from `etoc')}%
  486. \global\Etoc@toctoks={}%
  487. }
  488. {}%
  489. \fi
  490. \fi
  491. \if@filesw
  492. \newwrite \tf@toc
  493. \immediate \openout \tf@toc \jobname .toc\relax
  494. \fi
  495. \global\let\Etoc@openouttoc\empty
  496. }
  497. \def\Etoc@toctoc{%
  498. \gdef\Etoc@stackofends{{-3}{}}%
  499. \global\let\Etoc@level\Etoc@minf
  500. \global\let\Etoc@virtualtop\Etoc@minf
  501. \the\Etoc@toctoks
  502. \ifEtoc@notactive
  503. \else
  504. \gdef\Etoc@level{-\thr@@}%
  505. \Etoc@doendsandbegin
  506. \fi
  507. }
  508. \def\Etoc@@startlocaltoc#1#2{%
  509. \ifEtoc@localtoc
  510. \ifnum #1=#2\relax
  511. \global\let\etoclocaltop\Etoc@virtualtop
  512. \Etoc@@startlocaltochook
  513. \etoclocaltableofcontentshook
  514. \ifEtoc@etocstyle
  515. \etocetoclocaltocmaketitle
  516. \fi
  517. \ifx\Etoc@aftertitlehook\@empty
  518. \else
  519. \ifEtoc@localtoctotoc
  520. \ifEtoc@ouroboros
  521. \else
  522. \let\Etoc@tmp\contentsline
  523. \def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}%
  524. \fi
  525. \fi
  526. \fi
  527. \global\Etoc@notactivefalse
  528. \fi
  529. \fi
  530. }
  531. \let\etoc@startlocaltoc\@gobble
  532. \let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc
  533. \let\Etoc@@startlocaltochook\@empty
  534. \unless\ifEtoc@deeplevels
  535. \def\etocdivisionnameatlevel#1{%
  536. \ifcase\numexpr#1\relax
  537. \ifdefined\c@chapter chapter\else section\fi%
  538. \or section%
  539. \or subsection%
  540. \or subsubsection%
  541. \or paragraph%
  542. \or subparagraph%
  543. \or empty%
  544. \else\ifnum\numexpr#1<\m@ne
  545. book%
  546. \else
  547. part%
  548. \fi
  549. \fi
  550. }
  551. \else
  552. \def\etocdivisionnameatlevel#1{%
  553. \ifcase\numexpr#1\relax
  554. \ifdefined\c@chapter chapter\else section\fi%
  555. \or section%
  556. \or subsection%
  557. \or subsubsection%
  558. \or subsubsubsection%
  559. \or subsubsubsubsection%
  560. \or subsubsubsubsubsection%
  561. \or subsubsubsubsubsubsection%
  562. \or paragraph%
  563. \or subparagraph%
  564. \else\ifnum\numexpr#1>\z@
  565. empty%
  566. \else\ifnum\numexpr#1=\m@ne
  567. part%
  568. \else
  569. book%
  570. \fi\fi
  571. \fi
  572. }
  573. \fi
  574. \def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}}
  575. \def\etocglobalheadtotoc{\addcontentsline{toc}}
  576. \providecommand*\UseName{\@nameuse}
  577. \def\etocetoclocaltocmaketitle{%
  578. \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}%
  579. \if@noskipsec\leavevmode\par\fi
  580. \etociflocaltoctotoc
  581. {\etocifisstarred
  582. {}% star variant, do not add to toc
  583. {\etoclocalheadtotoc
  584. {\etocdivisionnameatlevel{\etoclocaltop+1}}%
  585. {\localcontentsname}%
  586. }%
  587. }%
  588. {}%
  589. }%
  590. \def\localcontentsname {\contentsname}%
  591. \let\etoclocaltableofcontentshook\@empty
  592. \if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1%
  593. \else
  594. \AtBeginDocument{%
  595. \let\Etoc@originaladdcontentsline\addcontentsline
  596. \def\addcontentsline{\Etoc@hackedaddcontentsline}%
  597. }%
  598. \fi
  599. \ifEtoc@lof
  600. \ifEtoc@lot
  601. \def\Etoc@hackedaddcontentsline#1{%
  602. \expanded{\noexpand\in@{.#1,}}{.lof,.lot,}%
  603. \ifin@\expandafter\Etoc@hackedaddcontentsline@i
  604. \else\expandafter\Etoc@originaladdcontentsline
  605. \fi {#1}}
  606. \else
  607. \def\Etoc@hackedaddcontentsline#1{%
  608. \expanded{\noexpand\in@{.#1,}}{.lof,}%
  609. \ifin@\expandafter\Etoc@hackedaddcontentsline@i
  610. \else\expandafter\Etoc@originaladdcontentsline
  611. \fi {#1}}
  612. \fi
  613. \else
  614. \def\Etoc@hackedaddcontentsline#1{%
  615. \expanded{\noexpand\in@{.#1,}}{.lot,}%
  616. \ifin@\expandafter\Etoc@hackedaddcontentsline@i
  617. \else\expandafter\Etoc@originaladdcontentsline
  618. \fi {#1}}
  619. \fi
  620. \def\Etoc@hackedaddcontentsline@i#1#2#3{%
  621. \expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}%
  622. \ifin@
  623. \addtocontents {toc}{%
  624. \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}%
  625. \ifdefined\protected@file@percent\protected@file@percent\fi
  626. }%
  627. \fi
  628. \Etoc@originaladdcontentsline{#1}{#2}{#3}%
  629. }
  630. \unless\ifdefined\expanded
  631. \def\Etoc@hackedaddcontentsline#1{%
  632. {\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}%
  633. \Etoc@tmp
  634. \ifin@\expandafter\Etoc@hackedaddcontentsline@i
  635. \else\expandafter\Etoc@originaladdcontentsline
  636. \fi {#1}%
  637. }
  638. \def\Etoc@hackedaddcontentsline@i#1#2#3{%
  639. {\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}%
  640. \Etoc@tmp{.lof;figure,.lot;table,}%
  641. \ifin@
  642. \addtocontents {toc}{%
  643. \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}%
  644. \ifdefined\protected@file@percent\protected@file@percent\fi
  645. }%
  646. \fi
  647. \Etoc@originaladdcontentsline{#1}{#2}{#3}%
  648. }
  649. \fi
  650. \def\Etoc@@startlocallistof#1#2#3{%
  651. \ifEtoc@localtoc
  652. \ifnum #2=#3\relax
  653. \global\let\etoclocaltop\Etoc@virtualtop
  654. \global\Etoc@notactivefalse
  655. \Etoc@@startlocaltochook
  656. \csname etoclocallistof#1shook\endcsname
  657. \ifEtoc@etocstyle
  658. \csname etocetoclistof#1smaketitle\endcsname
  659. \fi
  660. \fi
  661. \fi
  662. }
  663. \def\Etoc@@startlocallistof@setlevels#1{%
  664. \ifnum\etoclocaltop<\z@
  665. \expandafter\let\csname Etoc@#1@@\endcsname\@ne
  666. \else
  667. \expandafter\let\csname Etoc@#1@@\expandafter\endcsname
  668. \csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname
  669. \fi
  670. \def\Etoc@do##1{%
  671. \ifnum\etoclevel{##1}>\etoclocaltop
  672. \expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel
  673. \fi}%
  674. \Etoc@dolevels
  675. }
  676. \def\etoclocallistoffigureshook{\etocstandardlines}
  677. \def\etoclocallistoftableshook {\etocstandardlines}
  678. \def\locallistfigurename{\listfigurename}
  679. \def\locallisttablename {\listtablename}
  680. \def\etocetoclistoffiguresmaketitle{%
  681. \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}%
  682. \ifnum\etoclocaltop>\tw@\mbox{}\par\fi
  683. \etociflocalloftotoc
  684. {\etocifisstarred
  685. {}% star variant, do not add to toc
  686. {\etoclocalheadtotoc
  687. {\etocdivisionnameatlevel{\etoclocaltop+1}}%
  688. {\locallistfigurename}%
  689. }%
  690. }%
  691. {}%
  692. }%
  693. \def\etocetoclistoftablesmaketitle{%
  694. \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}%
  695. \ifnum\etoclocaltop>\tw@\mbox{}\par\fi
  696. \etociflocallottotoc
  697. {\etocifisstarred
  698. {}% star variant, do not add to toc
  699. {\etoclocalheadtotoc
  700. {\etocdivisionnameatlevel{\etoclocaltop+1}}%
  701. {\locallisttablename}%
  702. }%
  703. }%
  704. {}%
  705. }%
  706. \let\Etoc@listofreset\@empty
  707. \ifEtoc@lof
  708. \def\locallistoffigures{%
  709. \def\Etoc@listofreset{%
  710. \let\Etoc@currext\Etoc@tocext
  711. \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc
  712. \let\Etoc@@startlocaltochook\@empty
  713. \let\Etoc@listofreset\@empty
  714. \let\Etoc@listofhook\@empty
  715. }%
  716. \let\Etoc@currext\Etoc@lofext
  717. \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}%
  718. \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}%
  719. \def\Etoc@listofhook{%
  720. \def\Etoc@do####1{%
  721. \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel
  722. }%
  723. \Etoc@dolevels
  724. }%
  725. \localtableofcontents
  726. }
  727. \else
  728. \def\locallistoffigures{%
  729. \PackageError{etoc}{%
  730. \string\locallistoffigures \on@line\space but\MessageBreak
  731. package was loaded without `lof' option}%
  732. {Try again with \string\usepackage[lof]{etoc}}%
  733. }
  734. \fi
  735. \ifEtoc@lot
  736. \def\locallistoftables{%
  737. \def\Etoc@listofreset{%
  738. \let\Etoc@currext\Etoc@tocext
  739. \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc
  740. \let\Etoc@@startlocaltochook\@empty
  741. \let\Etoc@listofreset\@empty
  742. \let\Etoc@listofhook\@empty
  743. }%
  744. \let\Etoc@currext\Etoc@lotext
  745. \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}%
  746. \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}%
  747. \def\Etoc@listofhook{%
  748. \def\Etoc@do####1{%
  749. \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel
  750. }%
  751. \Etoc@dolevels
  752. }%
  753. \localtableofcontents
  754. }
  755. \else
  756. \def\locallistoftables{%
  757. \PackageError{etoc}{%
  758. \string\locallistoftable \on@line\space but\MessageBreak
  759. package was loaded without `lot' option}%
  760. {Try again with \string\usepackage[lot]{etoc}}%
  761. }
  762. \fi
  763. \def\Etoc@checkifempty {%
  764. \global\Etoc@isemptytoctrue
  765. \global\Etoc@stoptocfalse
  766. \global\let\Etoc@level\Etoc@minf
  767. \global\let\Etoc@virtualtop\Etoc@minf
  768. \gdef\Etoc@stackofends{{-3}{}}%
  769. \begingroup
  770. \ifEtoc@localtoc
  771. \def\etoc@startlocaltoc##1{%
  772. \ifnum##1=\Etoc@tocid\relax
  773. \global\let\etoclocaltop\Etoc@virtualtop
  774. \Etoc@@startlocaltochook
  775. \global\Etoc@notactivefalse
  776. \fi
  777. }%
  778. \let\contentsline\Etoc@testingcontentslinelocal
  779. \else
  780. \let\contentsline\Etoc@testingcontentsline
  781. \fi
  782. \Etoc@storetocdepth
  783. \let\Etoc@setlocaltop@doendsandbegin\@empty
  784. \the\Etoc@toctoks
  785. \Etoc@restoretocdepth
  786. \endgroup
  787. }
  788. \DeclareRobustCommand*\etocifwasempty
  789. {\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi }
  790. \expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname
  791. \def\Etoc@testingcontentslinelocal #1{%
  792. \ifEtoc@stoptoc
  793. \else
  794. \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel
  795. \else
  796. \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
  797. \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi
  798. \ifEtoc@notactive
  799. \else
  800. \ifnum\Etoc@level>\etoclocaltop
  801. \unless\ifnum\Etoc@level>\c@tocdepth
  802. \global\Etoc@isemptytocfalse
  803. \global\Etoc@stoptoctrue
  804. \fi
  805. \else
  806. \global\Etoc@stoptoctrue
  807. \fi
  808. \fi
  809. \fi
  810. \fi
  811. \Etoc@gobblethreeorfour{}%
  812. }
  813. \def\Etoc@testingcontentsline #1{%
  814. \ifEtoc@stoptoc
  815. \else
  816. \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel
  817. \else
  818. \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth
  819. \global\Etoc@isemptytocfalse
  820. \global\Etoc@stoptoctrue
  821. \fi
  822. \fi
  823. \fi
  824. \Etoc@gobblethreeorfour{}%
  825. }
  826. \def\Etoc@localtableofcontents#1{%
  827. \gdef\etoclocaltop{-\@m}%
  828. \Etoc@localtoctrue
  829. \global\Etoc@isemptytocfalse
  830. \edef\Etoc@tocid{#1}%
  831. \ifnum\Etoc@tocid<\@ne
  832. \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}%
  833. \global\Etoc@stoptoctrue
  834. \gdef\etoclocaltop{-\thr@@}%
  835. \Etoc@tableofcontents
  836. \expandafter\Etoc@gobtoetoc@
  837. \fi
  838. \global\Etoc@notactivetrue
  839. \ifEtoc@checksemptiness
  840. \Etoc@checkifempty
  841. \fi
  842. \ifEtoc@isemptytoc
  843. \ifEtoc@notactive
  844. \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}%
  845. \global\Etoc@isemptytocfalse
  846. \global\Etoc@stoptoctrue
  847. \gdef\etoclocaltop{-\thr@@}%
  848. \Etoc@tableofcontents
  849. \expandafter\expandafter\expandafter\Etoc@gobtoetoc@
  850. \fi
  851. \else
  852. \global\Etoc@stoptocfalse
  853. \global\Etoc@notactivetrue
  854. \edef\etoc@startlocaltoc##1%
  855. {\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}%
  856. \Etoc@tableofcontents
  857. \fi
  858. \@gobble\etoc@
  859. \endgroup\ifEtoc@mustclosegroup\endgroup\fi
  860. \Etoc@tocdepthreset
  861. \Etoc@listofreset
  862. \etocaftertochook
  863. }% \Etoc@localtableofcontents
  864. \def\Etoc@getref #1{%
  865. \@ifundefined{r@#1}
  866. {0}
  867. {\expandafter\Etoc@getref@i\romannumeral-`0%
  868. \expandafter\expandafter\expandafter
  869. \@car\csname r@#1\endcsname0\@nil\@etoc
  870. }%
  871. }
  872. \def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi}
  873. \def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}}
  874. \def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
  875. \@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
  876. \def\Etoc@dothis #1#2\etoc@ {\fi #1}
  877. \def\Etoc@t@bleofcontents{%
  878. \gdef\etoclocaltop{-\@M}%
  879. \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi
  880. \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi
  881. \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi
  882. \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi
  883. \global\Etoc@isemptytocfalse
  884. \ifEtoc@checksemptiness\Etoc@checkifempty\fi
  885. \ifEtoc@isemptytoc
  886. \ifEtoc@notocifnotoc
  887. \expandafter\expandafter\expandafter\@gobble
  888. \fi
  889. \fi
  890. \Etoc@tableofcontents
  891. \endgroup
  892. \ifEtoc@mustclosegroup\endgroup\fi
  893. \Etoc@tocdepthreset
  894. \Etoc@listofreset
  895. \etocaftertochook
  896. \@gobble\etoc@
  897. }% \Etoc@t@bleofcontents
  898. \def\Etoc@table@fcontents{%
  899. \refstepcounter{etoc@tocid}%
  900. \Etoc@tocwithidfalse
  901. \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents
  902. }
  903. \def\Etoc@localtable@fcontents{%
  904. \refstepcounter{etoc@tocid}%
  905. \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}%
  906. \Etoc@tocwithidtrue
  907. \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents
  908. }
  909. \def\etoctableofcontents{%
  910. \Etoc@openouttoc
  911. \Etoc@tocdepthset
  912. \begingroup
  913. \@ifstar
  914. {\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents}
  915. {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}%
  916. }% \etoctableofcontents
  917. \def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty
  918. \expandafter\@firstoftwo\else
  919. \expandafter\@secondoftwo
  920. \fi}
  921. \let\etocoriginaltableofcontents\tableofcontents
  922. \let\tableofcontents\etoctableofcontents
  923. \let\Etoc@listofhook\@empty
  924. \newcommand*\localtableofcontents{%
  925. \Etoc@openouttoc
  926. \Etoc@tocdepthset
  927. \begingroup
  928. \Etoc@listofhook
  929. \@ifstar
  930. {\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents}
  931. {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}%
  932. }% \localtableofcontents
  933. \newcommand*\localtableofcontentswithrelativedepth[1]{%
  934. \def\Etoc@@startlocaltochook{%
  935. \global\c@tocdepth\numexpr\etoclocaltop+#1\relax
  936. }%
  937. \def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty
  938. \let\Etoc@listofreset\@empty}%
  939. \localtableofcontents
  940. }% \localtableofcontentswithrelativedepth
  941. \newcommand\etocsettocstyle[2]{%
  942. \Etoc@etocstylefalse
  943. \Etoc@classstylefalse
  944. \def\Etoc@tableofcontents@user@before{#1}%
  945. \def\Etoc@tableofcontents@user@after {#2}%
  946. }%
  947. \def\etocstoretocstyleinto#1{%
  948. %% \@ifdefinable#1{%
  949. \edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse
  950. \def\noexpand\Etoc@tableofcontents@user@before{%
  951. \unexpanded\expandafter{\Etoc@tableofcontents@user@before}%
  952. }%
  953. \def\noexpand\Etoc@tableofcontents@user@after{%
  954. \unexpanded\expandafter{\Etoc@tableofcontents@user@after}%
  955. }%
  956. }%
  957. %% }%
  958. }%
  959. \def\Etoc@tableofcontents {%
  960. \Etoc@tableofcontents@etoc@before
  961. \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi
  962. \Etoc@tableofcontents@user@before
  963. \Etoc@tableofcontents@contents
  964. \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi
  965. \Etoc@tableofcontents@user@after
  966. \Etoc@tableofcontents@etoc@after
  967. \@gobble\etoc@
  968. }
  969. \def\Etoc@tableofcontents@etoc@before{%
  970. \ifnum\c@tocdepth>\Etoc@minf
  971. \else
  972. \expandafter\Etoc@gobtoetoc@
  973. \fi
  974. \Etoc@par
  975. \Etoc@beforetitlehook
  976. \etocbeforetitlehook
  977. \Etoc@storetocdepth
  978. \let\Etoc@savedcontentsline\contentsline
  979. \let\contentsline\Etoc@etoccontentsline
  980. \ifEtoc@standardlines
  981. \else
  982. \def\Etoc@do##1{%
  983. \expandafter\def\csname etocsaved##1tocline\endcsname
  984. {\PackageError{etoc}{%
  985. \expandafter\string\csname etocsaved##1tocline\endcsname\space
  986. has been deprecated\MessageBreak
  987. at 1.1a and is removed at 1.2.\MessageBreak
  988. Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak
  989. Reported \on@line}%
  990. {I will use \expandafter\string
  991. \csname l@##1\endcsname\space myself for this time.%
  992. }%
  993. \csname l@##1\endcsname
  994. }%
  995. }%
  996. \Etoc@dolevels
  997. \fi
  998. }%
  999. \def\Etoc@tableofcontents@contents{%
  1000. \Etoc@tocdepthset
  1001. \ifEtoc@parskip\parskip\z@skip\fi
  1002. \Etoc@aftertitlehook
  1003. \gdef\etoclocaltop{-\thr@@}%
  1004. \Etoc@toctoc
  1005. \etocaftercontentshook
  1006. }%
  1007. \def\Etoc@tableofcontents@etoc@after{%
  1008. \@nobreakfalse
  1009. \Etoc@restoretocdepth
  1010. \ifx\Etoc@global\global
  1011. \@ifundefined{tof@finish}
  1012. {}
  1013. {\ifx\tof@finish\@empty
  1014. \else
  1015. \global\let\contentsline\Etoc@savedcontentsline
  1016. \fi
  1017. }%
  1018. \fi
  1019. }
  1020. \def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname
  1021. \expandafter\Etoc@setstyle@a
  1022. \else
  1023. \expandafter\Etoc@setstyle@error
  1024. \fi {#1}%
  1025. }
  1026. \def\Etoc@setstyle@error #1{%
  1027. \PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak
  1028. forget some \string\etocsetlevel{#1}{<level>}?\MessageBreak
  1029. Reported}%
  1030. \@gobblefour
  1031. }
  1032. \def\Etoc@setstyle@a #1{%
  1033. \edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}%
  1034. \if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi
  1035. \unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1%
  1036. \Etoc@standardlinesfalse
  1037. \expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp
  1038. \else
  1039. \ifnum\Etoc@tmp=\Etoc@maxlevel
  1040. \in@{.#1,}{.figure,.table,}%
  1041. \ifin@
  1042. \PackageWarning{etoc}
  1043. {You can not use \string\etocsetstyle\space with `#1'.\MessageBreak
  1044. Check the package documentation (in particular about\MessageBreak
  1045. \string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)%
  1046. \MessageBreak on how to customize
  1047. figure and table entries in local\MessageBreak lists. Reported}%
  1048. \else
  1049. \PackageInfo{etoc}
  1050. {Attempt to set the style of `#1',\MessageBreak
  1051. whose level is currently the maximal one \etocthemaxlevel,\MessageBreak
  1052. which is never displayed. \space This will be ignored\MessageBreak
  1053. but note that we do quit compatibility mode.\MessageBreak
  1054. Reported}%
  1055. \Etoc@standardlinesfalse
  1056. \fi
  1057. \else
  1058. \PackageWarning{etoc}{This should not happen. Reported}%
  1059. \fi
  1060. \expandafter\@gobblefour
  1061. \fi
  1062. }
  1063. \long\def\Etoc@setstyle@b#1#2#3#4#5{%
  1064. \expandafter\def\csname Etoc@begin@#1\endcsname {#2}%
  1065. \expandafter\def\csname Etoc@prefix@#1\endcsname {#3}%
  1066. \expandafter\def\csname Etoc@contents@#1\endcsname {#4}%
  1067. \expandafter\def\csname Etoc@end@#1\endcsname {#5}%
  1068. }
  1069. \def\Etoc@setstyle@e#1{%
  1070. \expandafter\let\csname Etoc@begin@#1\endcsname \@empty
  1071. \expandafter\let\csname Etoc@prefix@#1\endcsname \@empty
  1072. \expandafter\let\csname Etoc@contents@#1\endcsname \@empty
  1073. \expandafter\let\csname Etoc@end@#1\endcsname \@empty
  1074. }
  1075. \def\Etoc@storelines@a#1{%
  1076. \noexpand\Etoc@setstyle@b{#1}%
  1077. {\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}%
  1078. {\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}%
  1079. {\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}%
  1080. {\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}%
  1081. }
  1082. \def\Etoc@expandonce#1{\unexpanded\expandafter{#1}}
  1083. \def\etocstorelinestylesinto#1{%
  1084. \edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}%
  1085. \Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}%
  1086. \Etoc@storelines@a {4}\Etoc@storelines@a {5}%
  1087. \ifEtoc@deeplevels
  1088. \Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}%
  1089. \Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}%
  1090. \fi
  1091. }%
  1092. }
  1093. \def\etocstorethislinestyleinto#1#2{%
  1094. \edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}%
  1095. }%
  1096. \def\etocfontminustwo {\normalfont \LARGE \bfseries}
  1097. \def\etocfontminusone {\normalfont \large \bfseries}
  1098. \def\etocfontzero {\normalfont \large \bfseries}
  1099. \def\etocfontone {\normalfont \normalsize \bfseries}
  1100. \def\etocfonttwo {\normalfont \normalsize}
  1101. \def\etocfontthree {\normalfont \footnotesize}
  1102. \def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex}
  1103. \def\etocsepminusone {4ex \@plus .5ex \@minus .5ex}
  1104. \def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex}
  1105. \def\etocsepone {1.5ex \@plus .3ex \@minus .3ex}
  1106. \def\etocseptwo {.5ex \@plus .1ex \@minus .1ex}
  1107. \def\etocsepthree {.25ex \@plus .05ex \@minus .05ex}
  1108. \def\etocbaselinespreadminustwo {1}
  1109. \def\etocbaselinespreadminusone {1}
  1110. \def\etocbaselinespreadzero {1}
  1111. \def\etocbaselinespreadone {1}
  1112. \def\etocbaselinespreadtwo {1}
  1113. \def\etocbaselinespreadthree {.9}
  1114. \def\etocminustwoleftmargin {1.5em plus 0.5fil}
  1115. \def\etocminustworightmargin {1.5em plus -0.5fil}
  1116. \def\etocminusoneleftmargin {1em}
  1117. \def\etocminusonerightmargin {1em}
  1118. \def\etoctoclineleaders
  1119. {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}}
  1120. \def\etocabbrevpagename {p.~}
  1121. \def\etocpartname {Part}
  1122. \def\etocbookname {Book}
  1123. \def\etocdefaultlines{%
  1124. \Etoc@standardlinesfalse
  1125. \etocdefaultlines@setbook
  1126. \etocdefaultlines@setpart
  1127. \etocdefaultlines@setchapter
  1128. \etocdefaultlines@setsection
  1129. \etocdefaultlines@setsubsection
  1130. \etocdefaultlines@setsubsubsection
  1131. \etocdefaultlines@setdeeperones
  1132. }
  1133. \def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@}
  1134. \@ifclassloaded{memoir}{%
  1135. \def\etocdefaultlines@setbook{%
  1136. \Etoc@setstyle@b
  1137. {-2}%
  1138. {\addpenalty\@M\etocskipfirstprefix}
  1139. {\addpenalty\@secpenalty}
  1140. {\begingroup
  1141. \etocfontminustwo
  1142. \addvspace{\etocsepminustwo}%
  1143. \parindent \z@
  1144. \leftskip \etocminustwoleftmargin
  1145. \rightskip \etocminustworightmargin
  1146. \parfillskip \@flushglue
  1147. \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}%
  1148. \etocname
  1149. \baselineskip\etocbaselinespreadminustwo\baselineskip
  1150. \par}%
  1151. \addpenalty\@M\addvspace{\etocsepminusone}%
  1152. \endgroup}
  1153. {}%
  1154. }
  1155. }{\let\etocdefaultlines@setbook\@empty}
  1156. \def\etocdefaultlines@setpart{%
  1157. \Etoc@setstyle@b
  1158. {-1}%
  1159. {\addpenalty\@M\etocskipfirstprefix}
  1160. {\addpenalty\@secpenalty}
  1161. {\begingroup
  1162. \etocfontminusone
  1163. \addvspace{\etocsepminusone}%
  1164. \parindent \z@
  1165. \leftskip \etocminusoneleftmargin
  1166. \rightskip \etocminusonerightmargin
  1167. \parfillskip \@flushglue
  1168. \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}%
  1169. \etocname
  1170. \baselineskip\etocbaselinespreadminusone\baselineskip
  1171. \par}%
  1172. \addpenalty\@M\addvspace{\etocsepzero}%
  1173. \endgroup}
  1174. {}%
  1175. }
  1176. \def\etocdefaultlines@setchapter{%
  1177. \Etoc@setstyle@b
  1178. {0}%
  1179. {\addpenalty\@M\etocskipfirstprefix}
  1180. {\addpenalty\@itempenalty}
  1181. {\begingroup
  1182. \etocfontzero
  1183. \addvspace{\etocsepzero}%
  1184. \parindent \z@ \parfillskip \@flushglue
  1185. \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname
  1186. \baselineskip\etocbaselinespreadzero\baselineskip
  1187. \par}%
  1188. \endgroup}
  1189. {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}%
  1190. }
  1191. \def\etocdefaultlines@setsection{%
  1192. \Etoc@setstyle@b
  1193. {1}%
  1194. {\addpenalty\@M\etocskipfirstprefix}
  1195. {\addpenalty\@itempenalty}
  1196. {\begingroup
  1197. \etocfontone
  1198. \addvspace{\etocsepone}%
  1199. \parindent \z@ \parfillskip \z@
  1200. \setbox\z@\vbox{\parfillskip\@flushglue
  1201. \etocname\par
  1202. \setbox\tw@\lastbox
  1203. \global\setbox\@ne\hbox{\unhbox\tw@\ }}%
  1204. \dimen\z@=\wd\@ne
  1205. \setbox\z@=\etoctoclineleaders
  1206. \advance\dimen\z@\wd\z@
  1207. \etocifnumbered
  1208. {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}}
  1209. {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}%
  1210. \advance\dimen\z@\wd\tw@
  1211. \ifdim\dimen\z@ < \linewidth
  1212. \vbox{\etocname~%
  1213. \leaders\box\z@\hfil\box\tw@
  1214. \baselineskip\etocbaselinespreadone\baselineskip
  1215. \par}%
  1216. \else
  1217. \vbox{\etocname~%
  1218. \leaders\copy\z@\hfil\break
  1219. \hbox{}\leaders\box\z@\hfil\box\tw@
  1220. \baselineskip\etocbaselinespreadone\baselineskip
  1221. \par}%
  1222. \fi
  1223. \endgroup}
  1224. {\addpenalty\@secpenalty\addvspace{\etocsepzero}}%
  1225. }
  1226. \def\etocdefaultlines@setsubsection{%
  1227. \Etoc@setstyle@b
  1228. {2}%
  1229. {\addpenalty\@medpenalty\etocskipfirstprefix}
  1230. {\addpenalty\@itempenalty}
  1231. {\begingroup
  1232. \etocfonttwo
  1233. \addvspace{\etocseptwo}%
  1234. \parindent \z@ \parfillskip \z@
  1235. \setbox\z@\vbox{\parfillskip\@flushglue
  1236. \etocname\par\setbox\tw@\lastbox
  1237. \global\setbox\@ne\hbox{\unhbox\tw@}}%
  1238. \dimen\z@=\wd\@ne
  1239. \setbox\z@=\etoctoclineleaders
  1240. \advance\dimen\z@\wd\z@
  1241. \etocifnumbered
  1242. {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}}
  1243. {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}%
  1244. \advance\dimen\z@\wd\tw@
  1245. \ifdim\dimen\z@ < \linewidth
  1246. \vbox{\etocname~%
  1247. \leaders\box\z@\hfil\box\tw@
  1248. \baselineskip\etocbaselinespreadtwo\baselineskip
  1249. \par}%
  1250. \else
  1251. \vbox{\etocname~%
  1252. \leaders\copy\z@\hfil\break
  1253. \hbox{}\leaders\box\z@\hfil\box\tw@
  1254. \baselineskip\etocbaselinespreadtwo\baselineskip
  1255. \par}%
  1256. \fi
  1257. \endgroup}
  1258. {\addpenalty\@secpenalty\addvspace{\etocsepone}}%
  1259. }
  1260. \def\etocdefaultlines@setsubsubsection{%
  1261. \Etoc@setstyle@b
  1262. {3}%
  1263. {\addpenalty\@M
  1264. \etocfontthree
  1265. \vspace{\etocsepthree}%
  1266. \noindent
  1267. \etocskipfirstprefix}
  1268. {\allowbreak\,--\,}
  1269. {\etocname}
  1270. {.\hfil
  1271. \begingroup
  1272. \baselineskip\etocbaselinespreadthree\baselineskip
  1273. \par
  1274. \endgroup
  1275. \addpenalty{-\@highpenalty}}
  1276. }
  1277. \def\etocdefaultlines@setdeeperones{%
  1278. \Etoc@setstyle@e{4}%
  1279. \Etoc@setstyle@e{5}%
  1280. \ifEtoc@deeplevels
  1281. \Etoc@setstyle@e{6}%
  1282. \Etoc@setstyle@e{7}%
  1283. \Etoc@setstyle@e{8}%
  1284. \Etoc@setstyle@e{9}%
  1285. \Etoc@setstyle@e{10}%
  1286. \Etoc@setstyle@e{11}%
  1287. \fi
  1288. }
  1289. \def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex}
  1290. \def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex}
  1291. \def\etoccolumnsep{2em}
  1292. \def\etocmulticolsep{0ex}
  1293. \def\etocmulticolpretolerance{-1}
  1294. \def\etocmulticoltolerance{200}
  1295. \def\etocdefaultnbcol{2}
  1296. \def\etocinnertopsep{2ex}
  1297. \newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{%
  1298. \etocsettocstyle
  1299. {\let\etocoldpar\par
  1300. \addvspace{\etocabovetocskip}%
  1301. \ifnum #1>\@ne
  1302. \expandafter\@firstoftwo
  1303. \else \expandafter\@secondoftwo
  1304. \fi
  1305. {\multicolpretolerance\etocmulticolpretolerance
  1306. \multicoltolerance\etocmulticoltolerance
  1307. \setlength{\columnsep}{\etoccolumnsep}%
  1308. \setlength{\multicolsep}{\etocmulticolsep}%
  1309. \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]}
  1310. {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip
  1311. \@@par\endgroup
  1312. \fi
  1313. \nobreak\addvspace{\etocinnertopsep}%
  1314. \pretolerance\etocmulticolpretolerance
  1315. \tolerance\etocmulticoltolerance}%
  1316. }%
  1317. {\ifnum #1>\@ne
  1318. \expandafter\@firstofone
  1319. \else \expandafter\@gobble
  1320. \fi
  1321. {\end{multicols}}%
  1322. \addvspace{\etocbelowtocskip}}%
  1323. }
  1324. \def\etocinnerbottomsep{3.5ex}
  1325. \def\etocinnerleftsep{2em}
  1326. \def\etocinnerrightsep{2em}
  1327. \def\etoctoprule{\hrule}
  1328. \def\etocleftrule{\vrule}
  1329. \def\etocrightrule{\vrule}
  1330. \def\etocbottomrule{\hrule}
  1331. \def\etoctoprulecolorcmd{\relax}
  1332. \def\etocbottomrulecolorcmd{\relax}
  1333. \def\etocleftrulecolorcmd{\relax}
  1334. \def\etocrightrulecolorcmd{\relax}
  1335. \def\etoc@ruledheading #1{%
  1336. \hb@xt@\linewidth{\color@begingroup
  1337. \hss #1\hss\hskip-\linewidth
  1338. \etoctoprulecolorcmd\leaders\etoctoprule\hss
  1339. \phantom{#1}%
  1340. \leaders\etoctoprule\hss\color@endgroup}%
  1341. \nointerlineskip\nobreak\vskip\etocinnertopsep}
  1342. \newcommand*\etocruledstyle[2][\etocdefaultnbcol]{%
  1343. \etocsettocstyle
  1344. {\addvspace{\etocabovetocskip}%
  1345. \ifnum #1>\@ne
  1346. \expandafter\@firstoftwo
  1347. \else \expandafter\@secondoftwo
  1348. \fi
  1349. {\multicolpretolerance\etocmulticolpretolerance
  1350. \multicoltolerance\etocmulticoltolerance
  1351. \setlength{\columnsep}{\etoccolumnsep}%
  1352. \setlength{\multicolsep}{\etocmulticolsep}%
  1353. \begin{multicols}{#1}[\etoc@ruledheading{#2}]}
  1354. {\etoc@ruledheading{#2}%
  1355. \pretolerance\etocmulticolpretolerance
  1356. \tolerance\etocmulticoltolerance}}
  1357. {\ifnum #1>\@ne\expandafter\@firstofone
  1358. \else \expandafter\@gobble
  1359. \fi
  1360. {\end{multicols}}%
  1361. \addvspace{\etocbelowtocskip}}}
  1362. \def\etocframedmphook{\relax}
  1363. \long\def\etocbkgcolorcmd{\relax}
  1364. \long\def\Etoc@relax{\relax}
  1365. \newbox\etoc@framed@titlebox
  1366. \newbox\etoc@framed@contentsbox
  1367. \newcommand*\etocframedstyle[2][\etocdefaultnbcol]{%
  1368. \etocsettocstyle{%
  1369. \addvspace{\etocabovetocskip}%
  1370. \sbox\z@{#2}%
  1371. \dimen\z@\dp\z@
  1372. \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi
  1373. \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup
  1374. \hss
  1375. \ifx\etocbkgcolorcmd\Etoc@relax
  1376. \else
  1377. \sbox\tw@{\color{white}%
  1378. \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}%
  1379. \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi
  1380. \box\tw@
  1381. \hskip-\wd\z@
  1382. \fi
  1383. \copy\z@
  1384. \hss
  1385. \hskip-\linewidth
  1386. \etoctoprulecolorcmd\leaders\etoctoprule\hss
  1387. \hskip\wd\z@
  1388. \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}%
  1389. \setbox\z@\hbox{\etocleftrule\etocrightrule}%
  1390. \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@
  1391. \advance\dimen\tw@-\etocinnerleftsep
  1392. \advance\dimen\tw@-\etocinnerrightsep
  1393. \setbox\etoc@framed@contentsbox=\vbox\bgroup
  1394. \hsize\dimen\tw@
  1395. \kern\dimen\z@
  1396. \vskip\etocinnertopsep
  1397. \hbox\bgroup
  1398. \begin{minipage}{\hsize}%
  1399. \etocframedmphook
  1400. \ifnum #1>\@ne
  1401. \expandafter\@firstoftwo
  1402. \else \expandafter\@secondoftwo
  1403. \fi
  1404. {\multicolpretolerance\etocmulticolpretolerance
  1405. \multicoltolerance\etocmulticoltolerance
  1406. \setlength{\columnsep}{\etoccolumnsep}%
  1407. \setlength{\multicolsep}{\etocmulticolsep}%
  1408. \begin{multicols}{#1}}
  1409. {\pretolerance\etocmulticolpretolerance
  1410. \tolerance\etocmulticoltolerance}}
  1411. {\ifnum #1>\@ne\expandafter\@firstofone
  1412. \else \expandafter\@gobble
  1413. \fi
  1414. {\end{multicols}\unskip }%
  1415. \end{minipage}%
  1416. \egroup
  1417. \vskip\etocinnerbottomsep
  1418. \egroup
  1419. \vbox{\hsize\linewidth
  1420. \ifx\etocbkgcolorcmd\Etoc@relax
  1421. \else
  1422. \kern\ht\etoc@framed@titlebox
  1423. \kern\dp\etoc@framed@titlebox
  1424. \hb@xt@\linewidth{\color@begingroup
  1425. \etocleftrulecolorcmd\etocleftrule
  1426. \etocbkgcolorcmd
  1427. \leaders\vrule
  1428. \@height\ht\etoc@framed@contentsbox
  1429. \@depth\dp\etoc@framed@contentsbox
  1430. \hss
  1431. \etocrightrulecolorcmd\etocrightrule
  1432. \color@endgroup}\nointerlineskip
  1433. \vskip-\dp\etoc@framed@contentsbox
  1434. \vskip-\ht\etoc@framed@contentsbox
  1435. \vskip-\dp\etoc@framed@titlebox
  1436. \vskip-\ht\etoc@framed@titlebox
  1437. \fi
  1438. \box\etoc@framed@titlebox\nointerlineskip
  1439. \hb@xt@\linewidth{\color@begingroup
  1440. {\etocleftrulecolorcmd\etocleftrule}%
  1441. \hss\box\etoc@framed@contentsbox\hss
  1442. \etocrightrulecolorcmd\etocrightrule\color@endgroup}
  1443. \nointerlineskip
  1444. \vskip\ht\etoc@framed@contentsbox
  1445. \vskip\dp\etoc@framed@contentsbox
  1446. \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd
  1447. \leaders\etocbottomrule\hss\color@endgroup}}
  1448. \addvspace{\etocbelowtocskip}}}
  1449. \newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{%
  1450. \etocmulticolstyle[#1]{#2}%
  1451. \tableofcontents}
  1452. \newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{%
  1453. \etocmulticolstyle[#1]{#2}%
  1454. \tableofcontents*}
  1455. \newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{%
  1456. \etocmulticolstyle[#1]{#2}%
  1457. \localtableofcontents}
  1458. \newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{%
  1459. \etocmulticolstyle[#1]{#2}%
  1460. \localtableofcontents*}
  1461. \newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{%
  1462. \etocruledstyle[#1]{#2}%
  1463. \tableofcontents}
  1464. \newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{%
  1465. \etocruledstyle[#1]{#2}%
  1466. \tableofcontents*}
  1467. \newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{%
  1468. \etocruledstyle[#1]{#2}%
  1469. \localtableofcontents}
  1470. \newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{%
  1471. \etocruledstyle[#1]{#2}%
  1472. \localtableofcontents*}
  1473. \newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{%
  1474. \etocframedstyle[#1]{#2}%
  1475. \tableofcontents}
  1476. \newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{%
  1477. \etocframedstyle[#1]{#2}%
  1478. \tableofcontents*}
  1479. \newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{%
  1480. \etocframedstyle[#1]{#2}%
  1481. \localtableofcontents}
  1482. \newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{%
  1483. \etocframedstyle[#1]{#2}%
  1484. \localtableofcontents*}
  1485. \def\etocmulticol{\begingroup
  1486. \Etoc@mustclosegrouptrue
  1487. \@ifstar
  1488. {\etoc@multicoltoci}
  1489. {\etoc@multicoltoc}}
  1490. \def\etocruled{\begingroup
  1491. \Etoc@mustclosegrouptrue
  1492. \@ifstar
  1493. {\etoc@ruledtoci}
  1494. {\etoc@ruledtoc}}
  1495. \def\etocframed{\begingroup
  1496. \Etoc@mustclosegrouptrue
  1497. \@ifstar
  1498. {\etoc@framedtoci}
  1499. {\etoc@framedtoc}}
  1500. \def\etoclocalmulticol{\begingroup
  1501. \Etoc@mustclosegrouptrue
  1502. \@ifstar
  1503. {\etoc@local@multicoltoci}
  1504. {\etoc@local@multicoltoc}}
  1505. \def\etoclocalruled{\begingroup
  1506. \Etoc@mustclosegrouptrue
  1507. \@ifstar
  1508. {\etoc@local@ruledtoci}
  1509. {\etoc@local@ruledtoc}}
  1510. \def\etoclocalframed{\begingroup
  1511. \Etoc@mustclosegrouptrue
  1512. \@ifstar
  1513. {\etoc@local@framedtoci}
  1514. {\etoc@local@framedtoc}}
  1515. \def\etocmemoirtoctotocfmt #1#2{%
  1516. \PackageWarning{etoc}
  1517. {\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak
  1518. Use in its place \string\etocsettoclineforclasstoc,\MessageBreak
  1519. and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}).
  1520. I will do this now.\MessageBreak
  1521. Reported}%
  1522. \etocsettoclineforclasstoc{#1}{#2}%
  1523. \etocsettoclineforclasslistof{toc}{#1}{#2}%
  1524. }
  1525. \def\etocsettoclineforclasstoc #1#2{%
  1526. \def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}%
  1527. }
  1528. \def\etocsettoclineforclasslistof #1#2#3{%
  1529. \@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}%
  1530. }
  1531. \let\etocclasslocaltocaddtotoc\@empty
  1532. \let\etocclasslocallofaddtotoc\@empty
  1533. \let\etocclasslocallotaddtotoc\@empty
  1534. \ifdefined\c@chapter
  1535. \def\etocclasslocaltocmaketitle{\section*{\localcontentsname}}
  1536. \def\etocclasslocallofmaketitle{\section*{\locallistfigurename}}
  1537. \def\etocclasslocallotmaketitle{\section*{\locallisttablename}}
  1538. \etocsettoclineforclasstoc {chapter}{\contentsname}
  1539. \etocsettoclineforclasslistof{toc}{section}{\localcontentsname}
  1540. \etocsettoclineforclasslistof{lof}{section}{\locallistfigurename}
  1541. \etocsettoclineforclasslistof{lot}{section}{\locallisttablename}
  1542. \else
  1543. \def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}%
  1544. \def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}%
  1545. \def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}%
  1546. \etocsettoclineforclasstoc {section}{\contentsname}
  1547. \etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname}
  1548. \etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename}
  1549. \etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename}
  1550. \fi
  1551. \def\etocclasslocalperhapsaddtotoc #1{%
  1552. \etocifisstarred
  1553. {}
  1554. {\csname ifEtoc@local#1totoc\endcsname
  1555. \csname etocclasslocal#1addtotoc\endcsname
  1556. \fi
  1557. }%
  1558. }
  1559. \def\etocarticlestyle{%
  1560. \etocsettocstyle
  1561. {\ifEtoc@localtoc
  1562. \@nameuse{etocclasslocal\Etoc@currext maketitle}%
  1563. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1564. \else
  1565. \section *{\contentsname
  1566. \@mkboth {\MakeUppercase \contentsname}
  1567. {\MakeUppercase \contentsname}}%
  1568. \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
  1569. \fi
  1570. }
  1571. {}%
  1572. }
  1573. \def\etocarticlestylenomarks{%
  1574. \etocsettocstyle
  1575. {\ifEtoc@localtoc
  1576. \@nameuse{etocclasslocal\Etoc@currext maketitle}%
  1577. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1578. \else
  1579. \section *{\contentsname}%
  1580. \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
  1581. \fi
  1582. }
  1583. {}%
  1584. }
  1585. \def\etocbookstyle{%
  1586. \etocsettocstyle
  1587. {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
  1588. \ifEtoc@localtoc
  1589. \@nameuse{etocclasslocal\Etoc@currext maketitle}%
  1590. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1591. \else
  1592. \chapter *{\contentsname
  1593. \@mkboth {\MakeUppercase \contentsname}
  1594. {\MakeUppercase \contentsname}}%
  1595. \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
  1596. \fi
  1597. }%
  1598. {\if@restonecol \twocolumn \fi}%
  1599. }
  1600. \def\etocbookstylenomarks{%
  1601. \etocsettocstyle
  1602. {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
  1603. \ifEtoc@localtoc
  1604. \@nameuse{etocclasslocal\Etoc@currext maketitle}%
  1605. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1606. \else
  1607. \chapter *{\contentsname}%
  1608. \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
  1609. \fi
  1610. }%
  1611. {\if@restonecol \twocolumn \fi}%
  1612. }
  1613. \let\etocreportstyle\etocbookstyle
  1614. \let\etocreportstylenomarks\etocbookstylenomarks
  1615. \def\etocmemoirstyle{%
  1616. \etocsettocstyle
  1617. {\ensureonecol \par \begingroup \phantomsection
  1618. \ifx\Etoc@aftertitlehook\@empty
  1619. \else
  1620. \ifmem@em@starred@listof
  1621. \else
  1622. \ifEtoc@localtoc
  1623. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1624. \else
  1625. \ifEtoc@maintoctotoc
  1626. \etocclassmaintocaddtotoc
  1627. \fi
  1628. \fi
  1629. \fi
  1630. \fi
  1631. \ifEtoc@localtoc
  1632. \@namedef{@\Etoc@currext maketitle}{%
  1633. \@nameuse{etocclasslocal\Etoc@currext maketitle}%
  1634. }%
  1635. \fi
  1636. \@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code
  1637. \ifx\Etoc@aftertitlehook\@empty
  1638. \else
  1639. \Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax
  1640. \fi
  1641. \parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}%
  1642. }%
  1643. {\@nameuse {cft\Etoc@currext afterlisthook}%
  1644. \endgroup\restorefromonecol
  1645. }%
  1646. }
  1647. \let\Etoc@beforetitlehook\@empty
  1648. \if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}%
  1649. \expandafter\@gobble
  1650. \else
  1651. \ifdefined\setuptoc
  1652. \def\Etoc@beforetitlehook{%
  1653. \ifEtoc@localtoc
  1654. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1655. \setuptoc{\Etoc@currext}{leveldown}%
  1656. \else
  1657. \etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}%
  1658. \fi
  1659. }%
  1660. \fi
  1661. \expandafter\@firstofone
  1662. \fi
  1663. {\def\etocclasslocalperhapsaddtotoc #1{%
  1664. \etocifisstarred
  1665. {}%
  1666. {\csname ifEtoc@local#1totoc\endcsname
  1667. \setuptoc{\Etoc@currext}{totoc}%
  1668. \fi
  1669. }%
  1670. }%
  1671. }
  1672. \ifdefined\Iftocfeature
  1673. \def\etoc@Iftocfeature{\Iftocfeature}%
  1674. \else
  1675. \def\etoc@Iftocfeature{\iftocfeature}%
  1676. \fi
  1677. \def\etocscrartclstyle{%
  1678. \etocsettocstyle
  1679. {\ifx\Etoc@currext\Etoc@tocext
  1680. \expandafter\@firstofone
  1681. \else
  1682. \expandafter\@gobble
  1683. \fi
  1684. {\let\if@dynlist\if@tocleft}%
  1685. \edef\@currext{\Etoc@currext}%
  1686. \@ifundefined{listof\@currext name}%
  1687. {\def\list@fname{\listofname~\@currext}}%
  1688. {\expandafter\let\expandafter\list@fname
  1689. \csname listof\@currext name\endcsname}%
  1690. \etoc@Iftocfeature {\@currext}{onecolumn}
  1691. {\etoc@Iftocfeature {\@currext}{leveldown}
  1692. {}
  1693. {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }}
  1694. {}%
  1695. \etoc@Iftocfeature {\@currext}{numberline}%
  1696. {\def \nonumberline {\numberline {}}}{}%
  1697. \expandafter\tocbasic@listhead\expandafter {\list@fname}%
  1698. \begingroup \expandafter \expandafter \expandafter
  1699. \endgroup \expandafter
  1700. \ifx
  1701. \csname microtypesetup\endcsname \relax
  1702. \else
  1703. \etoc@Iftocfeature {\@currext}{noprotrusion}{}
  1704. {\microtypesetup {protrusion=false}%
  1705. \PackageInfo {tocbasic}%
  1706. {character protrusion at \@currext\space deactivated}}%
  1707. \fi
  1708. \etoc@Iftocfeature{\@currext}{noparskipfake}{}{%
  1709. \ifvmode \@tempskipa\lastskip \vskip-\lastskip
  1710. \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi
  1711. }%
  1712. \setlength {\parskip }{\z@ }%
  1713. \setlength {\parindent }{\z@ }%
  1714. \setlength {\parfillskip }{\z@ \@plus 1fil}%
  1715. \csname tocbasic@@before@hook\endcsname
  1716. \csname tb@\@currext @before@hook\endcsname
  1717. }% end of before_toc
  1718. {% start of after_toc
  1719. \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file
  1720. \edef\@currext{\Etoc@currext}%
  1721. \csname tb@\@currext @after@hook\endcsname
  1722. \csname tocbasic@@after@hook\endcsname
  1723. }% end of after_toc
  1724. }
  1725. \let\etocscrbookstyle\etocscrartclstyle
  1726. \let\etocscrreprtstyle\etocscrartclstyle
  1727. \def\etocclasstocstyle{\etocarticlestyle}
  1728. \newcommand*\etocmarkboth[1]{%
  1729. \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
  1730. \newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}}
  1731. \newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]%
  1732. {\csname #1\endcsname *{#3}}}
  1733. \newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]%
  1734. {\csname #1\endcsname *{#3\etocmarkboth{#4}}}}
  1735. \newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]%
  1736. {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}}
  1737. \def\Etoc@redefetocstylesforchapters{%
  1738. \renewcommand\etoctocstylewithmarks[4][chapter]{%
  1739. \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}%
  1740. }
  1741. \renewcommand\etoctocstylewithmarksnouc[4][chapter]{%
  1742. \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}%
  1743. }
  1744. \renewcommand\etoctocstyle[3][chapter]{%
  1745. \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}}
  1746. }
  1747. }
  1748. \@ifclassloaded{scrartcl}
  1749. {\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{}
  1750. \@ifclassloaded{book}
  1751. {\renewcommand*\etocfontone{\normalfont\normalsize}
  1752. \renewcommand*\etocclasstocstyle{\etocbookstyle}
  1753. \Etoc@redefetocstylesforchapters}{}
  1754. \@ifclassloaded{report}
  1755. {\renewcommand*\etocfontone{\normalfont\normalsize}
  1756. \renewcommand*\etocclasstocstyle{\etocreportstyle}
  1757. \Etoc@redefetocstylesforchapters}{}
  1758. \@ifclassloaded{scrbook}
  1759. {\renewcommand*\etocfontone{\normalfont\normalsize}
  1760. \renewcommand*\etocclasstocstyle{\etocscrbookstyle}
  1761. \Etoc@redefetocstylesforchapters}{}
  1762. \@ifclassloaded{scrreprt}
  1763. {\renewcommand*\etocfontone{\normalfont\normalsize}
  1764. \renewcommand*\etocclasstocstyle{\etocscrreprtstyle}
  1765. \Etoc@redefetocstylesforchapters}{}
  1766. \@ifclassloaded{memoir}
  1767. {\renewcommand*\etocfontone{\normalfont\normalsize}
  1768. \renewcommand*\etocclasstocstyle{\etocmemoirstyle}
  1769. \Etoc@redefetocstylesforchapters}{}
  1770. \def\etoctocloftstyle {%
  1771. \etocsettocstyle{%
  1772. \@cfttocstart
  1773. \par
  1774. \begingroup
  1775. \parindent\z@ \parskip\cftparskip
  1776. \@nameuse{@cftmake\Etoc@currext title}%
  1777. \ifEtoc@localtoc
  1778. \etoctocloftlocalperhapsaddtotoc\Etoc@currext
  1779. \else
  1780. \etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}%
  1781. \fi
  1782. }%
  1783. {%
  1784. \endgroup
  1785. \@cfttocfinish
  1786. }%
  1787. }
  1788. \def\etoctocloftlocalperhapsaddtotoc#1{%
  1789. \etocifisstarred
  1790. {}%
  1791. {\csname ifEtoc@local#1totoc\endcsname
  1792. \ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi
  1793. \csname @cftdobib#1\endcsname
  1794. \fi
  1795. }%
  1796. }
  1797. \def\etoctocbibindstyle {%
  1798. \etocsettocstyle {%
  1799. \toc@start
  1800. \ifEtoc@localtoc
  1801. \@nameuse{etocclasslocal\Etoc@currext maketitle}%
  1802. \etocclasslocalperhapsaddtotoc\Etoc@currext
  1803. \else
  1804. \etoc@tocbibind@dotoctitle
  1805. \fi
  1806. }%
  1807. {\toc@finish}%
  1808. }
  1809. \def\etoc@tocbibind@dotoctitle {%
  1810. \if@bibchapter
  1811. \etocifisstarred
  1812. {\chapter*{\contentsname}\prw@mkboth{\contentsname} % id.
  1813. }%
  1814. {\ifEtoc@maintoctotoc
  1815. \toc@chapter{\contentsname} %<-space from original
  1816. \else
  1817. \chapter*{\contentsname}\prw@mkboth{\contentsname} % id.
  1818. \fi
  1819. }%
  1820. \else
  1821. \etocifisstarred
  1822. {\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space
  1823. }
  1824. {\ifEtoc@maintoctotoc
  1825. \toc@section{\@tocextra}{\contentsname} %<-space from original
  1826. \else
  1827. \@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id.
  1828. \fi
  1829. }%
  1830. \fi
  1831. }%
  1832. \@ifclassloaded{memoir}
  1833. {}
  1834. {% memoir not loaded
  1835. \@ifpackageloaded{tocloft}
  1836. {\if@cftnctoc\else
  1837. \ifEtoc@keeporiginaltoc
  1838. \else
  1839. \AtBeginDocument{\let\tableofcontents\etoctableofcontents}%
  1840. \fi
  1841. \fi }
  1842. {\AtBeginDocument
  1843. {\@ifpackageloaded{tocloft}
  1844. {\if@cftnctoc\else
  1845. \PackageWarningNoLine {etoc}
  1846. {Package `tocloft' was loaded after `etoc'.\MessageBreak
  1847. To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak
  1848. be tricked into believing to have been loaded with its\MessageBreak
  1849. option `titles'. \space But this will cause the `tocloft'\MessageBreak
  1850. customization of the titles of the main list of figures\MessageBreak
  1851. and list of tables to not apply either.\MessageBreak
  1852. You should load `tocloft' before `etoc'.}%
  1853. \AtEndDocument{\PackageWarning{etoc}
  1854. {Please load `tocloft' before `etoc'!\@gobbletwo}}%
  1855. \fi
  1856. \@cftnctoctrue }%
  1857. {}%
  1858. }%
  1859. }%
  1860. }
  1861. \@ifclassloaded{memoir}
  1862. {}
  1863. {% memoir not loaded
  1864. \AtBeginDocument{%
  1865. \@ifpackageloaded{tocloft}
  1866. {%
  1867. \def\etocclasstocstyle{%
  1868. \etoctocloftstyle
  1869. \Etoc@classstyletrue
  1870. }%
  1871. \ifEtoc@etocstyle
  1872. \ifEtoc@classstyle
  1873. \etocclasstocstyle
  1874. \Etoc@etocstyletrue
  1875. \fi
  1876. \else
  1877. \ifEtoc@classstyle
  1878. \etocclasstocstyle
  1879. \fi
  1880. \fi
  1881. }%
  1882. {% no tocloft
  1883. \@ifpackageloaded {tocbibind}
  1884. {\if@dotoctoc
  1885. \def\etocclasstocstyle{%
  1886. \etoctocbibindstyle
  1887. \Etoc@classstyletrue
  1888. }%
  1889. \ifEtoc@etocstyle
  1890. \ifEtoc@classstyle
  1891. \etocclasstocstyle
  1892. \Etoc@etocstyletrue
  1893. \fi
  1894. \else
  1895. \ifEtoc@classstyle
  1896. \etocclasstocstyle
  1897. \fi
  1898. \fi
  1899. \ifEtoc@keeporiginaltoc
  1900. \else
  1901. \let\tableofcontents\etoctableofcontents
  1902. \fi
  1903. }%
  1904. {}%
  1905. }%
  1906. \@ifpackageloaded{tocbibind}
  1907. {% tocbibind, perhaps with tocloft
  1908. \if@dotoctoc
  1909. \ifEtoc@keeporiginaltoc
  1910. \else
  1911. \let\tableofcontents\etoctableofcontents
  1912. \fi
  1913. \etocsetup{maintoctotoc,localtoctotoc}%
  1914. \PackageInfo{etoc}{%
  1915. Setting (or re-setting) the options `maintoctotoc' and\MessageBreak
  1916. `localtoctotoc' to true as tocbibind was detected and\MessageBreak
  1917. found to be configured for `TOC to toc'.\MessageBreak
  1918. Reported at begin document}%
  1919. \fi
  1920. \if@dotoclof
  1921. \ifEtoc@lof
  1922. \etocsetup{localloftotoc}%
  1923. \PackageInfo{etoc}{%
  1924. Setting (or re-setting) `localloftotoc=true' as the\MessageBreak
  1925. package tocbibind was detected and is configured for\MessageBreak
  1926. `LOF to toc'. Reported at begin document}%
  1927. \fi
  1928. \fi
  1929. \if@dotoclot
  1930. \ifEtoc@lot
  1931. \etocsetup{locallottotoc}%
  1932. \PackageInfo{etoc}{%
  1933. Setting (or re-setting) `locallottotoc=true' as the\MessageBreak
  1934. package tocbibind was detected and is configured for\MessageBreak
  1935. `LOT to toc'. Reported at begin document}%
  1936. \fi
  1937. \fi
  1938. }% end of tocbibind branch
  1939. {}%
  1940. }% end of at begin document
  1941. }% end of not with memoir branch
  1942. \def\Etoc@addtocontents #1#2{%
  1943. \addtocontents {toc}{%
  1944. \protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}%
  1945. \ifdefined\protected@file@percent\protected@file@percent\fi
  1946. }%
  1947. }
  1948. \def\Etoc@addcontentsline@ #1#2#3{%
  1949. \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}%
  1950. }
  1951. \DeclareRobustCommand*{\etoctoccontentsline}
  1952. {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}}
  1953. \def\Etoc@addtocontents@immediately#1#2{%
  1954. \begingroup
  1955. \let\Etoc@originalwrite\write
  1956. \def\write{\immediate\Etoc@originalwrite}%
  1957. \Etoc@addtocontents{#1}{#2}%
  1958. \endgroup
  1959. }
  1960. \def\Etoc@addcontentsline@@immediately#1#2#3{%
  1961. \begingroup
  1962. \let\Etoc@originalwrite\write
  1963. \def\write{\immediate\Etoc@originalwrite}%
  1964. \Etoc@addcontentsline@{#1}{#2}{#3}%
  1965. \endgoroup
  1966. }
  1967. \DeclareRobustCommand*{\etocimmediatetoccontentsline}
  1968. {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}}
  1969. \def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}}
  1970. \def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax}
  1971. \def\etocobeytoctocdepth {\def\etoc@settocdepth
  1972. {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}}
  1973. \def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth
  1974. \global\c@tocdepth\Etoc@savedtocdepth\relax\fi }
  1975. \def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble }
  1976. \def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth }
  1977. \def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup
  1978. \expandafter\Etoc@set@tocdepth@
  1979. \else\expandafter\Etoc@set@toctocdepth
  1980. \fi }
  1981. \def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@}
  1982. {\PackageWarning{etoc}
  1983. {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}}
  1984. {\global\c@tocdepth\csname Etoc@#1@@\endcsname}%
  1985. }
  1986. \def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ }
  1987. \def\Etoc@set@toctocdepth@ #1{%
  1988. \@ifundefined{Etoc@#1@@}%
  1989. {\PackageWarning{etoc}
  1990. {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}%
  1991. {\addtocontents {toc}
  1992. {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}%
  1993. }
  1994. \def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately}
  1995. \def\Etoc@set@toctocdepth@immediately #1{%
  1996. \@ifundefined{Etoc@#1@@}%
  1997. {\PackageWarning{etoc}
  1998. {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}%
  1999. {\begingroup
  2000. \let\Etoc@originalwrite\write
  2001. \def\write{\immediate\Etoc@originalwrite}%
  2002. \addtocontents {toc}
  2003. {\protect\etoc@settocdepth\expandafter\protect
  2004. \csname Etoc@#1@@\endcsname}%
  2005. \endgroup
  2006. }%
  2007. }
  2008. \def\etocdepthtag #1#{\Etoc@depthtag }
  2009. \def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}}
  2010. \def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately }
  2011. \def\Etoc@depthtag@immediately #1{%
  2012. \begingroup
  2013. \let\Etoc@originalwrite\write
  2014. \def\write{\immediate\Etoc@originalwrite}%
  2015. \addtocontents {toc}{\protect\etoc@depthtag {#1}}%
  2016. \endgroup
  2017. }
  2018. \def\etocignoredepthtags {\let\etoc@depthtag \@gobble }
  2019. \def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ }
  2020. \def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}%
  2021. {}% ignore in silence if tag has no associated depth
  2022. {\afterassignment\Etoc@@nottoodeep
  2023. \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}%
  2024. }
  2025. \def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}%
  2026. {\PackageWarning{etoc}
  2027. {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}%
  2028. {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}%
  2029. }
  2030. \def\Etoc@tocvsec@err #1{\PackageError {etoc}
  2031. {The command \protect#1\space is incompatible with `etoc'}
  2032. {Use \protect\etocsettocdepth.toc as replacement}%
  2033. }%
  2034. \AtBeginDocument {%
  2035. \@ifclassloaded{memoir}
  2036. {\PackageInfo {etoc}
  2037. {Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak
  2038. \protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak
  2039. capabilities (see `etoc' manual). \space
  2040. Also, \protect\etocsettocdepth\MessageBreak
  2041. and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak
  2042. `memoir' command \protect\maxtocdepth\@gobble}%
  2043. }%
  2044. {\@ifpackageloaded {tocvsec2}{%
  2045. \def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }%
  2046. \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }%
  2047. \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }%
  2048. {\Etoc@tocvsec@err \resettocdepth }%
  2049. }%
  2050. \def\save@tocdepth #1#2#3{}%
  2051. \let\reset@tocdepth\relax
  2052. \let\remax@tocdepth\relax
  2053. \let\tableofcontents\etoctableofcontents
  2054. \PackageWarningNoLine {etoc}
  2055. {Package `tocvsec2' detected and its modification of\MessageBreak
  2056. \protect\tableofcontents\space reverted. \space Use
  2057. \protect\etocsettocdepth.toc\MessageBreak as a replacement
  2058. for `tocvsec2' toc-related commands}%
  2059. }% tocvsec2 loaded
  2060. {}% tocvsec2 not loaded
  2061. }%
  2062. }%
  2063. \def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }%
  2064. \def\invisiblelocaltableofcontents
  2065. {\etocsetnexttocdepth {-3}\localtableofcontents }%
  2066. \def\etocsetnexttocdepth #1{%
  2067. \@ifundefined{Etoc@#1@@}
  2068. {\PackageWarning{etoc}
  2069. {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}}
  2070. {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}%
  2071. }%
  2072. \def\Etoc@setnexttocdepth#1{%
  2073. \def\Etoc@tocdepthset{%
  2074. \Etoc@tocdepthreset
  2075. \edef\Etoc@tocdepthreset {%
  2076. \global\c@tocdepth\the\c@tocdepth\space
  2077. \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty
  2078. }%
  2079. \global\c@tocdepth#1%
  2080. \global\let\Etoc@tocdepthset\@empty
  2081. }%
  2082. }%
  2083. \let\Etoc@tocdepthreset\@empty
  2084. \let\Etoc@tocdepthset \@empty
  2085. \def\etocsetlocaltop #1#{\Etoc@set@localtop}%
  2086. \def\Etoc@set@localtop #1{%
  2087. \@ifundefined{Etoc@#1@@}%
  2088. {\PackageWarning{etoc}
  2089. {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}%
  2090. {\addtocontents {toc}
  2091. {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}%
  2092. }%
  2093. \def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}%
  2094. \def\Etoc@set@localtop@immediately #1{%
  2095. \@ifundefined{Etoc@#1@@}%
  2096. {\PackageWarning{etoc}
  2097. {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}%
  2098. {\begingroup
  2099. \let\Etoc@originalwrite\write
  2100. \def\write{\immediate\Etoc@originalwrite}%
  2101. \addtocontents {toc}
  2102. {\protect\etoc@setlocaltop\expandafter\protect
  2103. \csname Etoc@#1@@\endcsname}%
  2104. \endgroup
  2105. }%
  2106. }%
  2107. \def\etoc@setlocaltop #1{%
  2108. \ifnum#1=\Etoc@maxlevel
  2109. \Etoc@skipthisonetrue
  2110. \else
  2111. \Etoc@skipthisonefalse
  2112. \global\let\Etoc@level #1%
  2113. \global\let\Etoc@virtualtop #1%
  2114. \ifEtoc@localtoc
  2115. \ifEtoc@stoptoc
  2116. \Etoc@skipthisonetrue
  2117. \else
  2118. \ifEtoc@notactive
  2119. \Etoc@skipthisonetrue
  2120. \else
  2121. \unless\ifnum\Etoc@level>\etoclocaltop
  2122. \Etoc@skipthisonetrue
  2123. \global\Etoc@stoptoctrue
  2124. \fi
  2125. \fi
  2126. \fi
  2127. \fi
  2128. \fi
  2129. \let\Etoc@next\@empty
  2130. \ifEtoc@skipthisone
  2131. \else
  2132. \ifnum\Etoc@level>\c@tocdepth
  2133. \else
  2134. \ifEtoc@standardlines
  2135. \else
  2136. \let\Etoc@next\Etoc@setlocaltop@doendsandbegin
  2137. \fi
  2138. \fi
  2139. \fi
  2140. \Etoc@next
  2141. }%
  2142. \def\Etoc@setlocaltop@doendsandbegin{%
  2143. \Etoc@doendsandbegin
  2144. \global\Etoc@skipprefixfalse
  2145. }
  2146. \addtocontents {toc}{\protect\@ifundefined{etoctocstyle}%
  2147. {\let\protect\etoc@startlocaltoc\protect\@gobble
  2148. \let\protect\etoc@settocdepth\protect\@gobble
  2149. \let\protect\etoc@depthtag\protect\@gobble
  2150. \let\protect\etoc@setlocaltop\protect\@gobble}{}}%
  2151. \def\etocstandardlines {\Etoc@standardlinestrue}
  2152. \def\etoctoclines {\Etoc@standardlinesfalse}
  2153. \etocdefaultlines
  2154. \etocstandardlines
  2155. \def\etocstandarddisplaystyle{%
  2156. \PackageWarningNoLine{etoc}{%
  2157. \string\etocstandarddisplaystyle \on@line\MessageBreak
  2158. is deprecated. \space Please use \string\etocclasstocstyle}%
  2159. }
  2160. \expandafter\def\expandafter\etocclasstocstyle\expandafter{%
  2161. \etocclasstocstyle
  2162. \Etoc@classstyletrue
  2163. }
  2164. \def\etocetoclocaltocstyle{\Etoc@etocstyletrue}
  2165. \def\etocusertocstyle{\Etoc@etocstylefalse}
  2166. \etocclasstocstyle
  2167. \etocetoclocaltocstyle
  2168. \etocobeytoctocdepth
  2169. \etocobeydepthtags
  2170. \let\etocbeforetitlehook \@empty
  2171. \let\etocaftertitlehook \@empty
  2172. \let\etocaftercontentshook \@empty
  2173. \let\etocaftertochook \@empty
  2174. \def\etockeeporiginaltableofcontents
  2175. {\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}%
  2176. \endinput
  2177. %%
  2178. %% End of file `etoc.sty'.