You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
875 lines
25 KiB
875 lines
25 KiB
%
|
|
% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
|
|
%
|
|
% This file may be distributed and/or modified under the conditions of
|
|
% the MIT License. A version can be found at the end of this file.
|
|
%
|
|
% Repository: https://github.com/jbezos/titlesec
|
|
%
|
|
%
|
|
% Release
|
|
% ~~~~~~~
|
|
|
|
\ifx\ttl@coreps\@empty\else % START code for package
|
|
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{titleps}[2019/10/16 v2.13 Page styles]
|
|
|
|
% This package is mainly a wrapper for the pagestyle macros provided
|
|
% by titlesec, so that they can be used without it. Functionality is
|
|
% almost similar. First, some definitions from titlesec.
|
|
|
|
\expandafter\newif\csname ifttl@ps\endcsname
|
|
\expandafter\newif\csname ifttl@toclabel\endcsname
|
|
\ttl@toclabeltrue
|
|
|
|
\def\ttl@calcneg#1#2{%
|
|
{\setlength\@tempskipa{#2}%
|
|
#1{-\@tempskipa}}}
|
|
|
|
\expandafter\newif\csname ifttl@premark\endcsname
|
|
\ttl@premarkfalse
|
|
|
|
% 2019-02-25. Added the \lastskip stuff, because a mark 'forgets' the
|
|
% last skip.
|
|
|
|
\def\ttl@premark#1#2{%
|
|
\let\ttl@lastskip\relax
|
|
\ifvmode
|
|
\ifdim\lastskip=\z@\else
|
|
\edef\ttl@lastskip{\the\lastskip}%
|
|
\vskip-\ttl@lastskip\relax
|
|
\fi
|
|
\fi
|
|
\protected@xdef\ttl@prevmarks{\ttl@marks}%
|
|
\csname#1mark\endcsname{#2}%
|
|
\ifx\ttl@lastskip\relax\else
|
|
\vskip\ttl@lastskip\relax
|
|
\fi
|
|
\gdef\ttl@prevmarks{\ttl@marks}}
|
|
|
|
\let\ttl@savemark\@empty
|
|
|
|
% Patching sectioning commands
|
|
|
|
\newcommand\TitlepsPatchSection{%
|
|
\@ifstar{\ttl@setsec\@gobbletwo}%
|
|
{\ttl@setsec\pretitlemark}}
|
|
|
|
\def\ttl@setsec#1#2{%
|
|
\@ifundefined{#2}{}{%
|
|
\expandafter\let\csname ttl@s@#2\expandafter\endcsname
|
|
\csname#2\endcsname
|
|
\@namedef{#2}{%
|
|
\@ifstar{\ttl@presec@s{#2}}%
|
|
{\@dblarg{\ttl@presec@x#1{#2}}}}}}%
|
|
|
|
% premark/gobble, sect-name, opt, title
|
|
\def\ttl@presec@x#1#2[#3]#4{%
|
|
#1{#2}{#3}%
|
|
\@nameuse{ttl@s@#2}[#3]{#4}}
|
|
|
|
\def\ttl@presec@s#1#2{%
|
|
\gdef\ttl@savemark{\@nameuse{#1mark}{#2}}%
|
|
\@nameuse{ttl@s@#1}*{#2}}
|
|
|
|
\def\ttl@atbegin{%
|
|
\TitlepsPatchSection*{chapter}%
|
|
\TitlepsPatchSection{section}%
|
|
\TitlepsPatchSection{subsection}%
|
|
\TitlepsPatchSection{subsubsection}%
|
|
\TitlepsPatchSection{paragraph}%
|
|
\TitlepsPatchSection{subparagraph}}
|
|
|
|
\AtBeginDocument{\ttl@atbegin}
|
|
|
|
% Package options
|
|
|
|
\DeclareOption{psfloats}{\let\ttl@replace\@empty} % a flag
|
|
|
|
\DeclareOption{outermarks}{%
|
|
\def\ttl@titlemarks{\outertitlemarks}}
|
|
\DeclareOption{topmarks}{
|
|
\def\ttl@titlemarks{\toptitlemarks}}
|
|
\DeclareOption{botmarks}{%
|
|
\def\ttl@titlemarks{\bottitlemarks}}
|
|
\DeclareOption{innermarks}{%
|
|
\def\ttl@titlemarks{\innertitlemarks}}
|
|
\DeclareOption{extramarks}{\let\ttl@fetchmark\@empty}
|
|
\DeclareOption{nopatches}{\let\ttl@atbegin\relax}
|
|
|
|
\ExecuteOptions{innermarks}
|
|
|
|
\ProcessOptions
|
|
|
|
% Load the package body
|
|
|
|
\let\newpagestyle\@empty
|
|
\let\renewpagestyle\@empty
|
|
\let\widenhead\@empty
|
|
|
|
\fi % PAUSE code for package
|
|
|
|
% START core code
|
|
|
|
% 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 incompatibility between them and \LaTeX{} floats. To overcome
|
|
% both limitations, in the \textsf{titleps} 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 previously stored
|
|
% values in the mark before the title, and the current values in the
|
|
% mark after.
|
|
|
|
\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). As of 2019 and due to a change in the LaTex
|
|
% kernel, we consider two possibilities (2.13).
|
|
|
|
\expandafter\ifx\csname markboth \endcsname\relax
|
|
\def\ttl@mb@mark{\markboth}
|
|
\else
|
|
\edef\ttl@mb@mark{\expandafter\noexpand\csname markboth \endcsname}
|
|
\fi
|
|
|
|
\def\ttl@mb@warn{%
|
|
\PackageWarningNoLine{titleps}
|
|
{Direct use of \string\markboth\space and \string\markleft\space
|
|
can lead\MessageBreak
|
|
to unpredictable results. Please, read the manual\MessageBreak
|
|
for an explanation of this warning.}}
|
|
|
|
\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}}%
|
|
\ttl@mb@mark{}{\ttl@enccode}%
|
|
\expandafter\let\csname#1mark\endcsname\@gobble
|
|
\xdef\ttl@marks{\ttl@marks}%
|
|
\gdef\@themark{{\ttl@marks}{\ttl@prevmarks}}%
|
|
\ttl@c{\@themark\let\noexpand\ttl@mb@warn\relax}%
|
|
\@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{titleps}%
|
|
{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}
|
|
|
|
% Another tool:
|
|
% As of 2019 and due to a change in the LaTex kernel, we consider two
|
|
% possibilities (2.13).
|
|
|
|
\expandafter\ifx\csname markboth \endcsname\relax
|
|
|
|
\newcommand\setmarkboth{%
|
|
\ifx\markboth\ttl@mb@use\else
|
|
\let\ttl@mb@mark\markboth
|
|
\let\markboth\ttl@mb@use
|
|
\fi
|
|
\def\ttl@mb@new##1##2}
|
|
|
|
% \ttl@mb@temp is a trick to allow resetting inside \setmarkboth.
|
|
|
|
\def\ttl@mb@use#1#2{%
|
|
\let\markboth\ttl@mb@mark
|
|
\def\ttl@mb@temp{\let\markboth\ttl@mb@use}%
|
|
\ttl@mb@new{#1}{#2}%
|
|
\ttl@mb@temp
|
|
\let\ttl@mb@temp\@undefined}
|
|
|
|
\newcommand\resetmarkboth{%
|
|
\ifx\ttl@mb@temp\@undefined
|
|
\let\markboth\ttl@mb@mark
|
|
\def\ttl@mb@mark{\markboth}%
|
|
\else
|
|
\def\ttl@mb@temp{%
|
|
\let\markboth\ttl@mb@mark
|
|
\def\ttl@mb@mark{\markboth}}%
|
|
\fi}
|
|
|
|
\else
|
|
|
|
\newcommand\setmarkboth{%
|
|
\expandafter\ifx\csname markboth \endcsname\ttl@mb@use\else
|
|
\expandafter\let\expandafter\ttl@mb@mark\csname markboth \endcsname
|
|
\expandafter\let\csname markboth \endcsname\ttl@mb@use
|
|
\fi
|
|
\def\ttl@mb@new##1##2}
|
|
|
|
\def\ttl@mb@use#1#2{%
|
|
\expandafter\let\csname markboth \endcsname\ttl@mb@mark
|
|
\def\ttl@mb@temp{\expandafter\let\csname markboth \endcsname\ttl@mb@use}%
|
|
\ttl@mb@new{#1}{#2}%
|
|
\ttl@mb@temp
|
|
\let\ttl@mb@temp\@undefined}
|
|
|
|
\newcommand\resetmarkboth{%
|
|
\ifx\ttl@mb@temp\@undefined
|
|
\expandafter\let\csname markboth \endcsname\ttl@mb@mark
|
|
\edef\ttl@mb@mark{\expandafter\noexpand\csname markboth \endcsname}%
|
|
\else
|
|
\def\ttl@mb@temp{%
|
|
\expandafter\let\csname markboth \endcsname\ttl@mb@mark
|
|
\edef\ttl@mb@mark{\expandafter\noexpand\csname markboth \endcsname}}%
|
|
\fi}
|
|
|
|
\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.
|
|
|
|
\ifx\ttl@replace\@undefined\else
|
|
|
|
% 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}
|
|
|
|
\fi
|
|
|
|
% END core code
|
|
|
|
\ifx\ttl@coreps\@empty\else % CONTINUE code for package
|
|
|
|
% Raise error if the following are used without titlesec
|
|
|
|
\DeclareRobustCommand\ttl@naerror[1]{%
|
|
\PackageError{titleps}%
|
|
{#1\space only available in titlesec.\MessageBreak
|
|
Consider using it instead of titleps}%
|
|
{titleps provides a subset of the macros\MessageBreak
|
|
for pagestyles defined in titlesec.}}
|
|
|
|
\def\ttl@setifthe#1{%
|
|
\expandafter\protected@edef\csname ifthe#1\endcsname{%
|
|
\ttl@naerror{\string\ifthe#1}}}
|
|
|
|
\ttl@setifthe{part}
|
|
\ttl@setifthe{chapter}
|
|
\ttl@setifthe{section}
|
|
\ttl@setifthe{subsection}
|
|
\ttl@setifthe{subsubsection}
|
|
\ttl@setifthe{paragraph}
|
|
\ttl@setifthe{subparagraph}
|
|
|
|
\fi
|
|
|
|
\endinput
|
|
|
|
MIT License
|
|
-----------
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
copy of this software and associated documentation files (the
|
|
"Software"), to deal in the Software without restriction, including
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included
|
|
in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|