% +--------------------------------------------------+ % | Typeset titlesec.tex to get the documentation. | % +--------------------------------------------------+ % % Copyright (c) 1998-2011 by Javier Bezos. % All Rights Reserved. % % This file is part of the titlesec distribution release 2.10.0 % ----------------------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % 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 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % The Current Maintainer of this work is Javier Bezos. % History of v1.0 (actually not 1.0) % ~~~~~~~~~~~~~~~ % 99/11/03: Split from titlesec.sty % 99/11/03: Changed \setmarks, \ttl@sethead, \ttl@setfoot to follow % the new scheme % 99/11/03: Removed the redefinition of \markboth. The arguments are % expanded on the fly by the corresponding \...mark. % 00/01/06: Added the \newtitlemark device. % 00/01/19: Rejected the idea of a separate package (for the time % being). Now it's ttlps.def. % 00/01/20: Starred versions of \widenhead, \sethead, \setfoot. % 00/01/23: Added \ifthe..., \iftitle, etc. % 00/02/05: Modified \ifthe... mechanism % 00/02/25: Fixed a bug which made enter in an endless loop. % Now \ttl@marks is just \relax. The new scheme made % compatible with babel. (2.3.1) % 00/03/01: Fixed a bug in the previous bug fix. (2.3.2) % 00/03/08: Removed the code for AMS and babel. A general procedure % to catch the changes of \markboth is introduced, with % \ttl@enccode and \ttl@running. (2.3.3) % 00/05/05: \setmarks may be used outside of \newpagestyle, with % the help of \ttl@setmarks and \ttl@marksset (2.3.4) % 00/05/25: Tests for \ttl@toclabel moved to the redefinition of % \secdef in titlesec. (2.3.5) % 00/06/07: Added the first attempt for pagestyles with floats. % With slight changes, it will become the final form % for that. (2.3.5) % 00/06/14: The default \ifthe... are now defined with \ttl@setifthe % so that they are robust from the very beginning. (2.3.5) % 01/01/21: Replaced some \defs by \newcommand % 10/12/03: A little addition to the warning, for those who don't % read the docs. % % History of v1.1 % ~~~~~~~~~~~~~~~ % 11/11/26: Add the extra mark mechanim % 11/12/07: Enlarged, eg, multilevel \newtitlemark, \newtitlemark*, % premarks % % As before, all marks has two parts but now they don't refer to left or % right pages at all. There are some issues related to top marks which % are explained by Knuth in \textit{The \TeX book}, pp. 259f, as well % as an uncompatibility between them and \LaTeX{} floats. To overcome % both limitations, in the \textsf{titlesec} page styles, the second % part in |\cs{firstmark}| is a \emph{fixed} top mark and the first one % the actual first mark; the right way to get the bot mark is from the % second part. Marks are stored at each section and used before and % after the title (straight class); the first part contains the values % of current title, but the second one contains the previolusly stored % values in the mark before the title, and the current values in the % mark after. \ProvidesFile{ttlps.def}[2011/12/15] % % Page Styles % ~~~~~~~~~~~ \ifx\ttl@compatps\@undefined\else \PackageWarningNoLine{titlesec} {You are using an old interface for page styles\MessageBreak (or you forgot the package option 'pagestyles').\MessageBreak You could proceed but don't complain if you run\MessageBreak into errors} \fi \ttl@pstrue \let\parttitle\@empty \let\chaptertitle\@empty \let\sectiontitle\@empty \let\subsectiontitle\@empty \let\subsubsectiontitle\@empty \let\paragraphtitle\@empty \let\subparagraphtitle\@empty \newcommand\iftitle[1]{% \expandafter\ifx\csname #1title\endcsname\@empty \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi} % \newtitlemarks belongs to a nameless markset (ie, \@empty). % For named extra marksets see below. \newcommand\newtitlemark{% \@ifstar{\@tempswafalse\ttl@newmk@i\@empty}% {\@tempswatrue\ttl@newmk@i\@empty}} \def\ttl@newmk@i#1#2{% markset, macro/var \edef\ttl@a{\expandafter\@gobble\string#2}% \expandafter\ifx\csname\ttl@a\endcsname#2\else \edef\ttl@a{c@#2}% \fi \expandafter\ttl@newmk@ii\expandafter{\ttl@a}{#1}} \def\ttl@newmk@ii#1#2{% macro/var, markset \expandafter\let\expandafter\ttl@a\csname ttl@mks@#2\endcsname \if@tempswa \expandafter\def\expandafter\ttl@a\expandafter{% \ttl@a \protect\@namedef{#1}{\@nameuse{#1}}}% \else \expandafter\def\expandafter\ttl@a\expandafter{% \ttl@a \protect\@nameuse{#1}=\the\@nameuse{#1}\relax}% \fi \expandafter\let\csname ttl@mks@#2\endcsname\ttl@a} \let\ttl@mks@\@empty \def\ttl@moremarks{\ttl@mks@} % backward compat \def\ttl@prevmarks{\ttl@marks} \let\ttl@marks\relax % The following command sets the ifthe... commands to % be used in heads. When the call is from inside a sectioning % command, toclabel is either true (in most of cases) or false % (a chapter in the front matter, for example). Otherwise (an % explicit \...mark) is false \def\ttl@setifthe#1{% \expandafter\protected@edef\csname ifthe#1\endcsname{% \ifttl@toclabel \protect\@firstoftwo \else \protect\@secondoftwo \fi}} % At this point \ttl@toclabel is always false \ttl@setifthe{part} \ttl@setifthe{chapter} \ttl@setifthe{section} \ttl@setifthe{subsection} \ttl@setifthe{subsubsection} \ttl@setifthe{paragraph} \ttl@setifthe{subparagraph} % Putting marks % ------------- \newtitlemark{\ttl@running} \let\ttl@enccode\relax \def\ttl@running{\ttl@enccode} % \ttl@markboth redefines temporarily \mark to fetch changes made by % babel or ams, saved in \ttl@running. When this is done, the actual % \mark es emitted, which has \ttl@running as part of the markset (see % the \newtitlemark above). \def\ttl@markboth#1{% \begingroup \let\protect\@unexpandable@protect \let\@mkboth\@gobbletwo \let\ttl@enccode\relax \let\label\relax \let\index\relax \let\glossary\relax \let\ttl@c\mark \def\mark##1{\xdef\ttl@running{\expandafter\@gobble##1}}% \markboth{}{\ttl@enccode}% \expandafter\let\csname#1mark\endcsname\@gobble \xdef\ttl@marks{\ttl@marks}% \gdef\@themark{{\ttl@marks}{\ttl@prevmarks}}% \ttl@c{\@themark}% \@nameuse{ttl@tem@#1}% \if@nobreak\ifvmode\nobreak\fi\fi \endgroup} \newcommand\settitlemarks{\@ifstar\ttl@svmarks@s\ttl@svmarks@x} \def\ttl@svmarks@x#1{\def\ttl@marksset{{#1}}} \def\ttl@svmarks@s#1{\def\ttl@marksset{*{#1}}} \newcommand\setmarks[2]{\settitlemarks{#1,#2}} % back compat \def\ttl@settopmark#1\@@{% \expandafter\def\csname#1mark\endcsname##1{% \expandafter\gdef\csname#1title\endcsname{##1}% \ttl@setifthe{#1}% \expandafter\let\expandafter\ttl@marks\csname ttl@tm@#1\endcsname \ttl@markboth{#1}}% \global\@namedef{ttl@tm@#1}{% \protect\@namedef{#1title}{\@nameuse{#1title}}% \protect\@namedef{the#1}{\@nameuse{the#1}}% \protect\@namedef{ifthe#1}{\@nameuse{ifthe#1}}}% \def\ttl@elt##1{% \expandafter\ttl@setsubmark\ttl@a\@@{##1}}% \ttl@c}% \def\ttl@setsubmark#1\@@#2{% \expandafter\g@addto@macro\csname ttl@tm@#2\endcsname{% \protect\@namedef{#1title}{}% \protect\@namedef{the#1}{}% \protect\@namedef{ifthe#1}{\protect\@secondoftwo}} \expandafter\g@addto@macro\csname ttl@tm@#1\endcsname{% \protect\@namedef{#2title}{\@nameuse{#2title}}% \protect\@namedef{the#2}{\@nameuse{the#2}}% \protect\@namedef{ifthe#2}{\@nameuse{ifthe#2}}}}% \def\ttl@setmarks@x#1{% \let\ttl@c\@empty % sub list \@for\ttl@a:=#1\do{% \expandafter\ttl@settopmark\ttl@a\@@ \let\ttl@elt\relax \xdef\ttl@c{\ttl@c\ttl@elt{\ttl@a}}}% \@for\ttl@a:=#1\do{% \expandafter\g@addto@macro\csname ttl@tm@\ttl@a\endcsname{% \ttl@moremarks}}} \def\ttl@setmarks@s#1{% Solo con extramarks \PackageError{titlesec}% {You need `extramarks' for \string\settitlemarks*}% {\string\settitlemarks* requires the package option `extramarks'}} \newcommand\pretitlemark{% \global\ttl@premarktrue \@ifstar{\ttl@pretitlemark\z@}% {\ttl@pretitlemark\@ne}} \def\ttl@pretitlemark#1#2#3{% \addtocounter{#2}#1% \ttl@premark{#2}{#3}% \addtocounter{#2}{-#1}} % Rules % ----- \newcommand\headrule{\setheadrule{.4\p@}} \newcommand\footrule{\setfootrule{.4\p@}} \newcommand\setheadrule[1]{% \ifdim#1=\z@ \let\makeheadrule\@empty \else \def\makeheadrule{\rule[-.3\baselineskip]{\linewidth}{#1}}% \fi} \newcommand\setfootrule[1]{% \ifdim#1=\z@ \let\makefootrule\@empty \else \def\makefootrule{\rule[.7\baselineskip]{\linewidth}{#1}}% \fi} \renewcommand\newpagestyle[1]{% \begingroup \catcode`\^^M=9 \@ifnextchar[% {\ttl@pagestyle\newcommand{#1}}% {\ttl@pagestyle\newcommand{#1}[]}} \renewcommand\renewpagestyle[1]{% \begingroup \catcode`\^^M=9 \@ifnextchar[% {\ttl@pagestyle\renewcommand{#1}}% {\ttl@pagestyle\renewcommand{#1}[]}} \def\ttl@pagestyle#1#2[#3]#4{% \endgroup \expandafter#1\csname ps@#2\endcsname{% \ttl@defaultps \def\ttl@headfmt{#3}% #4% \def\settitlemarks{\@ifstar\ttl@svmarks@s\ttl@svmarks@x}}} \def\ttl@userunning#1#2{\csname ttlr@#1#2\endcsname} \def\ttl@defaultps{% \let\makeheadrule\@empty \let\makefootrule\@empty \def\@mkboth{\ttl@savemark\@gobbletwo}% \def\@oddfoot{\ttl@userunning of}% \def\@evenfoot{\ttl@userunning ef}% \def\@oddhead{\ttl@userunning oh}% \def\@evenhead{\ttl@userunning eh}% \def\ttlr@of{\ttl@makefoot\@empty\@@\ttl@hiol\ttl@hior}% \def\ttlr@ef{\ttl@makefoot\@empty\@@\ttl@hiel\ttl@hier}% \def\ttlr@oh{\ttl@makehead\@empty\@@\ttl@hiol\ttl@hior}% \def\ttlr@eh{\ttl@makehead\@empty\@@\ttl@hiel\ttl@hier}% \let\ttlr@of@b\relax \let\ttlr@of@p\relax \let\ttlr@ef@b\relax \let\ttlr@ef@p\relax \let\ttlr@oh@t\relax \let\ttlr@oh@p\relax \let\ttlr@eh@t\relax \let\ttlr@eh@p\relax \def\settitlemarks{\@ifstar\ttl@setmarks@s\ttl@setmarks@x}% \expandafter\settitlemarks\ttl@marksset} \@ifundefined{chapter}% {\settitlemarks{section,subsection}}% {\settitlemarks{chapter,section}} \newcommand\usepage{\protect\thepage} % back compat \newcommand\toptitlemarks{\expandafter\@secondoftwo\firstmark{}{}{}} \def\firsttitlemarks{% \toks@\expandafter\expandafter\expandafter{% \expandafter\@secondoftwo \firstmark{}{}{}}% \@temptokena\expandafter\expandafter\expandafter{% \expandafter\@secondoftwo \botmark{}{}{}}% \edef\ttl@a{\the\toks@}% \edef\ttl@b{\the\@temptokena}% \ifx\ttl@a\ttl@b \expandafter\@secondoftwo\firstmark{}{}{}% \else \expandafter\@firstoftwo \firstmark{}{}{}% \fi} \newcommand\bottitlemarks{\expandafter\@secondoftwo\botmark{}{}{}} \newcommand\nexttoptitlemarks{\expandafter\@firstoftwo\botmark{}{}{}} \newcommand\outertitlemarks{% \if@twoside \ifodd\c@page\relax \bottitlemarks \else \toptitlemarks \fi \else \toptitlemarks \fi} \newcommand\innertitlemarks{% \if@twoside \ifodd\c@page\relax \firsttitlemarks \else \bottitlemarks \fi \else \bottitlemarks \fi} \def\ttl@duplthreeargs#1#2#3#4{#1[#2][#3][#4]{#2}{#3}{#4}} \def\ttl@dupltwoargs#1#2#3{#1[#2][#3]{#2}{#3}} \def\ttl@duplthreeargsrev#1#2#3#4{#1[#4][#3][#2]{#2}{#3}{#4}} \def\ttl@dupltwoargsrev#1#2#3{#1[#3][#2]{#2}{#3}} \def\ttl@setany#1{% \@ifstar{\ttl@duplthreeargsrev#1}% {\@ifnextchar[{#1}{\ttl@duplthreeargs#1}}} \newcommand\setfoot{\ttl@setany\ttl@setfoot} \newcommand\sethead{\ttl@setany\ttl@sethead} \def\ttl@setfoot[#1][#2][#3]#4#5#6{% \def\ttlr@ef{\ttl@makefoot{#1}{#2}{#3}\@@\ttl@hiel\ttl@hier}% \def\ttlr@of{\ttl@makefoot{#4}{#5}{#6}\@@\ttl@hiol\ttl@hior}} \def\ttl@sethead[#1][#2][#3]#4#5#6{% \def\ttlr@eh{\ttl@makehead{#1}{#2}{#3}\@@\ttl@hiel\ttl@hier}% \def\ttlr@oh{\ttl@makehead{#4}{#5}{#6}\@@\ttl@hiol\ttl@hior}} \def\ttl@headinline#1#2#3{% \ttl@headfmt \def\ttl@a{#1#3}\def\ttl@b{#2}% \ifx\ttl@a\@empty \hfil{#2}\hfil \else\ifx\ttl@b\@empty {#1}\hfil{#3}% \else \sbox\z@ {#1}% \sbox\tw@{#3}% \copy\z@ \ifdim\wd\z@<\wd\tw@ \kern-\wd\z@\kern\wd\tw@ \fi \hfil{#2}\hfil \ifdim\wd\z@>\wd\tw@ \kern-\wd\tw@\kern\wd\z@ \fi \box\tw@ \fi\fi} \def\ttl@makeboth#1#2#3#4{% \ttl@calcneg\hspace{#3}% \normalsize \linewidth\textwidth \addtolength\linewidth{#3}% \addtolength\linewidth{#4}% \ifx#2\@empty\else \setbox\z@\hb@xt@\linewidth{% \color@begingroup #2% \color@endgroup}% \wd\z@\z@ \ht\z@\z@ \dp\z@\z@ \box\z@ \fi \ttl@titlemarks % Must precede the format. Defines \ttl@running \def\ttl@enccode{\ttl@headinline#1{}{}{}}% which contains ttl@enccode \ttl@running \ttl@calcneg\hspace{#4}}% \def\ttl@makehead#1\@@{\ttl@makeboth{#1}\makeheadrule} \def\ttl@makefoot#1\@@{\ttl@makeboth{#1}\makefootrule} \renewcommand\widenhead{% \@ifstar{\ttl@dupltwoargsrev\ttl@widenhd}% {\@ifnextchar[{\ttl@widenhd}{\ttl@dupltwoargs\ttl@widenhd}}} \def\ttl@widenhd[#1][#2]#3#4{% \def\ttl@hiel{#1}\def\ttl@hier{#2}% \def\ttl@hiol{#3}\def\ttl@hior{#4}} \let\setheadindent\widenhead \def\ttl@hiel{\z@}\def\ttl@hier{\z@} \def\ttl@hiol{\z@}\def\ttl@hior{\z@} % A tool: \def\ifsamemark#1#2{% {#1\global\let\ttl@c#2}% \ifx\ttl@c#2% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} % =========== % EXTRA MARKS % =========== \ifx\ttl@fetchmark\@empty \ifx\newmarks\@undefined \PackageInfo{titleps}{% You have requested `extramarks' but etex or similar\MessageBreak has not been loaded. I'll do it for you.} \RequirePackage{etex} \fi \def\ttl@setmarks@s#1{% \@for\ttl@a:=#1\do{% \@ifundefined{ttl@mkc@\ttl@a}{% \expandafter\newmarks\csname ttl@mkc@\ttl@a\endcsname}{}% \expandafter\xdef\csname ttl@tem@\ttl@a\endcsname{% \marks\expandafter\noexpand\csname ttl@mkc@\ttl@a\endcsname {\noexpand\@themark}}}% \ttl@setmarks@x{#1}}% \newcommand\newmarkset[1]{% \expandafter\newmarks\csname ttl@mkc@#1\endcsname \@namedef{ttl@mks@#1}{}% \@namedef{ttl@premks@#1}{\@nameuse{ttl@mks@#1}}} \newcommand\newextramark{% \@ifstar{\@tempswafalse\ttl@newmk@i}% {\@tempswatrue\ttl@newmk@i}} \def\ttl@extramark#1{% \begingroup \let\protect\@unexpandable@protect \let\@mkboth\@gobbletwo \let\label\relax \let\index\relax \let\glossary\relax\endgroup} \newcommand\extramark[1]{% \begingroup \let\protect\@unexpandable@protect \let\@mkboth\@gobbletwo \let\label\relax \let\index\relax \let\glossary\relax \marks\csname ttl@mkc@#1\endcsname{% {\@nameuse{ttl@mks@#1}}% {\@nameuse{ttl@mks@#1}}}% \expandafter\xdef\csname ttl@premks@#1\endcsname {\@nameuse{ttl@mks@#1}}% \endgroup \if@nobreak\ifvmode\nobreak\fi\fi}% \newcommand\preextramark[1]{% \begingroup \let\protect\@unexpandable@protect \let\@mkboth\@gobbletwo \let\label\relax \let\index\relax \let\glossary\relax \marks\csname ttl@mkc@#1\endcsname{% {\csname ttl@mks@#1\endcsname}% {\csname ttl@premks@#1\endcsname}}% \endgroup \if@nobreak\ifvmode\nobreak\fi\fi} \newcommand\newshortmark[1]{% \newmarkset{\string#1}% \newextramark{\string#1}#1} \newcommand\shortmark[1]{\extramark{\string#1}} \newcommand\preshortmark[1]{\preextramark{\string#1}} \newcommand\topshortmark[1]{{\topextramarks{\string#1}#1}} \newcommand\firstshortmark[1]{{\firstextramarks{\string#1}#1}} \newcommand\botshortmark[1]{{\botextramarks{\string#1}#1}} \newcommand\nexttopshortmark[1]{{\nexttopextramarks{\string#1}#1}} \def\ttl@fetchmark#1#2#3{% \expandafter#1#2\csname ttl@mkc@#3\endcsname{}{}{}} \newcommand\topextramarks[1]{\ttl@fetchmark\@secondoftwo\firstmarks{#1}} \newcommand\firstextramarks[1]{% \toks@\expandafter\expandafter\expandafter{% \ttl@fetchmark\@secondoftwo\firstmarks{#1}}% \@temptokena\expandafter\expandafter\expandafter{% \ttl@fetchmark\@secondoftwo\botmarks{#1}}% \edef\ttl@a{\the\toks@}% \edef\ttl@b{\the\@temptokena}% \ifx\ttl@a\ttl@b \ttl@fetchmark\@secondoftwo\firstmarks{#1}% \else \ttl@fetchmark\@firstoftwo\firstmarks{#1}% \fi} \newcommand\botextramarks[1]{\ttl@fetchmark\@secondoftwo\botmarks{#1}} \newcommand\nexttopextramarks[1]{\ttl@fetchmark\@firstoftwo\botmarks{#1}} \newcommand\outerextramarks[1]{% \if@twoside \ifodd\c@page\relax \botextramarks{#1}% \else \topextramarks{#1}% \fi \else \topextramarks{#1}% \fi} \newcommand\innerextramarks[1]{% \if@twoside \ifodd\c@page\relax \firstextramarks{#1}% \else \botextramarks{#1}% \fi \else \botextramarks{#1}% \fi} \fi % ====== % FLOATS % ====== % % Pagestyles with floats. There macros are defined only with the % psfloats package option. \@ifundefined{ttl@replace}{\endinput}{} % User interface \newcommand\setfloatfoot{% \let\ttl@c\@empty % <- current float, empty if general \ttl@setany\ttl@setftfoot} \newcommand\setfloathead{% \let\ttl@c\@empty % <- current float, empty if general \ttl@setany\ttl@setfthead} \def\ttl@setftfoot[#1][#2][#3]#4#5#6#7{% \@ifnextchar[{\ttl@setftfoot@i{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% {\ttl@setftfoot@i{#1}{#2}{#3}{#4}{#5}{#6}{#7}[bp]}} \def\ttl@setfthead[#1][#2][#3]#4#5#6#7{% \@ifnextchar[{\ttl@setfthead@i{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% {\ttl@setfthead@i{#1}{#2}{#3}{#4}{#5}{#6}{#7}[tp]}} \def\ttl@setftfoot@i#1#2#3#4#5#6#7[#8]{% \@tfor\ttl@b:=#8\do{% \@namedef{ttlr@ef@\ttl@b\ttl@c}% {#7\ttl@makefoot{#1}{#2}{#3}\@@\ttl@hiel\ttl@hier}% \@namedef{ttlr@of@\ttl@b\ttl@c}% {#7\ttl@makefoot{#4}{#5}{#6}\@@\ttl@hiol\ttl@hior}}} \def\ttl@setfthead@i#1#2#3#4#5#6#7[#8]{% \@tfor\ttl@b:=#8\do{% \@namedef{ttlr@eh@\ttl@b\ttl@c}% {#7\ttl@makehead{#1}{#2}{#3}\@@\ttl@hiel\ttl@hier}% \@namedef{ttlr@oh@\ttl@b\ttl@c}% {#7\ttl@makehead{#4}{#5}{#6}\@@\ttl@hiol\ttl@hior}}} \newcommand\nextfloathead{% \ttl@nextfree % returns ttl@c with the next float \ttl@setany\ttl@setfthead} \newcommand\nextfloatfoot{% \ttl@nextfree % returns ttl@c with the next float \ttl@setany\ttl@setftfoot} % Compat mode with floatps \ifx\ttl@replace\space \let\ttl@setnewfoot\ttl@setftfoot \let\ttl@setnewhead\ttl@setfthead \def\ttl@setftfoot[#1][#2][#3]#4#5#6{% \ttl@setnewfoot[#1][#2][#3]{#4}{#5}{#6}{}} \def\ttl@setfthead[#1][#2][#3]#4#5#6{% \ttl@setnewhead[#1][#2][#3]{#4}{#5}{#6}{}} \fi % The simple default value of \ttl@userunning is % replaced by one more elaborated \def\ttl@userunning#1#2{% \if@fcolmade % From a post by D. Arseneau to comp.text.tex \def\@elt##1{\edef\ttl@pageft{\string##1}}% \@flsucceed \let\@elt\relax \if#2h% \ttl@replace #1hp\ttl@pageft \else \ttl@replace #1fp\ttl@pageft \ttl@killftps\ttl@pageft \fi \else\if#2h% \ifx\ttl@topft\@empty\else \ttl@replace #1ht\ttl@topft \fi \else \ifx\ttl@botft\@empty\else \ttl@replace #1fb\ttl@botft \fi \fi\fi \csname ttlr@#1#2\endcsname} % [Don't move above as \ttl@replace is used as a flag.] \def\ttl@replace#1#2#3#4{% \@ifundefined{ttlr@#1#2@#3#4}% {\@ifundefined{ttlr@#1#2@#3}{}% {\@namedef{ttlr@#1#2}{\@nameuse{ttlr@#1#2@#3}}}}% {\csname ttlr@xx@x#4\endcsname\@gobble {\expandafter\let\csname ttlr@#1#2\expandafter\endcsname \csname ttlr@#1#2@#3#4\endcsname}}} \def\ttl@nextfree{% \def\@elt##1{% \edef\ttl@c{\string##1}% \let\@elt\@gobble}% \@freelist \let\@elt\relax \@ifundefined{ttlr@xx@x\ttl@c}% {\expandafter\let\csname ttlr@xx@x\ttl@c\endcsname\@secondoftwo \@tfor\ttl@a:={eh@t}{oh@t}{ef@b}{of@b}{eh@p}{oh@p}{ef@p}{of@p}\do{% \expandafter\global\expandafter \let\csname ttlr@\ttl@a\ttl@c\endcsname\relax}}{}} \def\ttl@killftps#1{% \expandafter\global\expandafter \let\csname ttlr@xx@x#1\endcsname\relax} \let\ttl@topft\@empty \let\ttl@botft\@empty \let\ttl@pageft\@empty \def\ttl@combinefloats{% \ifx\@toplist\@empty\else \def\@elt##1{% \edef\ttl@topft{\string##1}% \def\@elt####1{\ttl@killftps{\string####1}}}% \@toplist \fi \ifx\@botlist\@empty\else \def\@elt##1{% \def\@elt####1{% \def\@elt####1{\ttl@killftps\ttl@botft}% \edef\ttl@botft{\string####1}}% \edef\ttl@botft{\string##1}}% \@botlist \fi \let\@elt\relax \ttl@combinefloats@x} \AtBeginDocument{% \let\ttl@combinefloats@x\@combinefloats \let\@combinefloats\ttl@combinefloats} \endinput