diff options
author | Karl Berry <karl@freefriends.org> | 2013-12-26 23:18:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-12-26 23:18:36 +0000 |
commit | 9b219d1b664067729034647a4b37626cf2bf5e26 (patch) | |
tree | 00708467b44f90736dc32ed1bebb95e9c4710139 /Master/texmf-dist/source/latex/koma-script/scrlayer-scrpage.dtx | |
parent | c00c8298eb6913b74270a36c1f1018f1e9946f7b (diff) |
koma-script (26dec13)
git-svn-id: svn://tug.org/texlive/trunk@32489 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrlayer-scrpage.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrlayer-scrpage.dtx | 2915 |
1 files changed, 2915 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrlayer-scrpage.dtx b/Master/texmf-dist/source/latex/koma-script/scrlayer-scrpage.dtx new file mode 100644 index 00000000000..6639164e997 --- /dev/null +++ b/Master/texmf-dist/source/latex/koma-script/scrlayer-scrpage.dtx @@ -0,0 +1,2915 @@ +% \CheckSum{2321} +% \iffalse^^A meta-comment +% ====================================================================== +% scrlayer-scrpage.dtx +% Copyright (c) Markus Kohm, 2012-2013 +% +% This file is part of the LaTeX2e KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien. +% ---------------------------------------------------------------------- +% scrlayer-scrpage.dtx +% Copyright (c) Markus Kohm, 2012-2013 +% +% Diese Datei ist Teil der LaTeX2e KOMA-Script-Sammlung. +% +% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz, +% Version 1.3c. +% Die neuste Version dieser Lizenz ist +% http://www.latex-project.org/lppl.txt +% und Version 1.3c ist Teil aller Verteilungen von LaTeX +% Version 2005/12/01 und dieses Werks. +% +% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained" +% (allein durch den Autor verwaltet). +% +% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm. +% +% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien. +% ====================================================================== +% \fi^^A meta-comment +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \iffalse^^A meta-comment +%<identify>%%% From File: $Id: scrlayer-scrpage.dtx 1548 2013-12-14 17:36:23Z mjk $ (identify) +%<init>%%% From File: $Id: scrlayer-scrpage.dtx 1548 2013-12-14 17:36:23Z mjk $ (init) +%<options>%%% From File: $Id: scrlayer-scrpage.dtx 1548 2013-12-14 17:36:23Z mjk $ (options) +%<body>%%% From File: $Id: scrlayer-scrpage.dtx 1548 2013-12-14 17:36:23Z mjk $ (body) +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\begingroup + \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#4/#3/#2}} + \filedate$Date: 2013-12-14 18:36:23 +0100 (Sa, 14 Dez 2013) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{v0.9.#2}} + \filerevision$Revision: 1548 $ +\endgroup +\ProvidesFile{scrlayer-scrpage.dtx}[\filedate\space\filerevision\space +%</dtx> +%<*identify> +%<interface>\NeedsTeXFormat{LaTeX2e}[1995/12/01] +%<interface>\ProvidesPackage{scrlayer-scrpage}[% +% Some time following will be replaced by !KOMASCRIPTVERSION: +%!SCRLAYERVERSION +%<interface> package +%</identify> +%<*dtx|identify> + (end user interface for scrlayer)] +%</dtx|identify> +%<*dtx> +\ifx\documentclass\undefined + \input scrdocstrip.tex + \@@input scrkernel-version.dtx + \@@input scrstrip.inc + \KOMAdefVariable{COPYRIGHTFROM}{2012} + \KOMAdefVariable{SCRLAYERVERSION}{\space\space\filedate\space\filerevision}% + \generate{\usepreamble\defaultpreamble + \file{scrlayer-scrpage.sty}{% + \from{scrlayer-scrpage.dtx}{interface,trace,scrpage,identify}% + \from{scrlayer.dtx}{interface,trace,scrpage,init}% + \from{scrlayer-scrpage.dtx}{interface,trace,scrpage,init}% + \from{scrlayer.dtx}{interface,trace,scrpage,options}% + \from{scrlayer-scrpage.dtx}{interface,trace,scrpage,options}% + \from{scrlayer.dtx}{interface,trace,scrpage,body}% + \from{scrlayer-scrpage.dtx}{interface,trace,scrpage,body}% + \from{scrlogo.dtx}{logo}% + }% + } + \@@input scrstrop.inc +\else + \let\endbatchfile\relax +\fi +\endbatchfile +%</dtx> +%<*driver> + \documentclass{scrdoc} + \addtolength{\textwidth}{-1em} + \addtolength{\marginparwidth}{2em} + \addtolength{\oddsidemargin}{2em} + \usepackage[ngerman,english]{babel} + \usepackage{url,babelbib}\bibliographystyle{babalpha-fl} + \usepackage{listings} + \usepackage{scrhack} + \usepackage{etoolbox} + \pretocmd\DescribeMacro{\ifhmode\else\bigskip\noindent\fi}{}{} + \pretocmd\DescribeEnv{\ifhmode\else\bigskip\noindent\fi}{}{} + \pretocmd\DescribeOption{\ifhmode\else\bigskip\noindent\fi}{}{} + + \CodelineIndex + \RecordChanges + \GetFileInfo{scrlayer-scrpage.dtx} + \title{The \texttt{scrlayer} interface \texttt{scrlayer-scrpage}% + \footnote{This is version \fileversion\ of file \texttt{\filename}.}} + \date{\filedate} + \author{Markus Kohm} + + \newenvironment{Explain}{\par}{\par} + \newcommand*{\length}{} + \let\length\Length + \let\endlength\endLength + \let\Macro\cs + \let\Length\Macro + \let\Package\textsf + \let\Class\Package + \let\File\texttt + \let\Option\texttt + \newcommand*{\KOption}[1]{\Option{#1}\texttt{=}} + \newcommand*{\OptionValue}[2]{\Option{#1}\texttt{=}\PValue{#2}} + \let\Counter\texttt + \let\Environment\texttt + \let\ShowOutput\quote + \let\endShowOutput\endquote + \let\Pagestyle\texttt + \newcommand*{\Parameter}[1]{\texttt{\marg{#1}}\linebreak[1]} + \newcommand*{\OParameter}[1]{\texttt{\oarg{#1}}\linebreak[1]} + \newcommand*{\MParameter}[2]{\texttt{(\meta{#1},\meta{#2})}\linebreak[1]} + \providecommand\PParameter[1]{\mbox{\texttt{\{#1\}}}\linebreak[1]} + \let\PName\meta + \let\PValue\texttt + \providecommand*{\autoref}[1]{\expandafter\AUTOREF#1:} + \providecommand*{\AUTOREF}{} + \makeatletter + \def\AUTOREF#1:#2:{% + \edef\@tempa{#1}% + \edef\@tempb{tab}\ifx\@tempa\@tempb table~\fi + \edef\@tempb{sec}\ifx\@tempa\@tempb section~\fi + \ref{#1:#2}% + } + \providecommand*{\IndexCmd}[2][]{} + \providecommand*{\textnote}[2][]{} + \providecommand*\eTeX{\leavevmode\hbox{$\varepsilon$}-\TeX} + \providecommand*\NTS{% + \leavevmode\hbox{$\cal N\kern-0.35em\lower0.5ex\hbox{$\cal T$}% + \kern-0.2emS$}} + + \lstnewenvironment{lstcode}{\lstset{language=[LaTeX]TeX}}{} + \makeatother + \sloppy% YOU SHOULD NOT DO THIS!!! + + \begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} + \PrintChanges + \PrintIndex + \end{document} +%</driver> +%<*dtx> +% \fi^^A meta-comment +% +% \selectlanguage{english} +% +% \changes{v0.0}{2012/01/01}{start of interface} +% \let\restorechapter\chapter +% \let\chapter\section +% \let\section\subsection +% \let\subsection\subsubsection +% +% \chapter{End User Interface \Package{scrlayer-scrpage}} +% \label{sec:scrlayer-scrpage} +% +% This interface is the implementation of the described features of +% \KOMAScript{} package \Package{scrpage2}. It is extended by some additional +% options and commands. Some features, that has been described for +% \Package{scrpage2} have been removed or declared to be deprecated. +% +% While this is mainly the implementation documentation, you may find only some +% additional information about differences to \Package{scrpage2}. See the +% \KOMAScript{} manual (\File{scrguien.pdf}) for more information. +% +% \section{Head and Foot Width and Offset} +% \label{sec:scrlayer.headfoot.width} +% +% From \Package{scrpage2} you already know commands \Macro{setheadwidth} and +% \Macro{setfootwidth}. Package \Package{scrlayer-scrpage} provides them too and +% they are still supported. +% +% \DescribeOption{headwidth} +% \DescribeOption{footwidth} +% Options +% \KOption{headwidth}\PName{width}\texttt{:}\PName{offset} +% and +% \KOption{footwidth}\PName{width}\texttt{:}\PName{offset} +% could be used to setup the width and the horizontal offset of the page head +% respectively the page foot. By default the \PName{width} is +% \Length{textwidth}, the width of the text area. The default of \PName{offset} +% is a little bit more complex. Normally the default of \PName{offset} in +% single-side mode is half of the difference of the text area width minus +% \PName{width}. In two-side mode it's only a third of that difference. But if +% \PName{width} is the width of the text area plus the marginal note column, the +% default of \PName{offset} is zero. +% +% An \PName{offset} of zero means, that the head respectively foot is aligned to +% the inner edge of the text area. In single-side mode this is the left edge of +% the text area. In double-side mode, this is the left edge of the text area of +% odd pages or the right edge of the text area of even pages. An positive +% \PName{offset} will move the head respectively the foot towards the outer +% margin respectively the right margin in single-side mode. +% +% You may omit the \PName{width} or the \PName{offset}. In this case also the +% defaults of the values will be used. If you omit both, you may also omit the +% colon. If you omit one value and the colon, the existent value is the +% \PName{width}. +% +% Instead of using lengths for \PName{width} or \PName{offset}, you may use also +% some symbolic values. These are +% \begin{description} +% \item[\PValue{foot}:] the current width of the page foot, +% \item[\PValue{footbotline}:] the current length of the horizontal line below +% the page foot, +% \item[\PValue{footsepline}:] the current length of the horizontal line above +% the page foot, +% \item[\PValue{head}:] the current width of the page head, +% \item[\PValue{headsepline}:] the current length of the horizontal line below +% the page head, +% \item[\PValue{headtopline}:] the current length of the horizontal line above +% the page head, +% \item[\PValue{marginpar}:] the width of the marginal note column plus the +% distance of that column to the text area, +% \item[\PValue{page}:] the paper width without binding correction, that has +% been set using package \Package{typearea}, +% \item[\PValue{paper}:] the whole paper width inclusive a binding correction +% if used, +% \item[\PValue{text}:] the width of the text area, +% \item[\PValue{textwidthmarginpar}:] the width of the text area plus the +% marginal note column (and the distance between them). +% \end{description} +% If none of the symbolic values has been used, you may alternatively use a +% dimensional expression. Those may contain basic arithmetic operations and +% round brackets. For more information about dimensional expressions see the +% \eTeX{} manual. +% +% +% \section{Horizontal Separation Lines above and below Page Head and Foot} +% \label{sec:scrlayer-headfoot.lines} +% +% From \Package{scrpage2} you already know options \Option{headtopline}, +% \Option{headsepline}, \Option{footsepline}, \Option{footbotline}, +% \Option{plainheadtopline}, \Option{plainheadsepline}, +% \Option{plainfootsepline}, and \Option{plainfootbotline}. These were +% implemented as \LaTeX{} package options and could be used to switch on the +% lines only. With \Package{scrlayer-scrpage} this has been changed. +% +% \DescribeOption{headtopline} +% \DescribeOption{headsepline} +% \DescribeOption{footsepline} +% \DescribeOption{footbotline} +% The option +% \KOption{headtopline}\PName{thickness}\texttt{:}\PName{length} +% May be used to activate a horizontal line above the page head and to configure +% it's \PName{thickness} and \PName{length}. You may omit both, the +% \PName{thickness} and \PName{length}. In this case you may also omit the +% colon. This would result in the default \PName{thickness} 0.4\,pt and the +% default \PName{length}, that is the current width of the page head. If you use +% only one value without colon, this will be interpreted as \PName{thickness} +% and \PName{width} will become also the default. For \PName{length} you may +% also use a symbolic value. Alternatively you may use a dimensional expression +% again. See option \Option{headwidth} for more information about valid symbolic +% values and dimensional expressions. +% +% Options \Option{headsepline}, \Option{footsepline}, and \Option{footbotline} +% are similar to \Option{headtopline}, but for a horizontal line below the page +% head, above the page foot, and below the page foot. The default \PName{length} +% of \Option{footsepline} and \Option{footbotline} is the width of the page foot +% instead of the page head. +% +% Instead of \PName{thickness}\texttt{:}\PName{length} you may alternatively use +% one of the values for \emph{simple switches}. Switching on a line, will also +% set \PName{thickness} and \PName{length} to their defaults. Switching off a +% line, will set both values to zero. This makes the lines invisible. +% +% All of them are also font elements, that may be configured using +% \Macro{setkomafont} or \Macro{addtokomafont}, but you should not change the +% font size. The elements are provided to make it easier to change the colour of +% the lines. See package \Package{color} or \Package{xcolor} for more +% information about colour with \LaTeX. +% +% \DescribeOption{plainheadtopline} +% \DescribeOption{plainheadsepline} +% \DescribeOption{plainfootsepline} +% \DescribeOption{plainfootbotline} +% The option +% \KOption{plainheadtopline}\PName{simple switch} +% may be used to switch on or off the horizontal line above the page head of +% \emph{plain} pages, defined using on of the commands from +% \autoref{sec:scrlayer.definepairs}. Page style \Pagestyle{scrplain} is one of +% those. You cannot give them another length or thickness than the lines of the +% \emph{headings} or \emph{main} page style. You may only switch them on or off +% and they will use the settings of the \emph{main} page style. By default they +% are switched off, because that's the usual style of chapter start pages. +% +% Options \Option{plainheadsepline}, \Option{plainfootsepline}, and +% \Option{plainfootbotline} are similar for the corresponding other horizontal +% lines below or above the page head or foot. +% +% \DescribeOption{ilines} +% \DescribeOption{clines} +% \DescribeOption{olines} +% You already know these options from \Package{scrpage2}. But now they are not +% only package options, but \KOMAScript{} options, that may be used anywhere at +% the document preamble or document body. Nevertheless, they don't expect any +% value. Maybe these options will become deprecated in a future release of +% \Package{scrlayer-scrpage} and will become a single option with (at least) +% three values. +% +% +% \section{Predefined Page Styles} +% \label{sec:scrlayer.predefined} +% +% Package \Package{scrlayer-scrpage} still defines page styles +% \Pagestyle{scrheadings} and \Pagestyle{scrplain}, but \Pagestyle{scrplain} +% is only an alias for \Pagestyle{plain.scrheadings} now. +% +% \DescribeOption{pagestyleset} +% \KOMAScript{} option +% \KOption{pagestyleset}\PName{name} +% may be used to configure the page styles \Pagestyle{scrheadings} and +% \Pagestyle{scrplain}. For \PName{name} currently one of \PValue{standard} or +% \PValue{KOMA-Script} is allowed. The first one selects settings for the +% elements of the page head and foot, that are compatible with the standard +% classes. The second one selects defaults compatible with the \KOMAScript{} +% classes. +% +% +% \section{Defining Pairs Like \Pagestyle{scrheadings} and +% \Pagestyle{plain.scrheadings}} +% \label{sec:scrlayer.definepairs} +% +% You already know the page style pair \Pagestyle{scrheadings} and +% \Pagestyle{scrplain} from package \Package{scrpage2}. As told above with +% \Package{scrlayer-scrpage} page style \Package{scrplain} is an alias of +% \Pagestyle{plain.scrheadings}. So page styles \Pagestyle{scrheadings} and +% \Pagestyle{plain.scrheadings} build the real pair of a \emph{headings} page +% style and a \emph{plain} page style. +% +% You should\,---\,at this point\,---\,also note, that the commands +% \Macro{ihead}, \Macro{chead}, \Macro{ohead}, \Macro{lehead}, \Macro{cehead}, +% \Macro{rehead}, \Macro{lohead}, \Macro{lohead}, \Macro{rohead}, +% \Macro{ifoot}, \Macro{cfoot}, \Macro{ofoot}, \Macro{lefoot}, \Macro{cefoot}, +% \Macro{refoot}, \Macro{lofoot}, \Macro{lofoot}, \Macro{rofoot}, +% \Macro{clearscrheadfoot}, \Macro{clearscrplain}, and \Macro{clearscrheadings} +% does not only configure \Pagestyle{scrplain} and \Pagestyle{scrheadings}, but +% the current pair of page styles. If the current page style is not a member of +% a pair of page styles, that last pair, that has been used, is the current +% one. Only if this is unknown too, the pair \Pagestyle{scrheadings} and +% \Pagestyle{plain.scrheadings}\footnote{\Pagestyle{plain.scrheadings} is the +% real name of the \emph{plain} page style to \Pagestyle{scrheadings}.} is +% current. +% +% \DescribeMacro{\defpairofpagestyles} +% \DescribeMacro{\newpairofpagestyles} +% \DescribeMacro{\renewpairofpagestyles} +% \DescribeMacro{\providepairofpagestyles} +% The command +% \Macro{defpairofpagestyles}% +% \OParameter{parent page style name}\Parameter{name}\Parameter{definition} +% may be used to define a pair of page styles like \PName{scrheadings} and +% \PName{plain.scrheadings}. \PName{name} is the name of the \emph{headings} +% page style of the pair. We also say \emph{main} page style alternatively to +% \emph{headings} page style. The \emph{plain} page style will become the name +% \PValue{plain.}\PName{name}. +% +% The \PName{definition} will be executed, whenever either the main or the plain +% page style will be selected. You may use here, e.g., commands like +% \Macro{ihead} or \Macro{clearpairofpagestyles} to configure the pair of page +% styles. But note, if you redefine things like \Macro{chaptermark} inside of +% \PName{definition}, this would also influence other page styles. So it's +% recommended to use only commands, that do not influence other page styles or +% other features of \Package{scrlayer} or other packages or classes! +% +% The difference between \Macro{newpairofpagestyles} and +% \Macro{defpairofpagestyles} is, that the first one would raise an error, if +% there has been a page style \PName{name} or \PValue{plain.}\PName{name} +% already before. In opposite to this \Macro{renewpairofpagestyles} would raise +% the error, if those page style hasn't been already before. Last but not least +% \Macro{providepairofpagestyles} won't raise an error, but it defines +% \PName{name} and \PValue{plain.}\PName{name} only, if they were not defined +% already before. +% +% \DescribeMacro{\clearmainofpairofpagestyles} +% \DescribeMacro{\clearplainofpairofpagestyles} +% \DescribeMacro{\clearpairofpagestyles} +% With \Package{scrlayer-scrpage} pairs of page styles are more general that +% with the single pair of \Package{scrpage2}. So command names like +% \Macro{clearscrheadings}, \Macro{clearscrplain} and even +% \Macro{clearscrheadfoot} are somehow to specific. Therefore +% \Macro{clearmainofpairofpagestyles} is the new name of +% \Macro{clearscrheadings} to set all fields of the main page style of the +% current pair of page styles to an empty value; +% \Macro{clearplainofpairofpagestyles} is the new name of \Macro{clearscrplain} +% to set all fields of the plain page style of the current pair of page styles +% to an empty value; \Macro{clearpariofpagestyles} is the new name of +% \Macro{clearscrheadfoot} to set all fields of the plain and the main page +% style if the current pair of page styles to an empty value. The old names are +% obsolete, but still valid for compatibility reason. But they have the new +% meanings, if \Pagestyle{scrheadings} and \Pagestyle{plain.scrheadings} are not +% the only existing pair of page styles. +% +% +% \section{Defining Page Styles With Expert Interface} +% \label{sec:scrlayer.expert} +% +% You already know \Macro{defpagestyle}, \Macro{newpagestyle}, +% \Macro{renewpagestyle}, and \Macro{providepagestyle} from package +% \Package{scrpage2}. Package \Package{scrlayer-scrpage} provides those +% too. Nevertheless there are some differences, e.g., \Package{scrpage2} didn't +% support a configurable height for the page foot, but supposed +% \Length{baselineskip} for the total height of the foot. Package +% \Package{scrlayer-scrpage} uses length \Length{footheight} provided by +% \Package{scrlayer} for the total height of the foot. +% +% \DescribeOption{hmode} +% The option +% \KOption{hmode}\PName{simple switch}% +% may be used to make \Package{scrlayer-scrpage} more compatible with +% \Package{scrpage2}. By default \Package{scrlayer-scrpage} sets the elements of +% the page head and page foot in vertical mode. But \Package{scrpage2} did the +% same job in horizontal mode. If the option has been switched on, +% \Package{scrlayer-scrpage} will also leave the vertical mode before setting a +% page head or foot element. +% +% +% \section{Removed or Deprecated Package Options} +% \label{sec:scrlayer.deprecated.options} +% +% Package \Package{scrpage2} never supported \KOMAScript{} options. Instead it +% only supports standard \LaTeX{} package options. Options \Option{headinclude}, +% \Option{headexclude}, \Option{footinclude}, and \Option{footexclude} became +% deprecated since 2008-12-08. Package \Package{scrlayer-scrpage} doesn't +% provide them any longer. Options \Option{mpinclude} and \Option{mpexclude} has +% never been official in \Package{scrpage2}. So it was an easy decision to not +% provide them by \Package{scrlayer-scrpage}. +% +% Options \Option{komastyle} and \Option{standardstyle} have been replaced by +% \Option{pagestyleset}. Nevertheless, they are still implemented as simple +% package options, but declared to be deprecated. You should not use them any +% longer, because they might be removed in a future release. +% +% Options \Option{markuppercase}, \Option{markusedcase}, and +% \Option{nouppercase} have been replaced by \Option{markcase}. Nevertheless, +% they are still implemented as simple package options, but declared to be +% deprecated. You should not use them any longer, because they might be removed +% in a future release. +% +% +% \section{Deprecated Commands} +% \label{sec:scrlayer.deprecated.commands} +% +% The commands \Macro{setheadtopline}, \Macro{setheadsepline}, +% \Macro{setfootsepline}, and \Macro{setfootbotline} of \Package{scrpage2} has +% been intended to configure the lines above and below the page head and +% foot. They \emph{never} has been intended to switch the lines on an +% off. Switching on the lines should have been done using the package options +% \Option{headtopline}, \Option{headsepline}, \Option{footsepline}, and +% \Option{footbotline}, and their plain equivalents \Option{plainheadtopline}, +% \Option{plainheadsepline}, \Option{plainfootsepline}, and +% \Option{plainfootbotline}. Nevertheless, a lot of users have used the commands +% also to switch on the lines. This commands became deprecated with +% \Package{scrlayer-scrpage}, but nevertheless are still +% implemented. Nevertheless, with \Package{scrlayer-scrpage} users should +% absolutely use the \KOMAScript{} options and the font elements not only for +% switching on the lines, but also for configuration of the lines. +% +% Commands \Macro{headfont} and \Macro{footfont} are deprecated, because +% \Package{scrlayer-scrpage} provides the font element interface of the +% \KOMAScript{} classes. You should use \Macro{setkomafont} and +% \Macro{addtokomafont} to configure fonts and colours of page head and foot. +% +% Package \Package{scrpage2} provided an additional user page style definition +% interface using command \Macro{deftripstyle}. This became obsolete with +% \Package{scrlayer-scrpage}, because the other interfaces are easier to +% understand and more powerful. Nevertheless additional commands +% \Macro{deftriplepagestyle}, \Macro{newtriplepagestyle}, +% \Macro{renewtriplepagestyle}, and \Macro{providetriplepagestyle} has been +% implemented to have a more consistent user interface. +% +%\iffalse +%</dtx> +%\fi +% +% \StopEventually{} +% +% \chapter{Implementation of \Package{scrlayer-scrpage}} +% +% This section if for developers only. +% +% \iffalse +%<*interface> +%<*identify> +% \fi +% +%\iffalse +%</identify> +%\fi +% +% +% \section{Initialising some Values before the Options} +% +% \iffalse^^A meta-comment +%<*init> +% \fi^^A meta-comment +% +% Initialisation before all options (even the options from +% \File{scrlayer.dtx}). +% +% Currently nothing. +% +% \iffalse^^A meta-comment +%</init> +% \fi^^A meta-comment +% +% \section{Options} +% +% \iffalse^^A meta-comment +%<*options> +% \fi +% +% Package \Package{scrpage2} doesn't support \KOMAScript{} options but only +% regular \LaTeX{} package options. The interface will also support those +% options, but uses \KOMAScript{} options for the implementation. This +% results in additional features of the interface. +% +% Note, that some options are already defined before this by the common option +% parts of \File{scrlayer.dtx}. All others will follow step by step in the +% main part. +% +% Options \Option{headinclude}, \Option{headexclude}, \Option{footinclude} and +% \Option{footexclude} of package \Package{scrpage2} are deprecated since +% package version 2.3, 2008-12-08. They won't be supported by the +% \Package{scrlayer-scrpage} interface. +% +% Additional initialisation may be done here, but currently this isn't +% needed. +% +% \iffalse^^A meta-comment +%</options> +% \fi^^A meta-comment +% +% +% \section{Width of Header and Footer} +% +% \Package{scrpage2} provides to set the width of the page head or footer +% different from the width of the text area of the page using +% \Macro{setheadwidth} and \Macro{setfootwidth}. Optionally those commands +% allow to setup an horizontal offset for the head or footer. This interface +% provides the same feature but also allows to set up the widths and offsets +% with \KOMAScript{} options. Those options will become the primary interface. +% +% \begin{option}{headwidth} +% \begin{option}{footwidth} +% \begin{description} +% \item[\texttt{=\meta{special dimensional expression}:\meta{special +% dimensional expression}}:] see \Macro{sls@settowidthof} for information +% about the syntax of \meta{special dimensional expression}. The width of +% the page head or footer will be set to the result of the first on, the +% offset to the result of the second one. If the first one\,---\,the +% width\,---\,is omitted, the current width will be used. If the second +% one\,---\,the offset\,---\,is omitted and the width is the width of the +% text area plus the margin note column, the offset will be set to +% zero. If the second one is omitted and the width is not the width of the +% text area plus the margin note column, a special kind of centering will +% be used. +% \end{description} +% These options may be used to set up the widths of head and foot. +% \begin{macrocode} +%<*options> +\KOMA@key{headwidth}{% + \begingroup + \sls@split@at@colon#1::\@nil + \ifx\reserved@a\@empty \let\reserved@a\sls@headwidth\fi + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\sls@set@hf@width{head}{\reserved@b}{\reserved@a}% + }% + \reserved@a + \FamilyKeyStateProcessed +} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@headwidth} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@headwidth@default} +\KOMA@key{footwidth}{% + \begingroup + \sls@split@at@colon#1::\@nil + \ifx\reserved@a\@empty \let\reserved@a\sls@footwidth\fi + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\sls@set@hf@width{foot}{\reserved@b}{\reserved@a}% + }% + \reserved@a + \FamilyKeyStateProcessed +} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@footwidth} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@footwidth@default} +% \end{macrocode} +% \begin{macro}{\sls@split@at@colon} +% \begin{description} +% \item[\texttt{\meta{balanced}:^^A +% \meta{balanced}:^^A +% \meta{balanced}\Macro{@nil}}:] first \meta{balanced} will be stored into +% \Macro{reserved@a}, second into \Macro{reserved@b}, third will be eaten +% and warn about if it es neither empty and nor a colon. +% \end{description} +% This little helper is used, e.g., by options \Option{headwidth} and +% \Option{footwidth}. +% \begin{macrocode} +\scrlayerAddToInterface\sls@split@at@colon{% + \def\sls@split@at@colon#1:#2:#3\@nil{% + \ifstr{#3}{}{}{% + \ifstr{#3}{:}{}{% + \PackageWarning{scrlayer}{extra `:' found!\MessageBreak + You've used more than one colon at the argument\MessageBreak + of a two value option.\MessageBreak + The extra value(s) will be ignored% + }% + }% + }% + \def\reserved@a{#1}% + \def\reserved@b{#2}% + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@split@at@colon +% \begin{macro}{\sls@set@hf@width} +% \begin{description} +% \item[\Parameter{head} or \Parameter{foot}:] to complete the macro names +% for page head or footer. +% \item[\Parameter{special dimensional expression}:] the offset +% \item[\Parameter{special dimensional expression}:] the width +% \end{description} +% This helper will generally set up width an offset of either head or footer. +% \begin{macrocode} +\scrlayerAddToInterface\sls@set@hf@width{% + \newcommand*{\sls@set@hf@width}[3]{% + \sls@settowidthof{\@tempdima}{#3}% + \ifdim\@tempdima>\paperwidth + \PackageWarning + {scrlayer-scrpage}% + {You've set width of #1 to a value\MessageBreak + greater than width of page!\MessageBreak% + I'll reduce width of #1 to width of page}% + \setlength{\@tempdima}{\paperwidth}% + \else + \ifdim\@tempdima<\z@ + \PackageWarning + {scrlayer-scrpage}% + {You've set width of #1 to negative value!\MessageBreak% + I'll set it to 0pt}% + \setlength{\@tempdima}{\z@}% + \fi + \fi + \expandafter\edef\csname sls@#1width\endcsname{\the\@tempdima}% + \setlength{\@tempdima}{\textwidth}% + \addtolength{\@tempdima}{-\csname sls@#1width\endcsname}% + \ifstr{#2}{}{% + \ifdim \csname sls@#1width\endcsname + = \dimexpr \textwidth+\marginparwidth+\marginparsep\relax + \setlength{\@tempdimb}{\z@} + \else + \if@twoside + \setlength{\@tempdimb}{.3333333333\@tempdima}% + \else + \setlength{\@tempdimb}{.5\@tempdima}% + \fi + \fi + }{% + \sls@settowidthof{\@tempdimb}{#2}% + } + \addtolength{\@tempdima}{-\@tempdimb}% + \ifdim\@tempdimb<\z@ + \setlength{\@tempdimb}{-\@tempdimb}% + \expandafter\edef\csname sls@odd#1shift\endcsname{-\the\@tempdimb}% + \else + \expandafter\edef\csname sls@odd#1shift\endcsname{\the\@tempdimb}% + \fi + \ifdim\@tempdima<\z@ + \setlength{\@tempdima}{-\@tempdima}% + \expandafter\edef\csname sls@even#1shift\endcsname{-\the\@tempdima}% + \else + \expandafter\edef\csname sls@even#1shift\endcsname{\the\@tempdima}% + \fi + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@set@hf@width +% \begin{macro}{\sls@headwidth} +% \begin{macro}{\sls@oddheadshift} +% \begin{macro}{\sls@evenheadshift} +% \begin{macro}{\sls@footwidth} +% \begin{macro}{\sls@oddfootshift} +% \begin{macro}{\sls@evenfootshift} +% To store width and offset of page head an footer, we use macros. Those are +% also used by the options and therefore need to be initialised before option +% usage. +% \begin{macrocode} +\scrlayerAddToInterface\sls@headwidth{% + \scr@ifundefinedorrelax{@headwidth}{% + \newcommand*{\sls@headwidth}{\textwidth}% + }{% + \newcommand*{\sls@headwidth}{\@headwidth}% + }% +} +\scrlayerAddToInterface\sls@oddheadshift{\newcommand*{\sls@oddheadshift}{\z@}} +\scrlayerAddToInterface\sls@evenheadshift{\newcommand*{\sls@evenheadshift}{\z@}} +\scrlayerAddToInterface\sls@footwidth{% + \scr@ifundefinedorrelax{@footwidth}{% + \newcommand*{\sls@footwidth}{\textwidth}% + }{% + \newcommand*{\sls@footwidth}{\@footwidth}% + }% +} +\scrlayerAddToInterface\sls@oddfootshift{\newcommand*{\sls@oddfootshift}{\z@}} +\scrlayerAddToInterface\sls@evenfootshift{\newcommand*{\sls@evenfootshift}{\z@}} +% \end{macrocode} +% \end{macro}^^A \sls@headwidth +% \end{macro}^^A \sls@oddheadshift +% \end{macro}^^A \sls@evenheadshift +% \end{macro}^^A \sls@footwidth +% \end{macro}^^A \sls@oddfootshift +% \end{macro}^^A \sls@evenfootshift +% +% \begin{macro}{\sls@settowidthof} +% \begin{macro}{\sls@deftowidthof} +% the special dimensional expressions may be either one of the strings +% \texttt{paper}, \texttt{text}, \texttt{marginpar}, +% \texttt{textwithmarginpar}, \texttt{head}, \texttt{foot}, +% \texttt{headtopline}, \texttt{headsepline}, \texttt{footsepline}, +% \texttt{footbotline}, or \texttt{page} or a valid dimensional +% expression. But it cannot be both a dimensional expression using symbolic +% values! +% \begin{macrocode} +\scrlayerAddToInterface\sls@settotwidthof{% + \newcommand*{\sls@settowidthof}[2]{% + \ifstr{#2}{paper}{% + \setlength{#1}{\paperwidth}% + }{% + \ifstr{#2}{text}{% + \setlength{#1}{\textwidth}% + }{% + \ifstr{#2}{marginpar}{% + \setlength{#1}{\dimexpr \marginparwidth+\marginparsep\relax}% + }{% + \ifstr{#2}{textwithmarginpar}{% + \setlength{#1}{\dimexpr\textwidth + +\marginparwidth + +\marginparsep\relax}% + }{% + \ifstr{#2}{head}{% + \setlength{#1}{\sls@headwidth}% + }{% + \ifstr{#2}{foot}{% + \setlength{#1}{\sls@footwidth}% + }{% + \ifstr{#2}{headtopline}{% + \setlength{#1}{\sls@headabove@linelength}% + }{% + \ifstr{#2}{headsepline}{% + \setlength{#1}{\sls@headbelow@linelength}% + }{% + \ifstr{#2}{footsepline}{% + \setlength{#1}{\sls@footabove@linelength}% + }{% + \ifstr{#2}{footbotline}{% + \setlength{#1}{\sls@footbelow@linelength}% + }{% + \ifstr{#2}{page}{% + \setlength{#1}{\paperwidth}% + \begingroup + \expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname ta@bcor\endcsname\relax\else + \addtolength{#1}{-\ta@bcor}% + \fi + }{% + \setlength{#1}{\dimexpr #2\relax}% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% +} +\scrlayerAddToInterface\sls@deftowidthof{% + \newcommand*{\sls@deftowidthof}[2]{% + \ifstr{#2}{autohead}{% + \expandafter\def\csname #1\endcsname{\sls@headwidth}% + }{% + \ifstr{#2}{autofoot}{% + \expandafter\def\csname #1\endcsname{\sls@footwidth}% + }{% + \sls@settowidthof{\@tempdima}{#2}% + \expandafter\edef\csname #1\endcsname{\the\@tempdima}% + }% + }% + }% +} +%</options> +% \end{macrocode} +% \end{macro}^^A \sls@deftowidthof +% \end{macro}^^A \sls@settowidthof +% \end{option}^^A footwidth +% \end{option}^^A footheight +% +% \begin{macro}{\setheadwidth} +% \begin{macro}{\setfootwidth} +% For compatibility with \Package{scrpage2}, map the commands to the options: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\setheadwidth{% + \newcommand*{\setheadwidth}[2][]{% + \KOMAoptions{headwidth=#2:#1}% + }% +} +\scrlayerAddToInterface\setfootwidth{% + \newcommand*{\setfootwidth}[2][]{% + \KOMAoptions{footwidth=#2:#1}% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \setheadwidth +% \end{macro}^^A \setfootwidth +% +% +% \section{Lines in Page Head and Footer} +% +% The interface implements the options \Option{headtopline}, +% \Option{headsepline}, \Option{footsepline}, \Option{footbotline}, +% \Option{plainheadtopline}, \Option{plainheadsepline}, +% \Option{plainfootsepline}, \Option{plainfootbotline}, \Option{ilines}, +% \Option{clines}, and \Option{olines}, the commands \Macro{setheadtopline}, +% \Macro{setheadsepline}, \Macro{setfootsepline}, and \Macro{setfootbotline}, +% and the corresponding \KOMAScript{} font elements of package +% \Package{scrpage2}. Some of the options are extended to understand +% values. +% +% \begin{option}{headtopline} +% \begin{option}{headsepline} +% \begin{option}{footsepline} +% \begin{option}{footbotline} +% \begin{description} +% \item[{\texttt{=\meta{dimensional expression}:\meta{dimensional +% expression}}:}] +% \end{description}\noindent +% Define thickness and length of the a default separation line between: +% \begin{description} +% \item[\Option{headtopline}:] the top margin of the page and the page head. +% \item[\Option{headsepline}:] the page head and the text area. +% \item[\Option{footsepline}:] the text area and the page footer. +% \item[\Option{footbotline}:] the page footer and the bottom margin. +% \end{description} +% Both values may be omitted. In that case thickness would be 0.4\,pt, and +% length would be the width of the page head or footer. If the second +% argument, the length, has been omitted the \texttt{:} may also be omitted. +% \begin{macrocode} +%<*options> +\KOMA@key{headtopline}[:]{\sls@set@values{head}{above}{#1}} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@headtopline} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@headtopline@default} +\KOMA@key{headsepline}[:]{\sls@set@values{head}{below}{#1}} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@headsepline} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@headsepline@default} +\KOMA@key{footsepline}[:]{\sls@set@values{foot}{above}{#1}} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@footsepline} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@footsepline@default} +\KOMA@key{footbotline}[:]{\sls@set@values{foot}{below}{#1}} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@footbotline} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@footbotline@default} +% \end{macrocode} +% \begin{macro}{\sls@set@values} +% \begin{description} +% \item[\Parameter{head or foot}:] either \texttt{head} or \texttt{foot} +% \item[\Parameter{above or below}:] either \texttt{above} or \texttt{below} +% \item[\Parameter{dimension expression}\texttt{:}\Parameter{dimension +% expression}] length an thickness of a line (both are optional) +% \end{description} +% Helper macros for the options to set two macros by two values of one +% option. The two values are separated by a colon. +% \begin{macrocode} +\scrlayerAddToInterface\sls@set@values{% + \newcommand*{\sls@set@values}[3]{% + \begingroup + \let\reserved@a\@empty + \let\reserved@b\@empty + \ifstr{#3}{true}{\def\reserved@a{.4pt}\def\reserved@b{sls@#1width}}{% + \ifstr{#3}{yes}{\def\reserved@a{.4pt}\def\reserved@b{sls@#1width}}{% + \ifstr{#3}{on}{\def\reserved@a{.4pt}\def\reserved@b{sls@#1width}}{% + \ifstr{#3}{false}{\def\reserved@a{\z@}\def\reserved@b{z@}}{% + \ifstr{#3}{no}{\def\reserved@a{\z@}\def\reserved@b{z@}}{% + \ifstr{#3}{off}{\def\reserved@a{\z@}\def\reserved@b{z@}}{% + }% + }% + }% + }% + }% + }% + \ifx\reserved@a\@empty + \sls@split@at@colon#3::\@nil + \ifx\reserved@a\@empty + \def\reserved@a{\endgroup\@namedef{sls@#1#2@linethickness}{.4pt}}% + \else + \setlength{\@tempdima}{\dimexpr\reserved@a\relax}% + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\@namedef{sls@#1#2@linethickness}{\the\@tempdima}% + }% + \fi + \ifx\reserved@b\@empty + \def\reserved@b{% + \reserved@a + \@namedef{sls@#1#2@linelength}{\@nameuse{sls@#1width}}% + }% + \else + \edef\reserved@b{% + \noexpand\reserved@a + \noexpand\sls@deftowidthof{sls@#1#2@linelength}{\reserved@b}% + }% + \fi + \else + \edef\reserved@b{% + \noexpand\endgroup + \noexpand\@namedef{sls@#1#2@linethickness}{\reserved@a}% + \noexpand\@namedef{sls@#1#2@linelength}{% + \expandafter\noexpand\csname \reserved@b\endcsname + }% + }% + \fi + \reserved@b + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@set@values +% \begin{macro}{\sls@headabove@linelength} +% \begin{macro}{\sls@headabove@linethickness} +% \begin{macro}{\sls@headbelow@linelength} +% \begin{macro}{\sls@headbelow@linethickness} +% \begin{macro}{\sls@footabove@linelength} +% \begin{macro}{\sls@footabove@linethickness} +% \begin{macro}{\sls@footbelow@linelength} +% \begin{macro}{\sls@footbelow@linethickness} +% To store length and thickness of the lines at the page head an footer, we +% use macros. Those are also used by the options and therefore need to be +% initialised before option usage. +% \begin{macrocode} +\scrlayerAddToInterface\sls@headabove@linelength{% + \newcommand*{\sls@headabove@linelength}{\sls@headwidth}% +} +\scrlayerAddToInterface\sls@headabove{% + \newcommand*{\sls@headabove@linethickness}{\z@}% +} +\scrlayerAddToInterface\sls@headbelow@linelength{% + \newcommand*{\sls@headbelow@linelength}{\sls@headwidth}% +} +\scrlayerAddToInterface\sls@headbelow@linethickness{% + \newcommand*{\sls@headbelow@linethickness}{\z@}% +} +\scrlayerAddToInterface\sls@footabove@linelength{% + \newcommand*{\sls@footabove@linelength}{\sls@footwidth}% +} +\scrlayerAddToInterface\sls@footabove@linethickness{% + \newcommand*{\sls@footabove@linethickness}{\z@}% +} +\scrlayerAddToInterface\sls@footbelow@linelength{% + \newcommand*{\sls@footbelow@linelength}{\sls@footwidth}% +} +\scrlayerAddToInterface\sls@footbelow@linethickness{% + \newcommand*{\sls@footbelow@linethickness}{\z@}% +} +%</options> +% \end{macrocode} +% \end{macro}^^A \sls@footbelow@linethickness +% \end{macro}^^A \sls@footbelow@linelength +% \end{macro}^^A \sls@footabove@linethickness +% \end{macro}^^A \sls@footabove@linelength +% \end{macro}^^A \sls@headbelow@linethickness +% \end{macro}^^A \sls@headbelow@linelength +% \end{macro}^^A \sls@headabove@linethickness +% \end{macro}^^A \sls@headabove@linelength +% \end{option}^^A footbotline +% \end{option}^^A footsepline +% \end{option}^^A headsepline +% \end{option}^^A headtopline +% +% \begin{option}{plainheadtopline} +% \begin{macro}{\ifsls@plain@head@above@line} +% \begin{option}{plainheadsepline} +% \begin{macro}{\ifsls@plain@head@below@line} +% \begin{option}{plainfootsepline} +% \begin{macro}{\ifsls@plain@foot@above@line} +% \begin{option}{plainfootbotline} +% \begin{macro}{\ifsls@plain@foot@below@line} +% \begin{description} +% \item[\texttt{=\meta{switch value}}:] +% \end{description}\noindent +% While these only switches the rule on or off, we need only some switches. +% \begin{macrocode} +%<*options> +\scrlayerAddCsToInterface{ifsls@plain@head@above@line}{% + \KOMA@ifkey{plainheadtopline}{sls@plain@head@above@line}% + \scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainheadtopline}% + \scrlayer@AddCsToInterface{% + KV@KOMA.scrlayer-scrpage.sty@plainheadtopline@default}% + \scrlayer@AddCsToInterface{sls@plain@head@above@linetrue} + \scrlayer@AddCsToInterface{sls@plain@head@above@linefalse} +} +\scrlayerAddCsToInterface{ifsls@plain@head@sbelow@line}{% + \KOMA@ifkey{plainheadsepline}{sls@plain@head@below@line}% + \scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainheadsepline}% + \scrlayer@AddCsToInterface{% + KV@KOMA.scrlayer-scrpage.sty@plainheadsepline@default}% + \scrlayer@AddCsToInterface{sls@plain@head@below@linetrue}% + \scrlayer@AddCsToInterface{sls@plain@head@below@linefalse}% +} +\scrlayerAddCsToInterface{ifsls@plain@foot@above@line}{% + \KOMA@ifkey{plainfootsepline}{sls@plain@foot@above@line}% + \scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainfootsepline}% + \scrlayer@AddCsToInterface{% + KV@KOMA.scrlayer-scrpage.sty@plainfootsepline@default}% + \scrlayer@AddCsToInterface{sls@plain@foot@above@linetrue}% + \scrlayer@AddCsToInterface{sls@plain@foot@above@linefalse}% +} +\scrlayerAddCsToInterface{ifsls@plain@foot@below@line}{% + \KOMA@ifkey{plainfootbotline}{sls@plain@foot@below@line}% + \scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainfootbotline}% + \scrlayer@AddCsToInterface{% + KV@KOMA.scrlayer-scrpage.sty@plainfootbotline@default}% + \scrlayer@AddCsToInterface{sls@plain@foot@below@linetrue}% + \scrlayer@AddCsToInterface{sls@plain@foot@below@linefalse}% +} +%</options> +% \end{macrocode} +% \end{macro}^^A \ifsls@plain@foot@below@line +% \end{option}^^A plainfootbotline +% \end{macro}^^A \ifsls@plain@foot@above@line +% \end{option}^^A plainfootsepline +% \end{macro}^^A \ifsls@plain@head@below@line +% \end{option}^^A plainheadsepline +% \end{macro}^^A \ifsls@plain@head@above@line +% \end{option}^^A plainheadtopline +% +% \begin{option}{ilines} +% \begin{option}{clines} +% \begin{option}{olines} +% \begin{macro}{\sls@hfline@adjust} +% Maybe it would be more useful to be able to adjust each line on its own or +% at most to define an offset. But \Package{scrpage2} supports only these +% options. At least we can set the options inside a layer or page style. This +% may help. +% \begin{macrocode} +%<*options> +\scrlayerAddToInterface\sls@hfline@adjust{% + \newcommand*{\sls@hfline@adjust}{0}% +} +\KOMA@key{ilines}[]{% + \ifx\relax#1\relax + \renewcommand*{\sls@hfline@adjust}{0}% + \FamilyKeyStateProcessed + \else + \def\FamilyKeyStateProcessed{unexpected value}% + \fi +} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@ilines} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@ilines@default} +\KOMA@key{clines}[]{% + \ifx\relax#1\relax + \renewcommand*{\sls@hfline@adjust}{1}% + \FamilyKeyStateProcessed + \else + \def\FamilyKeyStateProcessed{unexpected value}% + \fi +} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@clines} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@clines@default} +\KOMA@key{olines}[]{% + \ifx\relax#1\relax + \renewcommand*{\sls@hfline@adjust}{2}% + \FamilyKeyStateProcessed + \else + \def\FamilyKeyStateProcessed{unexpected value}% + \fi +} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@olines} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@olines@default} +%</options> +% \end{macrocode} +% \end{macro}^^A \sls@hfline@adjust +% \end{option}^^A olines +% \end{option}^^A clines +% \end{option}^^A ilines +% +% \begin{macro}{\setheadtopline} +% \begin{macro}{\setheadsepline} +% \begin{macro}{\setfootsepline} +% \begin{macro}{\setfootbotline} +% \begin{description} +% \item[\OParameter{extended dimensional expression}:] the length of the +% line; if omitted the length will use the width of the page head or +% footer while printing the line. +% \item[\Parameter{dimensional expression}:] the thickness of the line. +% \item[\OParameter{code}:] the font selection code for the line. You may +% use it for any kind of operation, that doesn't change the position, +% width, height, or depth, e.g., to change the colour of the line. +% \end{description} +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\setheadtopline{% + \newcommand*{\setheadtopline}{\sls@setline{head}{above}}% +} +\scrlayerAddToInterface\setheadsepline{% + \newcommand*{\setheadsepline}{\sls@setline{head}{below}}% +} +\scrlayerAddToInterface\setfootsepline{% + \newcommand*{\setfootsepline}{\sls@setline{foot}{above}}% +} +\scrlayerAddToInterface\setfootbotline{% + \newcommand*{\setfootbotline}{\sls@setline{foot}{below}}% +} +% \end{macrocode} +% \begin{macro}{\sls@setline} +% \begin{macro}{\sls@@setline} +% \begin{macro}{\sls@@@setline} +% \begin{macro}{\sls@@@@setline} +% Helper to set up the line attributes processing the parameters of the +% commands above. +% \begin{macrocode} +\scrlayerAddToInterface\sls@setline{% + \newcommand*\sls@setline[2]{% + \@ifnextchar[%] + {\sls@@setline{#1}{#2}}{\sls@@@setline{#1#2}}% + }% +} +\scrlayerAddToInterface\sls@@setline{% + \def\sls@@setline#1#2[#3]{% + \ifstr{#3}{auto}{% + \sls@deftowidthof{sls@#1#2@linelength}{#3#1}% + }{% + \sls@deftowidthof{sls@#1#2@linelength}{#3}% + }% + \sls@@@setline{#1#2}% + }% +} +\scrlayerAddToInterface\sls@@@setline{% + \def\sls@@@setline#1#2{% + \edef\@tempa{#2}\edef\@tempb{current} + \ifstr{#2}{}{}{% + \ifstr{#2}{current}{}{% + \setlength{\@tempdima}{#2}% + \expandafter\edef\csname sls@#1@linethickness\endcsname% + {\the\@tempdima}% + }% + }% + \PackageWarning{scrlayer-scrpage}{% + Command deprecated!\MessageBreak + Usage of `\string\setheadtopline', + `\string\setheadsepline',\MessageBreak + `\string\setfootsepline', and `\string\setfootbotline'\MessageBreak + became deprecated with scrlayer-scrpage.\MessageBreak + You should use KOMA-Script options\MessageBreak + `headsepline', `headtopline', `footsepline',\MessageBreak + or `footbotline' with values\MessageBreak + `<line thickness>:<line length>' to setup\MessageBreak + the line length and thickness, and\MessageBreak + `\string\setkomafont' or `\string\addtokomafont' to\MessageBreak + setup the colour% + }% + \@ifnextchar[%] + {% + \sls@@@@setline{#1}% + }{% + }% + }% +} +\scrlayerAddToInterface\sls@@@@setline{% + \def\sls@@@@setline#1[#2]{% + \ifstr{#1}{headabove}{\setkomafont{headtopline}{#2}}{% + \ifstr{#1}{headbelow}{\setkomafont{headsepline}{#2}}{% + \ifstr{#1}{footabove}{\setkomafont{footsepline}{#2}}{% + \setkomafont{footbotline}{#2}% + }% + }% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@setline +% \end{macro}^^A \sls@@setline +% \end{macro}^^A \sls@@@setline +% \end{macro}^^A \sls@@@@setline +% \begin{KOMAfont}{headtopline} +% \begin{KOMAfont}{headsepline} +% \begin{KOMAfont}{footsepline} +% \begin{KOMAfont}{footbotline} +% These are the font elements used in \Macro{sls@hf@rule} to set the rules +% with, i.e., another colour. Note, that those may already be defined and +% become only part of the interface if they are not. +% \begin{macrocode} +\@ifundefined{scr@fnt@headtopline}{% + \@ifundefined{@headtoplinefont}{% + \scrlayer@AddCsToInterface{@headtoplinefont}% + }{}% + \newkomafont{headtopline}{}% + \scrlayer@AddCsToInterface{scr@fnt@headtopline}% +}{} +\@ifundefined{scr@fnt@headsepline}{% + \@ifundefined{@headseplinefont}{% + \scrlayer@AddCsToInterface{@headseplinefont}% + }{}% + \newkomafont{headsepline}{}% + \scrlayer@AddCsToInterface{scr@fnt@headsepline}% +}{} +\@ifundefined{scr@fnt@footsepline}{% + \@ifundefined{@footseplinefont}{% + \scrlayer@AddCsToInterface{@footseplinefont}% + }{}% + \newkomafont{footsepline}{}% + \scrlayer@AddCsToInterface{scr@fnt@footsepline}% +}{} +\@ifundefined{scr@fnt@footbotline}{% + \@ifundefined{@footbotlinefont}{% + \scrlayer@AddCsToInterface{@footbotlinefont}% + }{}% + \newkomafont{footbotline}{}% + \scrlayer@AddCsToInterface{scr@fnt@footbotline}% +}{} +%</body> +% \end{macrocode} +% \end{KOMAfont}^^A footbotline +% \end{KOMAfont}^^A footsepline +% \end{KOMAfont}^^A headsepline +% \end{KOMAfont}^^A headtopline +% \end{macro}^^A \setfootbotline +% \end{macro}^^A \setfootsepline +% \end{macro}^^A \setheadsepline +% \end{macro}^^A \setheadtopline +% +% \begin{length}{\headheight} +% Some classes set \Length{headheight} to a very, very small value. We'll +% warn about that: +% \begin{macrocode} +%<*body> +\AtBeginDocument{% + \ifdim \headheight <\baselineskip + \PackageWarningNoLine{scrlayer-scrpage}{Very small head height + detected!\MessageBreak + Using scrlayer-scrpage the head height\MessageBreak + should be at least \string\baselineskip, which is\MessageBreak + \the\baselineskip\space currently.\MessageBreak + But head height is currently + \the\headheight\space only.\MessageBreak + You may use\MessageBreak + \@ifpackageloaded{geometry}{% + geometry option `head=\the\baselineskip'% + }{% + \@ifpackageloaded{typearea}{% + typearea option `headheight=\the\baselineskip'% + }{% + \string\setlength{\string\headheight}{\the\baselineskip}% + }% + }\MessageBreak + to avoid this warning% + }% + \fi +} +%</body> +% \end{macrocode} +% \end{length} +% +% +% \section{Style of Running Heads} +% +% This implements not only options \Option{komastyle} and +% \Option{standardstyle} of \Package{scrpage2}, but also activates the default +% style at the end of the package and takes care for the correct overwrite +% behaviour of option \Option{markcase}. +% +% \begin{option}{pagestyleset} +% \begin{description} +% \item[\texttt{=\meta{string}}:] a valid name of a predefined +% style-set. Currently only \texttt{KOMA-Script} and \texttt{standard} are +% supported. Maybe more will follow. +% \end{description} +% Note, that the following automatic style activation must be before the +% first option usage: +% \begin{macrocode} +%<*init> +\AtEndOfPackage{% + \scr@ifundefinedorrelax{KOMAClassName}{% +%<trace> \PackageInfoNoLine{scrlayer-scrpage}{% +%<trace> auto-selection of `pagestyleset=standard'}% + \FamilyExecuteOptions[.scrlayer-scrpage.sty]{KOMA}{pagestyleset=standard}% + }{% +%<trace> \PackageInfoNoLine{scrlayer-scrpage}{% +%<trace> auto-selection of `pagestyleset=KOMA-Script'}% + \FamilyExecuteOptions[.scrlayer-scrpage.sty]{KOMA}% + {pagestyleset=KOMA-Script}% + }% +} +%</init> +%<*options> +\KOMA@key{pagestyleset}{% + \scr@ifundefinedorrelax{sls@ps@style@#1}{% + \FamilyKeyStateUnknownValue + }{% + \@nameuse{sls@ps@style@#1}% + \FamilyKeyStateProcessed + }% +} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@pagestyleset} +% \end{macrocode} +% \begin{macro}{\sls@ps@style@standard} +% \begin{macro}{\sls@ps@style@KOMA-Script} +% These are the predefined page style sets. +% \begin{macrocode} +\scrlayerAddToInterface\sls@ps@style@standard{% + \newcommand*{\sls@ps@style@standard}{% + \let\MakeMarkcase\MakeUppercase + \scrlayer@AtEndOfPackage{% + \pagestyle{scrheadings}% + \clearpairofpagestyles + \ihead{\headmark}% + \ohead{\pagemark}% + \cfoot[\if@twoside\else\pagemark\fi]{}% + }% + }% +} +\scrlayerAddCsToInterface{sls@ps@style@KOMA-Script}{% + \@namedef{sls@ps@style@KOMA-Script}{% + \let\MakeMarkcase\@firstofone + \scrlayer@AtEndOfPackage{% + \pagestyle{scrheadings}% + \clearpairofpagestyles + \ohead{\if@twoside\headmark\fi}% + \chead{\if@twoside\else\headmark\fi}% + \ofoot[\if@twoside\pagemark\fi]{\if@twoside\pagemark\fi}% + \cfoot[\if@twoside\else\pagemark\fi]{\if@twoside\else\pagemark\fi}% + \scr@ifundefinedorrelax{KOMAClassName}{}{% + \ifstr{\KOMAClassName}{scrlttr2}{% +% \end{macrocode} +% We are using \Class{scrlttr2}, so we have to initialise the page style +% different: +% \begin{macrocode} + \clearpairofpagestyles + \lehead[\ifnum\@pageat\z@\pagemark\fi] + {\ifnum\@pageat\z@\pagemark\else\leftmark\fi}% + \lohead[\ifnum\@pageat\z@\pagemark\fi] + {\ifnum\@pageat\z@\pagemark\else\leftmark\fi}% + \chead[\ifnum\@pageat\@ne\pagemark\fi] + {\ifcase\@pageat \rightmark\or \pagemark\or \rightmark\fi}% + \rehead[\ifnum\@pageat\tw@\pagemark\fi] + {\ifcase\@pageat \leftmark\or \rightmark\or \pagemark + \else \rightmark\fi}% + \rohead[\ifnum\@pageat\tw@\pagemark\fi] + {\ifcase\@pageat \leftmark\or \rightmark\or \pagemark + \else \rightmark\fi}% + \lefoot[\ifnum\@pageat\thr@@\pagemark\fi] + {\ifnum\@pageat\thr@@\pagemark\fi}% + \cfoot[\ifnum\@pageat 4 \pagemark\fi] + {\ifnum\@pageat 4 \pagemark\fi}% + \refoot[\ifnum\@pageat 5 \pagemark\fi] + {\ifnum\@pageat 5 \pagemark\fi}% + }{}% + }% + }% + }% +} +%</options> +% \end{macrocode} +% \end{macro}^^A \sls@ps@style@KOMA-Script +% \end{macro}^^A \sls@ps@style@standard +% \end{option}^^A pagestyleset +% +% \begin{option}{komastyle} +% \begin{option}{standardstyle} +% These options are deprecated, but defined for compatibility with +% \Package{scrpage2}: +% \begin{macrocode} +%<*options> +\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{komastyle}{% + pagestyleset=KOMA-Script} +\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{standardstyle}{% + pagestyleset=standard} +%</options> +% \end{macrocode} +% \end{option}^^A standardstyle +% \end{option}^^A komastyle +% +% +% \section{Extended Mark Mechanisms} +% +% Package options \Option{markuppercase}, \Option{markusedcase}, and +% \Option{nouppercase} of package \Package{scrpage2} will be mapped to +% \KOMAScript{} option \Option{markcase}. +% +% \begin{option}{markuppercase} +% \begin{option}{markusedcase} +% \begin{option}{nouppercase} +% For compatibility with \Package{scrpage2}. +% \begin{macrocode} +%<*options> +\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{markuppercase}{markcase=upper} +\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{markusedcase}{markcase=used} +\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{nouppercase}{% + markcase=ignoreuppercase% +} +%</options> +% \end{macrocode} +% \end{option}^^A nouppercase +% \end{option}^^A markusedcase +% \end{option}^^A markuppercase +% +% +% \section{Expert Page Style Definition Interface} +% +% This is the low level interface of \Package{scrpage2} with +% \Macro{defpagestyle}, \Macro{newpagestyle}, \Macro{renewpagestyle}, and +% \Macro{providepagestyle}. We will also define is. In difference to +% \Package{scrpage2} layers are used. Following layers will be defined for +% each page style: +% \begin{description} +% \item[\texttt{\meta{page style name}.head.above.line}] line above the head +% \item[\texttt{\meta{page style name}.head.odd}] odd page head (only twoside) +% \item[\texttt{\meta{page style name}.head.even}] even page head (only +% twoside) +% \item[\texttt{\meta{page style name}.head.oneside}] single-side head (only +% oneside) +% \item[\texttt{\meta{page style name}.head.below}] line below the head +% \item[\texttt{\meta{page style name}.foot.above.line}] line above the footer +% \item[\texttt{\meta{page style name}.foot.odd}] odd page footer (only +% twoside) +% \item[\texttt{\meta{page style name}.foot.even}] even side footer (only +% twoside) +% \item[\texttt{\meta{page style name}.foot.oneside}] single-side footer (only +% oneside) +% \item[\texttt{\meta{page style name}.foot.below.line}] line below the footer +% (only oneside) +% \end{description} +% Note: \Package{scrpage2} also provides starred versions of the page style +% definition commands, doing the same like the starless versions. This has +% been done for compatibility reasons with deprecated \Package{scrpage2} and +% may be removed some times. The layer interface doesn't support this. +% +% \begin{macro}{\defpagestyle} +% \begin{description} +% \item[\Parameter{string}:] the name of the page style to be defined (must +% be fully expandable and expand to a string only). +% \item[\Parameter{head/foot definition}:] will be used to define the +% head (see \Macro{sls@defhead}). +% \item[\Parameter{head/foot definition}:] will be used to define the +% foot (see \Macro{sls@deffoot}). +% \end{description} +% See \Package{scrpage2} implementation. +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\defpagestyle{% + \newcommand*{\defpagestyle}[3]{% + \sls@defhead{#1}#2\@empty\@empty\@empty + \sls@deffoot{#1}#3\@empty\@empty\@empty + \DeclarePageStyleByLayers{#1}{% + #1.head.odd,#1.head.even,#1.head.oneside,% + #1.head.above.line,#1.head.below.line,% + #1.foot.odd,#1.foot.even,#1.foot.oneside,% + #1.foot.above.line,#1.foot.below.line% + }% + \edef\reserved@a{% + \noexpand\scrlayerOnAutoRemoveInterface[scrlayer-scrpage.sty]{% + \noexpand\DestroyLayer{#1.head.odd}% + \noexpand\DestroyLayer{#1.head.even}% + \noexpand\DestroyLayer{#1.head.oneside}% + \noexpand\DestroyLayer{#1.head.above.line}% + \noexpand\DestroyLayer{#1.head.below.line}% + \noexpand\DestroyLayer{#1.foot.odd}% + \noexpand\DestroyLayer{#1.foot.even}% + \noexpand\DestroyLayer{#1.foot.oneside}% + \noexpand\DestroyLayer{#1.foot.above.line}% + \noexpand\DestroyLayer{#1.foot.below.line}% + \noexpand\ifstr{\noexpand\currentpagestyle}{#1}{% + \noexpand\PackageWarning{scrlayer-scrpage}{% + page style `#1' not longer valid.\noexpand\MessageBreak + The page style has been defined using\noexpand\MessageBreak + interface `scrlayer-scrpage.sty', that\noexpand\MessageBreak + has been removed% + }% + }{}% + \noexpand\DestroyRealLayerPageStyle{#1}% + }% + }\reserved@a + }% +} +% \end{macrocode} +% \begin{macro}{\sls@defhead} +% \begin{macro}{\sls@@defhead} +% \begin{macro}{\sls@@@defhead} +% \begin{description} +% \item[\MParameter{dimensional expression}{dimensional expression}:] length +% and thickness of a line (ruler) above the page head. May be omitted and +% if so the values from option \Option{headtopline} will be used. +% \item[\Parameter{code}:] will be executed on even pages; used to define +% the contents of layer \texttt{\meta{page style name}.head.even}. +% \item[\Parameter{code}:] will be executed on odd pages within two-side +% layout; used to define the contents of layer \texttt{\meta{page style +% name}.head.odd}. +% \item[\Parameter{code}:] will be executed on single-side pages; used to +% define the contents of layer \texttt{\meta{page style +% name}.head.oneside}. +% \item[\MParameter{dimensional expression}{dimensional expression}:] length +% and thickness of a line (ruler) below the page head. May be omitted and +% if so the values from option \Option{headsepline} will be used. +% \end{description} +% Helper to define the head layers. +% \begin{macrocode} +\scrlayerAddToInterface\sls@defhead{% + \newcommand*\sls@defhead[1]{% + \@ifnextchar(%) + {\sls@@defhead{#1}}% + {\sls@@defhead{#1}(\sls@headabove@linelength,\sls@headabove@linethickness)}% + }% +} +\scrlayerAddToInterface\sls@@defhead{% + \def\sls@@defhead#1(#2,#3)#4#5#6{% + \@ifnextchar(%) + {\sls@@@defhead{#1}({#2},{#3}){#4}{#5}{#6}}% + {\sls@@@defhead{#1}% + ({#2},{#3})% + {#4}{#5}{#6}% + (\sls@headbelow@linelength,\sls@headbelow@linethickness)}% + }% +} +\scrlayerAddToInterface\sls@@@defhead{% + \def\sls@@@defhead#1(#2,#3)#4#5#6(#7,#8){% +% \end{macrocode} +% The lines: +% \begin{macrocode} + \DeclareLayer[% + background,% + hoffset=\sls@leftmargin{head},% + voffset=\sls@topmargin+\dp\strutbox,% + width=\sls@headwidth,% + height=0pt,% + align=bl,% + contents={% + {\normalfont\usekomafont{pageheadfoot}{\usekomafont{pagehead}{% + \sls@hf@rule{headtop}{#2}{#3}}}}% + }% + ]{#1.head.above.line}% + \DeclareLayer[% + background,% + hoffset=\sls@leftmargin{head},% + voffset=\sls@topmargin+\headheight-\ht\strutbox+#8,% + width=\sls@headwidth,% + height=0pt,% + align=tl,% + contents={% + {\normalfont\usekomafont{pageheadfoot}{\usekomafont{pagehead}{% + \sls@hf@rule{headsep}{#7}{#8}}}}% + }% + ]{#1.head.below.line}% +% \end{macrocode} +% The odd side, even side and one side: +% \begin{macrocode} + \DeclareLayer[% + background,evenpage,twoside,% + head,% + hoffset=\sls@leftmargin{head},% + width=\sls@headwidth,% + contents={% + \sls@secure@box\headheight{% + \normalfont\usekomafont{pageheadfoot}{\usekomafont{pagehead}{#4}}}}% + ]{#1.head.odd}% + \DeclareLayer[% + background,oddpage,twoside,% + head,% + hoffset=\sls@leftmargin{head},% + width=\sls@headwidth,% + contents={% + \sls@secure@box\headheight{% + \normalfont\usekomafont{pageheadfoot}{\usekomafont{pagehead}{#5}}}}% + ]{#1.head.even}% + \DeclareLayer[% + background,oddpage,oneside,% + head,% + hoffset=\sls@leftmargin{head},% + width=\sls@headwidth,% + contents={% + \sls@secure@box\headheight{% + \normalfont\usekomafont{pageheadfoot}{\usekomafont{pagehead}{#6}}}}% + ]{#1.head.oneside}% + }% +} +% \end{macrocode} +% \begin{macro}{\sls@deffoot} +% \begin{macro}{\sls@@deffoot} +% \begin{macro}{\sls@@@deffoot} +% \begin{description} +% \item[\MParameter{dimensional expression}{dimensional expression}:] length +% and thickness of a line (ruler) above the page footer. May be omitted +% and if so the values from option \Option{footsepline} will be used. +% \item[\Parameter{code}:] will be executed on even pages; used to define +% the contents of layer \texttt{\meta{page style name}.foot.even}. +% \item[\Parameter{code}:] will be executed on odd pages within two-side +% layout; used to define the contents of layer \texttt{\meta{page style +% name}.foot.odd}. +% \item[\Parameter{code}:] will be executed on single-side pages; used to +% define the contents of layer \texttt{\meta{page style +% name}.foot.oneside}. +% \item[\MParameter{dimensional expression}{dimensional expression}:] length +% and thickness of a line (ruler) below the page footer. May be omitted +% and if so the values from option \Option{footbotline} will be used. +% \end{description} +% Helper to define the foot layers. +% \begin{macrocode} +\scrlayerAddToInterface\sls@deffoot{% + \newcommand*\sls@deffoot[1]{% + \@ifnextchar(%) + {\sls@@deffoot{#1}}% + {\sls@@deffoot{#1}(\sls@footabove@linelength,\sls@footabove@linethickness)}% + }% +} +\scrlayerAddToInterface\sls@@deffoot{% + \def\sls@@deffoot#1(#2,#3)#4#5#6{% + \@ifnextchar(%) + {\sls@@@deffoot{#1}({#2},{#3}){#4}{#5}{#6}}% + {\sls@@@deffoot{#1}% + ({#2},{#3})% + {#4}{#5}{#6}% + (\sls@footbelow@linelength,\sls@footbelow@linethickness)}% + }% +} +\scrlayerAddToInterface\sls@@@deffoot{% + \def\sls@@@deffoot#1(#2,#3)#4#5#6(#7,#8){% +% \end{macrocode} +% The lines: +% \begin{macrocode} + \DeclareLayer[% + foreground,% + hoffset=\sls@leftmargin{foot},% + voffset=\sls@topmargin + +\headheight+\headsep + +\textheight + +\footskip-\footheight + +2\dp\strutbox,% + width=\sls@footwidth,% + height=0pt,% + align=bl,% + contents={% + {\normalfont\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{% + \sls@hf@rule{footsep}{#2}{#3}}}}% + }% + ]{#1.foot.above.line}% + \DeclareLayer[% + foreground,% + hoffset=\sls@leftmargin{foot},% + voffset=\sls@topmargin + +\headheight+\headsep + +\textheight + +\footskip + +2\dp\strutbox + +#8,% + width=\sls@footwidth,% + height=0pt,% + align=bl,% + contents={% + {\normalfont\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{% + \sls@hf@rule{footbot}{#7}{#8}}}}% + }% + ]{#1.foot.below.line}% +% \end{macrocode} +% The odd side, even side and one side: +% \begin{macrocode} + \DeclareLayer[% + foreground,evenpage,twoside,% + foot,% + hoffset=\sls@leftmargin{foot},% + width=\sls@footwidth,% + contents={% + \sls@secure@box\footheight{% + \normalfont\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{#4}}}}% + ]{#1.foot.odd}% + \DeclareLayer[% + foreground,oddpage,twoside,% + foot,% + hoffset=\sls@leftmargin{foot},% + width=\sls@footwidth,% + contents={% + \sls@secure@box\footheight{% + \normalfont\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{#5}}}}% + ]{#1.foot.even}% + \DeclareLayer[% + foreground,oddpage,oneside,% + foot,% + hoffset=\sls@leftmargin{foot},% + width=\sls@footwidth,% + contents={% + \sls@secure@box\footheight{% + \normalfont\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{#6}}}}% + ]{#1.foot.oneside}% + }% +} +% \end{macrocode} +% \begin{macro}{\sls@secure@box} +% \begin{description} +% \item[\Parameter{length}:] a \LaTeX{} length, that gives the maximum +% height + depth of the \meta{content}. It has to be either +% \cs{headheight} or \cs{footheight}. +% \item[\Parameter{content}:] what should be output (inside the box). +% \end{description} +% Note, that several length may be changed, to fit. +% \begin{macrocode} +\scrlayerAddToInterface\sls@secure@box{% + \newcommand*{\sls@secure@box}[2]{% + \begingroup + \setbox\z@\vbox{% + \ifsls@leavevmode\leavevmode\expandafter\ignorespaces\fi + #2% + }% + \ifdim #1<\dimexpr \ht\z@+\dp\z@\relax + \PackageWarning{scrlayer-scrpage}{% + \string#1 to low.\MessageBreak + At least \the\dimexpr \ht\z@+\dp\z@\relax\space needed,\MessageBreak + but only \the#1 found.\MessageBreak + I'll enlarge \string#1, for further\MessageBreak + processing, but you should do this yourself,\MessageBreak + e.g., + \scr@ifundefinedorrelax{geometry}{% + \scr@ifundefinedorrelax{typearea}{% + using\MessageBreak + \space\space\string\setlength{\string#1}{% + \the\dimexpr \ht\z@+\dp\z@\relax}\MessageBreak + in your preamble% + }{% + setting typearea's option\MessageBreak + `\expandafter\@gobble\string#1=\the\dimexpr \ht\z@+\dp\z@\relax'% + }% + }{% + \ifx #1\headheight + setting geometry's option\MessageBreak + `head=\the\dimexpr \ht\z@+\dp\z@\relax'% + \else + using\MessageBreak + \space\space\string\setlength{\string#1}{% + \the\dimexpr \ht\z@+\dp\z@\relax}\MessageBreak + in your preamble% + \fi + }% + .\MessageBreak + I'll also + \ifx #1\headheight decrease \string\topmargin + \else increase \string\footskip\fi + }% + \@tempdima\dimexpr \ht\z@+\dp\z@\relax + \ifx #1\headheight + \global\advance\topmargin by \dimexpr #1-(\ht\z@+\dp\z@)\relax + \dp\z@\dimexpr \dp\z@+\ht\z@+\dp\z@-\headheight\relax + \else + \global\advance\footskip by \dimexpr \ht\z@+\dp\z@-#1\relax + \fi + \global#1\@tempdima + \fi + \usebox\z@ + \endgroup + }% +} +%</body> +% \end{macrocode} +% \begin{option}{hmode} +% Switch automatically to the horizontal mode before setting a page head or +% page footer element +% \begin{macrocode} +%<*options> +\KOMA@ifkey{hmode}{sls@leavevmode} +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@hmode}% +\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@hmode@default}% +\scrlayer@AddCsToInterface{sls@leavevmode@linetrue} +\scrlayer@AddCsToInterface{sls@leavevmode@linefalse} +%</options> +% \end{macrocode} +% \end{option} +% \end{macro}^^A \sls@secure@box +% \end{macro}^^A \sls@@@deffoot +% \end{macro}^^A \sls@@deffoot +% \end{macro}^^A \sls@deffoot +% \end{macro}^^A \sls@@@defhead +% \end{macro}^^A \sls@@defhead +% \end{macro}^^A \sls@defhead +% \begin{macro}{\headfont} +% \begin{macro}{\scr@fnt@pagehead} +% \begin{macro}{\scr@fnt@wrn@pagehead} +% \begin{macro}{\scr@fnt@pageheadfoot} +% The low level page head font command. It is deprecated to redefine or use +% this and it may already be defined. +% \begin{macrocode} +%<*body> +\@ifundefined{scr@fnt@pagehead}{% + \@ifundefined{@pageheadfont}{% + \newkomafont{pagehead}{}% + \scrlayer@AddCsToInterface{@pageheadfont}% + }{% + \newcommand*{\scr@fnt@pagehead}{\@pageheadfont}% + }% + \scrlayer@AddCsToInterface{scr@fnt@pagehead}% +}{} +\@ifundefined{scr@fnt@pageheadfoot}{% + \newcommand*{\scr@fnt@pageheadfoot}{\headfont}% + \scrlayer@AddCsToInterface{scr@fnt@pageheadfoot}% + \@ifundefined{headfont}{% + \newcommand*{\headfont}{\normalcolor\slshape}% + }{} +}{} +% \end{macrocode} +% \end{macro}^^A \scr@fnt@pageheadfoot +% \end{macro}^^A \scr@fnt@wrn@pagehead +% \end{macro}^^A \scr@fnt@pagehead +% \end{macro}^^A \headfont +% +% \begin{macro}{\footfont} +% \begin{macro}{\scr@fnt@pagefoot} +% \begin{macro}{\scr@fnt@wrn@pagefoot} +% The low level page footer font command. It is deprecated to redefine or use +% this and it may already be defined. +% \begin{macrocode} +\@ifundefined{scr@fnt@pagefoot}{% + \newcommand*{\scr@fnt@pagefoot}{\footfont}% + \scrlayer@AddCsToInterface{scr@fnt@pagefoot}% + \@ifundefined{footfont}{% + \newcommand*{\footfont}{}% + \scrlayer@AddCsToInterface{footfont}% + }{}% + \let\scr@fnt@wrn@pagefoot\relax +}{} +% \end{macrocode} +% \end{macro}^^A \scr@fnt@wrn@pagefoot +% \end{macro}^^A \scr@fnt@pagefoot +% \end{macro}^^A \footfont +% +% \begin{macro}{\sls@hf@rule} +% \begin{description} +% \item[\Parameter{rule name}:] one of \texttt{headtop}, \texttt{headsep}, +% \texttt{footsep}, or \texttt{footbot} +% \item[\Parameter{dimensional expression}:] the line length (width) +% \item[\Parameter{dimensional expression}:] the line thickness (height) +% \end{description} +% Helper to draw the line. +% \begin{macrocode} +\scrlayerAddToInterface\sls@hf@rule{% + \newcommand*\sls@hf@rule[3]{% + \begingroup + \normalfont\usekomafont{#1line}{% + \vbox to \z@{% + \kern -\dimexpr #3\relax + \ifnum \sls@hfline@adjust>\z@ \@tempswatrue \else \@tempswafalse\fi + \if@twoside\ifodd\value{page}\else + \ifnum \sls@hfline@adjust<\tw@ \@tempswatrue\else \@tempswafalse\fi + \fi\fi + \if@tempswa + \hskip \z@\@plus 1fill\@minus \paperwidth + \fi + \vrule \@width\dimexpr #2\relax \@height\dimexpr #3\relax \@depth\z@ + \ifnum \sls@hfline@adjust<\tw@ \@tempswatrue\else \@tempswafalse\fi + \if@twoside\ifodd\value{page}\else + \ifnum \sls@hfline@adjust>\z@ \@tempswatrue \else \@tempswafalse\fi + \fi\fi + \if@tempswa + \hskip \z@\@plus 1fill\@minus \paperwidth\null + \fi + }% + }% + \endgroup + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@hf@rule +% \begin{macro}{\sls@topmargin} +% \begin{macro}{\sls@leftmargin} +% Two simple helper macros: +% \begin{macrocode} +\scrlayerAddToInterface\sls@topmargin{% + \newcommand*{\sls@topmargin}{\dimexpr\topmargin+1in\relax}% +} +\scrlayerAddToInterface\sls@leftmargin{% + \newcommand*{\sls@leftmargin}[1]{% + \dimexpr + \if@twoside + \ifodd\value{page} + \oddsidemargin+\csname sls@odd#1shift\endcsname + \else + \evensidemargin+\csname sls@even#1shift\endcsname + \fi + \else + \oddsidemargin+\csname sls@odd#1shift\endcsname + \fi + +1in\relax + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \sls@leftmargin +% \end{macro}^^A \sls@topmargin +% \end{macro}^^A \defpagestyle +% +% \begin{macro}{\newpagestyle} +% For the parameters see \Macro{defpagestyle}. +% Define only, if not already defined: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\newpagestyle{% + \newcommand*\newpagestyle[3]{% + \@ifundefined{ps@#1}{\defpagestyle{#1}{#2}{#3}}{% + \PackageError{scrlayer-scrpage}{Page style `#1' already defined}{% + Only not yet defined page style may be defined using + \string\newpagestyle.\MessageBreak + You may use either \string\renewpagestyle, \string\providepagestyle, + or \string\defpagestyle\MessageBreak + with already defined page styles.\MessageBreak + If you'll continue, your command will be ignored.% + }% + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \newpagestyle +% +% \begin{macro}{\renewpagestyle} +% For the parameters see \Macro{defpagestyle}. +% Define only, if not already defined: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\renewpagestyle{% + \newcommand*\renewpagestyle[3]{% + \@ifundefined{ps@#1}{% + \PackageError{scrlayer-scrpage}{Undefined page style `#1'}{% + Only already defined page style may be re-defined using + \string\renewpagestyle.\MessageBreak + You may use either \string\newpagestyle, \string\providepagestyle, + or \string\defpagestyle\MessageBreak + with not yet defined page styles.\MessageBreak + If you'll continue, your command will be ignored.% + }% + }{% + \defpagestyle{#1}{#2}{#3}% + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \renewpagestyle +% +% \begin{macro}{\providepagestyle} +% For the parameters see \Macro{defpagestyle}. +% Define only, if not already defined: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\providepagestyle{% + \newcommand*\providepagestyle[3]{% + \@ifundefined{ps@#1}{% + \defpagestyle{#1}{#2}{#3}% + }{% +%<*trace> + \PackageInfo{scrlayer-scrpage}{% + page style `#1' already defined.\MessageBreak + New definition ignored% + }% +%</trace> + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \providepagestyle +% +% +% \section{User Page Style Definition Interface} +% +% This is the mid-level interface of \Package{scrpage2} with +% \Macro{deftripstyle}. As in \Package{scrpage2} we simply use the expert page +% style definition interface to define the new user interface commands. But +% here the useless starred versions will not longer be supported. So users of +% them have to remove the star (nothing else). +% +% \begin{macro}{\deftriplepagestyle} +% \begin{macro}{\newtriplepagestyle} +% \begin{macro}{\renewtriplepagestyle} +% \begin{macro}{\providetriplepagestyle} +% \begin{macro}{\deftripstyle} +% \begin{description} +% \item[\Parameter{string}:] the name of the page style to be defined (must +% be fully expandable and expand to a string only). +% \item[\OParameter{dimensional expression}:] thickness of a horizontal line +% above the page head and below the page foot (default: 0\,pt). +% \item[\OParameter{dimensional expression}:] thickness of a horizontal line +% below the page head and above the page foot (default: 0\,pt). +% \item[\Parameter{code}:] will be expanded left aligned at head of odd +% pages (with one-side layout all pages are odd) and right aligned at head +% of even pages. +% \item[\Parameter{code}:] will be expanded centered at head of odd +% and even pages. +% \item[\Parameter{code}:] will be expanded right aligned at head of odd +% pages (with one-side layout all pages are odd) and left aligned at head +% of even pages. +% \item[\Parameter{code}:] will be expanded left aligned at footer of odd +% pages (with one-side layout all pages are odd) and right aligned at +% footer of even pages. +% \item[\Parameter{code}:] will be expanded centered at footer of odd +% and even pages. +% \item[\Parameter{code}:] will be expanded right aligned at footer of odd +% pages (with one-side layout all pages are odd) and left aligned at +% footer of even pages. +% \end{description} +% See \Package{scrpage2}, but: +% While the starred version of \Macro{deftripstyle} is deprecated for several +% years and hasn't been described at the manual, it will not longer be +% defined. Additional commands have been added. +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface{\deftriplepagestyle}{% + \newcommand*{\deftriplepagestyle}[1]{% + \let\@tempa\defpagestyle + \scrlayer@triplestyle{#1}% + }% +} +\scrlayerAddToInterface{\newtriplepagestyle}{% + \newcommand*{\newtriplepagestyle}[1]{% + \let\@tempa\newpagestyle + \scrlayer@triplestyle{#1}% + }% +} +\scrlayerAddToInterface{\renewtriplepagestyle}{% + \newcommand*{\renewtriplepagestyle}[1]{% + \let\@tempa\renewpagestyle + \scrlayer@triplestyle{#1}% + }% +} +\scrlayerAddToInterface{\providetriplepagestyle}{% + \newcommand*{\providetriplepagestyle}[1]{% + \let\@tempa\providepagestyle + \scrlayer@triplestyle{#1}% + }% +} +% \end{macrocode} +% \begin{macro}{\scrlayer@triplestyle} +% \begin{macro}{\scrlayer@@triplestyle} +% \begin{macro}{\scrlayer@@@triplestyle} +% Helpers, that do the real work. Parameters are same, but \cs{reserved@a} has +% to be one of \Macro{defpagestyle}, \Macro{newpagestyle}, +% \Macro{renewpagestyle}, or \Macro{providepagestyle}. +% \begin{macrocode} +\scrlayerAddToInterface\scrlayer@triplestyle{% + \def\scrlayer@triplestyle#1{% + \@ifnextchar[%] + {\scrlayer@@triplestyle{#1}}% + {\scrlayer@@triplestyle{#1}[\z@]}% + } +} +\scrlayerAddToInterface\scrlayer@@triplestyle{% + \def\scrlayer@@triplestyle#1[#2]{% + \@ifnextchar[%] + {\scrlayer@@@triplestyle{#1}[#2]}% + {\scrlayer@@@triplestyle{#1}[\z@][#2]}% + }% +} +\scrlayerAddToInterface\scrlayer@@@triplestyle{% + \def\scrlayer@@@triplestyle#1[#2][#3]#4#5#6#7#8#9{% + \@tempa{#1}{% + (\sls@headwidth,#2)% + {% + \makebox[\z@][l]{#6}\hfill + \makebox[\z@][c]{#5}\hfill + \makebox[\z@][r]{#4}% + }{% + \makebox[\z@][l]{#4}\hfill + \makebox[\z@][c]{#5}\hfill + \makebox[\z@][r]{#6}% + }{% + \makebox[\z@][l]{#4}\hfill + \makebox[\z@][c]{#5}\hfill + \makebox[\z@][r]{#6}% + }% + (\sls@headwidth,#3)% + }{% + (\sls@footwidth,#3)% + {% + \makebox[\z@][l]{#9}\hfill + \makebox[\z@][c]{#8}\hfill + \makebox[\z@][r]{#7}% + }{% + \makebox[\z@][l]{#7}\hfill + \makebox[\z@][c]{#8}\hfill + \makebox[\z@][r]{#9}% + }{% + \makebox[\z@][l]{#7}\hfill + \makebox[\z@][c]{#8}\hfill + \makebox[\z@][r]{#9}% + }% + (\sls@footwidth,#2)% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \scrlayer@@@triplestyle +% \end{macro}^^A \scrlayer@@triplestyle +% \end{macro}^^A \scrlayer@triplestyle +% \begin{macrocode} +\scrlayerAddToInterface{\deftripstyle}{% + \newcommand*{\deftripstyle}{% + \PackageWarning{scrlayer-scrpage}{% + Command \string\deftripstyle\space is deprecate.\MessageBreak + You should replace it by \string\deftriplepagestyle,\MessageBreak + e.g.,% + }% + \let\deftripstyle\deftriplepagestyle + \deftripstyle + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \deftripstyle +% \end{macro}^^A \providetriplepagestyle +% \end{macro}^^A \renewtriplepagestyle +% \end{macro}^^A \newtriplepagestyle +% \end{macro}^^A \deftriplepagestyle +% +% +% \section{Pre-defined Page Styles Interface} +% +% This is the high-level interface of \Package{scrpage2} with the page style +% \Pagestyle{scrheadings}, \Pagestyle{scrplain}, and +% \Pagestyle{useheadings}. Those will work as expected but will also be +% extended to support definition of additional styles using the same +% interface. +% +% \begin{macro}{\defpairofpagestyles} +% \begin{description} +% \item[\OParameter{string}:] name of a parent page style, that will be used +% to initialise the new page style (must be fully expandable and expand to +% the name of a page style). +% \item[\Parameter{string}:] name the page style to be defined (must be +% fully expandable and expand to the name of a page style). +% \item[\Parameter{code}:] several commands of \Macro{ihead}, \Macro{chead}, +% \Macro{ohead}, \Macro{lehead}, \Macro{lohead}, \Macro{cohead}, +% \Macro{rehead}, \Macro{cehead}, \Macro{rohead}, \Macro{ifoot}, +% \Macro{cfoot}, \Macro{ofoot}, \Macro{lefoot}, \Macro{cefoot}, +% \Macro{lofoot}, \Macro{refoot}, \Macro{cofoot}, \Macro{rofoot}, +% \Macro{clearscrheadfoot}, \Macro{clearscrheadings}, +% \Macro{clearscrplain}. +% \end{description} +% Two page styles will be defined using \Macro{defpagestyle}, page style named +% with the second argument and page style with the same name but an additional +% prefix ``\texttt{plain.}''. This will be activated automatically to be the +% plain page style when the first page style will be used. If first argument +% is used this pair of page styles will be used to initialise the head and +% footer of the new. All the other commands are used to define the initial +% fields. Note, if one of those page styles is active, all further commands +% (see 3rd argument) depend on the active page style. If no one is active, +% they depend on page style \texttt{scrheadings}. +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\defpairofpagestyles{% + \newcommand*{\defpairofpagestyles}[3][]{% + \def\reserved@a##1##2##3##4##5##6##7\@nil{##1##2##3##4##5##6}% + \edef\reserved@a{\expandafter\reserved@a #2xxxxxx\@nil}% + \ifstr\reserved@a{plain.}{% + \PackageError{scrlayer-scrpage}{plain page style `#2' not allowed}{% + You may not define a plain page style using + \string\defpairofpagestyles, \string\newpairofpagestyles, + \string\renewpairofpagestyles, or\MessageBreak + \string\providepairofpagestyles. I'd suggest to simply define the + corresponding\MessageBreak + non-plain page style to also define the plain one.\MessageBreak + If you'll continue, your command will be ignored.}% + }{% + \sls@init@pair@page@style*{#2}% + \sls@init@pair@page@style*{plain.#2}% + \ifx\relax #1\relax\else + \scr@ifundefinedorrelax{sls@ps@#1@even@left@head}{% + \PackageError{scrlayer-scrpage}{`#1' not a pair page style}{% + Only pair page styles may be used to initialise new pairs of page + styles. So\MessageBreak + optional argument of \string\defpairofpagestyles, + \string\newpairofpagestyles,\MessageBreak + \string\renewpairofpagestyles, or \string\providepairofpagestyle has + to be a pair\MessageBreak + page style or should be unused.\MessageBreak + If you'll continue, the initialisation will be ignored.}% + }{% + \sls@init@pair@page@style{#2}{#1}% + \scr@ifundefinedorrelax{sls@ps@plain.#1@even@left@head}{% + \sls@init@pair@page@style{plain.#2}{#1}% + }{% + \sls@init@pair@page@style{plain.#2}{plain.#1}% + }% + }% + \fi + \edef\reserved@a{% + \noexpand\scrlayerOnAutoRemoveInterface[scrlayer-scrpage.sty]{% + \noexpand\sls@init@pair@page@style**{#2}% + \noexpand\sls@init@pair@page@style**{plain.#2}% + \noexpand\expandafter\noexpand\ifx\noexpand + \csname ps@plain.#2\noexpand\endcsname\noexpand\ps@plain + \noexpand\PackageWarning{scrlayer-scrpage}{% + page style `#2' not longer valid.\noexpand\MessageBreak + This was the current plain page style.\noexpand\MessageBreak + Making current plain page style empty.\noexpand\MessageBreak + The page style has been defined using\noexpand\MessageBreak + interface `scrlayer-scrpage.sty', that\noexpand\MessageBreak + has been removed% + }% + \noexpand\def\noexpand\ps@plain{% + \noexpand\def\noexpand\@oddhead{}\noexpand\def\noexpand\@evenhead{}% + \noexpand\def\noexpand\@oddhead{}\noexpand\def\noexpand\@evenhead{}% + }% + \noexpand\fi + }% + }\reserved@a + \sls@def@pair@page@style@member{#2}% + \AddToLayerPageStyleOptions{#2}{% + onselect={% + \expandafter\let\expandafter\ps@plain\csname ps@plain.#2\endcsname + \expandafter\let\expandafter\ps@headings\csname ps@#2\endcsname + \def\sls@currentheadings{#2}% + \def\sls@currentplain{plain.#2}% + #3% + }% + }% + \sls@def@pair@page@style@member{plain.#2}% + \AddToLayerPageStyleOptions{plain.#2}{% + onselect={% + \expandafter\let\expandafter\ps@plain\csname ps@plain.#2\endcsname + \expandafter\let\expandafter\ps@headings\csname ps@#2\endcsname + \def\sls@currentheadings{#2}% + \def\sls@currentplain{plain.#2}% + #3% + },% + oninit={% + \expandafter + \ifx\csname ifsls@plain@head@above@line\expandafter\endcsname + \csname iftrue\endcsname\else + \let\sls@headabove@linelength\z@ + \let\sls@headabove@linethickness\z@ + \fi + \expandafter + \ifx\csname ifsls@plain@head@below@line\expandafter\endcsname + \csname iftrue\endcsname\else + \let\sls@headbelow@linelength\z@ + \let\sls@headbelow@linethickness\z@ + \fi + \expandafter + \ifx\csname ifsls@plain@foot@above@line\expandafter\endcsname + \csname iftrue\endcsname\else + \let\sls@footabove@linelength\z@ + \let\sls@footabove@linethickness\z@ + \fi + \expandafter + \ifx\csname ifsls@plain@foot@below@line\expandafter\endcsname + \csname iftrue\endcsname\else + \let\sls@footbelow@linelength\z@ + \let\sls@footbelow@linethickness\z@ + \fi + }% + }% + }% + }% +} +% \end{macrocode} +% \begin{macro}{\sls@currentheadings} +% \begin{macro}{\sls@currentplain} +% These little helpers will be set up at selection of each pair page style and +% stores the last activated page style pair of the scope. +% \begin{macrocode} +\scrlayerAddToInterface\sls@currentheadings{% + \newcommand*\sls@currentheadings{scrheadings}% +} +\scrlayerAddToInterface\sls@currentplain{% + \newcommand*\sls@currentplain{plain.scrheadings}% +} +% \end{macrocode} +% \end{macro}^^A \sls@currentplain +% \end{macro}^^A \sls@currentheadings +% \begin{macro}{\sls@init@pair@page@style} +% \begin{macro}{\sls@init@@pair@page@style} +% \begin{description} +% \item[\Parameter{string}:] the name of the page style, that should be +% initialised to be one member of a page style pair. +% \item[\Parameter{string}:] the name of a member of a page style pair, that +% should be used to initialise one the member of a page style pair from +% first argument. +% \end{description} +% These are two little helpers for \Macro{defpairofpagestyles}. +% The first command has two starred versions. With one star the commands for +% the page style will be initialised to \Macro{@empty}, with two stars they +% will become \LaTeX-undefined (\Macro{relax}). +% +% Note also, that the second argument may either be the plain or the non-plain +% member of the page style pair. +% \begin{macrocode} +\scrlayerAddToInterface\sls@init@pair@page@style{% + \newcommand*{\sls@init@pair@page@style}{% + \@ifstar {% + \@ifstar {% + \sls@let@pair@page@style\relax + }{% + \sls@let@pair@page@style\@empty + } + }{% + \sls@init@@pair@page@style + }% + }% +} +\scrlayerAddToInterface\sls@init@@pair@page@style{% + \newcommand*{\sls@init@@pair@page@style}[2]{% + \expandafter\let\csname sls@ps@#1@even@left@head\expandafter\endcsname + \csname sls@ps@#2@even@left@head\endcsname + \expandafter\let\csname sls@ps@#1@even@middle@head\expandafter\endcsname + \csname sls@ps@#2@even@middle@head\endcsname + \expandafter\let\csname sls@ps@#1@even@right@head\expandafter\endcsname + \csname sls@ps@#2@even@right@head\endcsname + \expandafter\let\csname sls@ps@#1@odd@left@head\expandafter\endcsname + \csname sls@ps@#2@odd@left@head\endcsname + \expandafter\let\csname sls@ps@#1@odd@middle@head\expandafter\endcsname + \csname sls@ps@#2@odd@middle@head\endcsname + \expandafter\let\csname sls@ps@#1@odd@right@head\expandafter\endcsname + \csname sls@ps@#2@odd@right@head\endcsname + \expandafter\let\csname sls@ps@#1@even@left@foot\expandafter\endcsname + \csname sls@ps@#2@even@left@foot\endcsname + \expandafter\let\csname sls@ps@#1@even@middle@foot\expandafter\endcsname + \csname sls@ps@#2@even@middle@foot\endcsname + \expandafter\let\csname sls@ps@#1@even@right@foot\expandafter\endcsname + \csname sls@ps@#2@even@right@foot\endcsname + \expandafter\let\csname sls@ps@#1@odd@left@foot\expandafter\endcsname + \csname sls@ps@#2@odd@left@foot\endcsname + \expandafter\let\csname sls@ps@#1@odd@middle@foot\expandafter\endcsname + \csname sls@ps@#2@odd@middle@foot\endcsname + \expandafter\let\csname sls@ps@#1@odd@right@foot\expandafter\endcsname + \csname sls@ps@#2@odd@right@foot\endcsname + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@init@@pair@page@style +% \begin{macro}{\sls@let@pair@page@style} +% \begin{description} +% \item[\Parameter{command}:] a single command used to initialise the +% commands of the page style commands. +% \item[\Parameter{string}:] the name of a member of a page style pair, that +% should be used to initialise one the member of a page style pair from +% first argument. +% \end{description} +% A little helper for \Macro{sls@init@pair@page@style}. +% \begin{macrocode} +\scrlayerAddToInterface\sls@let@pair@page@style{% + \newcommand*{\sls@let@pair@page@style}[2]{% + \expandafter\let\csname sls@ps@#2@even@left@head\endcsname #1% + \expandafter\let\csname sls@ps@#2@even@middle@head\endcsname #1% + \expandafter\let\csname sls@ps@#2@even@right@head\endcsname #1% + \expandafter\let\csname sls@ps@#2@odd@left@head\endcsname #1% + \expandafter\let\csname sls@ps@#2@odd@middle@head\endcsname #1% + \expandafter\let\csname sls@ps@#2@odd@right@head\endcsname #1% + \expandafter\let\csname sls@ps@#2@even@left@foot\endcsname #1% + \expandafter\let\csname sls@ps@#2@even@middle@foot\endcsname #1% + \expandafter\let\csname sls@ps@#2@even@right@foot\endcsname #1% + \expandafter\let\csname sls@ps@#2@odd@left@foot\endcsname #1% + \expandafter\let\csname sls@ps@#2@odd@middle@foot\endcsname #1% + \expandafter\let\csname sls@ps@#2@odd@right@foot\endcsname #1% + }% +} +% \end{macrocode} +% \end{macro}^^A \sls@let@pair@page@style +% \end{macro}^^A \sls@init@pair@page@style +% \begin{macro}{\sls@def@pair@page@style@member} +% \begin{description} +% \item[\Parameter{string}:] name of the page style to be defined. +% \end{description} +% A little helper for \Macro{defpairofpagestyles}. +% \begin{macrocode} +\scrlayerAddToInterface\sls@def@pair@page@style@member{% + \newcommand*{\sls@def@pair@page@style@member}[1]{% + \defpagestyle{#1}{% + {% + \makebox[0pt][l]{\parbox{\sls@headwidth}{\raggedright + \strut\@nameuse{sls@ps@#1@even@left@head}\strut}}% + \parbox{\sls@headwidth}{\centering + \strut\@nameuse{sls@ps@#1@even@middle@head}\strut}% + \makebox[0pt][r]{\parbox{\sls@headwidth}{\raggedleft + \strut\@nameuse{sls@ps@#1@even@right@head}\strut}}% + }{% + \makebox[0pt][l]{\parbox{\sls@headwidth}{\raggedright + \strut\@nameuse{sls@ps@#1@odd@left@head}\strut}}% + \parbox{\sls@headwidth}{\centering + \strut\@nameuse{sls@ps@#1@odd@middle@head}\strut}% + \makebox[0pt][r]{\parbox{\sls@headwidth}{\raggedleft + \strut\@nameuse{sls@ps@#1@odd@right@head}\strut}}% + }{% + \makebox[0pt][l]{\parbox{\sls@headwidth}{\raggedright + \strut\@nameuse{sls@ps@#1@odd@left@head}\strut}}% + \parbox{\sls@headwidth}{\centering + \strut\@nameuse{sls@ps@#1@odd@middle@head}\strut}% + \makebox[0pt][r]{\parbox{\sls@headwidth}{\raggedleft + \strut\@nameuse{sls@ps@#1@odd@right@head}\strut}}% + }% + }{% + {% + \makebox[0pt][l]{\parbox{\sls@footwidth}{\raggedright + \strut\@nameuse{sls@ps@#1@even@left@foot}\strut}}% + \parbox{\sls@footwidth}{\centering + \strut\@nameuse{sls@ps@#1@even@middle@foot}\strut}% + \makebox[0pt][r]{\parbox{\sls@footwidth}{\raggedleft + \strut\@nameuse{sls@ps@#1@even@right@foot}\strut}}% + }{% + \makebox[0pt][l]{\parbox{\sls@footwidth}{\raggedright + \strut\@nameuse{sls@ps@#1@odd@left@foot}\strut}}% + \parbox{\sls@footwidth}{\centering + \strut\@nameuse{sls@ps@#1@odd@middle@foot}\strut}% + \makebox[0pt][r]{\parbox{\sls@footwidth}{\raggedleft + \strut\@nameuse{sls@ps@#1@odd@right@foot}\strut}}% + }{% + \makebox[0pt][l]{\parbox{\sls@footwidth}{\raggedright + \strut\@nameuse{sls@ps@#1@odd@left@foot}\strut}}% + \parbox{\sls@footwidth}{\centering + \strut\@nameuse{sls@ps@#1@odd@middle@foot}\strut}% + \makebox[0pt][r]{\parbox{\sls@footwidth}{\raggedleft + \strut\@nameuse{sls@ps@#1@odd@right@foot}\strut}}% + }% + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \sls@def@pair@page@style@member +% \end{macro}^^A \defpairofpagestyles +% +% \begin{macro}{\newpairofpagestyles} +% \begin{macro}{\renewpairofpagestyles} +% \begin{macro}{\providepairofpagestyles} +% See \Macro{defpairofpagestyles} for the arguments. +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\newpairofpagestyles{% + \newcommand*{\newpairofpagestyles}[3][]{% + \scr@ifundefinedorrelax{ps@#2}{% + \@ifundefined{ps@plain.#2}{\defpairofpagestyles[#1]{#2}{#3}}{% + \PackageError{scrlayer-scrpage}{% + Plain page style of `#2' already defined}{% + You may only define a new pair of page styles, if neither the style + itself\MessageBreak + nor it's plain page style has already been defined.\MessageBreak + You may use only \string\defpairofpagestyles\space or + \string\providepairofpagestyles\space with partly\MessageBreak + already defined page styles.\MessageBreak + If you'll continue, your command will be ignored.% + }% + }% + }{% + \PackageError{scrlayer-scrpage}{% + Page style `#2' already defined}{% + You may only define a new pair of page styles, if neither the style + itself\MessageBreak + nor it's plain page style has already been defined.\MessageBreak + You may use either \string\renewpairsofpagestyles, + \string\defpairofpagestyles, or\MessageBreak + \string\providepairofpagestyles\space with already defined page + styles.\MessageBreak + If you'll continue, your command will be ignored.% + }% + }% + }% +} +\scrlayerAddToInterface\renewpairofpagestyles{% + \newcommand*{\renewpairofpagestyles}[3][]{% + \scr@ifundefinedorrelax{ps@#2}{% + \PackageError{scrlayer-scrpage}{% + Undefined page style `#2'}{% + You may only redefine existing pairs of page styles. You may use + either\MessageBreak + \string\newpairsofpagestyles, \string\defpairofpagestyles, or + \string\providepairofpagestyles\MessageBreak + with not yet defined page styles.\MessageBreak + If you'll continue, your command will be ignored.% + }% + }{% + \@ifundefined{ps@plain.#2}{% + \PackageError{scrlayer-scrpage}{% + Undefined plain page style of `#2'}{% + You may only redefine existing pairs of page styles. You may use + either\MessageBreak + \string\defpairofpagestyles\space or + \string\providepairofpagestyles\space with partly already + defined\MessageBreak + page styles.\MessageBreak + If you'll continue, your command will be ignored.% + }% + }{\defpairofpagestyles[#1]{#2}{#3}}% + }% + }% +} +\scrlayerAddToInterface\providepairofpagestyles{% + \newcommand*{\providepairofpagestyles}[3][]{% + \scr@ifundefinedorrelax{ps@#2}{% + \@ifundefined{ps@plain.#2}{\defpairofpagestyles[#1]{#2}{#3}}{% +%<*trace> + \PackageInfo{scrlayer-scrpage}{% + Plain page style of `#2' already\MessageBreak + defined. Definition ignored}% +%</trace> + }% + }{% +%<*trace> + \PackageInfo{scrlayer-scrpage}{% + Page style of `#2' already defined.\MessageBreak + Definition ignored}% +%</trace> + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \providepairofpagestyles +% \end{macro}^^A \renewpairofpagestyles +% \end{macro}^^A \newpairofpagestyles +% +% \begin{macro}{\ps@scrheadings} +% \begin{macro}{\ps@plain.scrheadings} +% We have one predefined pair: \texttt{scrheadings} with plain page style +% \texttt{plain.scrheadings}. +% \begin{macrocode} +%<*body> +\newpairofpagestyles{scrheadings}{}% +% \end{macrocode} +% \begin{macro}{\ps@scrplain} +% But with package \Package{scrpage2} the plain page style was +% \texttt{scrplain}. So we make a kind of alias: +% \begin{macrocode} +\DeclarePageStyleAlias{scrplain}{plain.scrheadings} +\scrlayerOnAutoRemoveInterface{\DestroyPageStyleAlias{scrplain}} +%</body> +% \end{macrocode} +% \end{macro}^^A \ps@scrplain +% \end{macro}^^A \ps@plain.scrheadings +% \end{macro}^^A \ps@scrheadings +% +% +% \begin{macro}{\ihead} +% \begin{macro}{\ohead} +% \begin{macro}{\chead} +% \begin{macro}{\lehead} +% \begin{macro}{\lohead} +% \begin{macro}{\rehead} +% \begin{macro}{\rohead} +% \begin{macro}{\cehead} +% \begin{macro}{\cohead} +% \begin{macro}{\ifoot} +% \begin{macro}{\ofoot} +% \begin{macro}{\cfoot} +% \begin{macro}{\lefoot} +% \begin{macro}{\lofoot} +% \begin{macro}{\refoot} +% \begin{macro}{\rofoot} +% \begin{macro}{\cefoot} +% \begin{macro}{\cofoot} +% We also need macros to define the contents of the three part head +% and foot. Each macro defines one of the part of head or foot of the +% headings page style member and optional of the plain page style +% member. +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\ihead{% + \newcommand*{\ihead}{\@ifnextchar[{\@@ihead}{\@ihead}}% +} +% \end{macrocode} +% \begin{macro}{\@ihead} +% \begin{macro}{\@@ihead} +% Two helpers for the previous one to double the command and it's arguments. +% \begin{macrocode} +\scrlayerAddToInterface\@ihead{% + \newcommand*{\@ihead}[1]{\rehead{#1}\lohead{#1}}% +} +\scrlayerAddToInterface\@@ihead{% + \newcommand*{\@@ihead}[2][]{\rehead[{#1}]{#2}\lohead[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@ihead +% \end{macro}^^A \@ihead +% \begin{macrocode} +\scrlayerAddToInterface\ohead{% + \newcommand*{\ohead}{\@ifnextchar[{\@@ohead}{\@ohead}}% +} +% \end{macrocode} +% \begin{macro}{\@ohead} +% \begin{macro}{\@@ohead} +% Two helpers for the previous one to double the command and it's arguments. +% \begin{macrocode} +\scrlayerAddToInterface\@ohead{% + \newcommand*{\@ohead}[1]{\lehead{#1}\rohead{#1}}% +} +\scrlayerAddToInterface\@@ohead{% + \newcommand*{\@@ohead}[2][]{\lehead[{#1}]{#2}\rohead[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@ohead +% \end{macro}^^A \@ohead +% \begin{macrocode} +\scrlayerAddToInterface\chead{% + \newcommand*{\chead}{\@ifnextchar[{\@@chead}{\@chead}}% +} +% \end{macrocode} +% \begin{macro}{\@chead} +% \begin{macro}{\@@chead} +% Two helpers for the previous one to double the command and it's arguments. +% \begin{macrocode} +\scrlayerAddToInterface\@chead{% + \newcommand*{\@chead}[1]{\cehead{#1}\cohead{#1}}% +} +\scrlayerAddToInterface\@@chead{% + \newcommand*{\@@chead}[2][]{\cehead[{#1}]{#2}\cohead[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@chead +% \end{macro}^^A \@chead +% \begin{macrocode} +\scrlayerAddToInterface\lehead{% + \newcommand*{\lehead}{\sls@renewelement{even}{left}{head}}% +} +\scrlayerAddToInterface\lohead{% + \newcommand*{\lohead}{\sls@renewelement{odd}{left}{head}}% +} +\scrlayerAddToInterface\rehead{% + \newcommand*{\rehead}{\sls@renewelement{even}{right}{head}}% +} +\scrlayerAddToInterface\rohead{% + \newcommand*{\rohead}{\sls@renewelement{odd}{right}{head}}% +} +\scrlayerAddToInterface\cehead{% + \newcommand*{\cehead}{\sls@renewelement{even}{middle}{head}}% +} +\scrlayerAddToInterface\cohead{% + \newcommand*{\cohead}{\sls@renewelement{odd}{middle}{head}}% +} +\scrlayerAddToInterface\ifoot{% + \newcommand*{\ifoot}{\@ifnextchar[{\@@ifoot}{\@ifoot}}% +} +% \end{macrocode} +% \begin{macro}{\@ifoot} +% \begin{macro}{\@@ifoot} +% Two helpers for the previous one to double the command and it's arguments. +% \begin{macrocode} +\scrlayerAddToInterface\@ifoot{% + \newcommand*{\@ifoot}[1]{\refoot{#1}\lofoot{#1}}% +} +\scrlayerAddToInterface\@@ifoot{% + \newcommand*{\@@ifoot}[2][]{\refoot[{#1}]{#2}\lofoot[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@ifoot +% \end{macro}^^A \@ifoot +% \begin{macrocode} +\scrlayerAddToInterface\ofoot{% + \newcommand*{\ofoot}{\@ifnextchar[{\@@ofoot}{\@ofoot}}% +} +% \end{macrocode} +% \begin{macro}{\@ofoot} +% \begin{macro}{\@@ofoot} +% Two helpers for the previous one to double the command and it's arguments. +% \begin{macrocode} +\scrlayerAddToInterface\@ofoot{% + \newcommand*{\@ofoot}[1]{\lefoot{#1}\rofoot{#1}}% +} +\scrlayerAddToInterface\@@ofoot{% + \newcommand*{\@@ofoot}[2][]{\lefoot[{#1}]{#2}\rofoot[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@ofoot +% \end{macro}^^A \@ofoot +% \begin{macrocode} +\scrlayerAddToInterface\cfoot{% + \newcommand*{\cfoot}{\@ifnextchar[{\@@cfoot}{\@cfoot}}% +} +% \end{macrocode} +% \begin{macro}{\@cfoot} +% \begin{macro}{\@@cfoot} +% Two helpers for the previous one to double the command and it's arguments. +% \begin{macrocode} +\scrlayerAddToInterface\@cfoot{% + \newcommand*{\@cfoot}[1]{\cefoot{#1}\cofoot{#1}}% +} +\scrlayerAddToInterface\@@cfoot{% + \newcommand*{\@@cfoot}[2][]{\cefoot[{#1}]{#2}\cofoot[{#1}]{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \@@cfoot +% \end{macro}^^A \@cfoot +% \begin{macrocode} +\scrlayerAddToInterface\lefoot{% + \newcommand*{\lefoot}{\sls@renewelement{even}{left}{foot}}% +} +\scrlayerAddToInterface\lofoot{% + \newcommand*{\lofoot}{\sls@renewelement{odd}{left}{foot}}% +} +\scrlayerAddToInterface\refoot{% + \newcommand*{\refoot}{\sls@renewelement{even}{right}{foot}}% +} +\scrlayerAddToInterface\rofoot{% + \newcommand*{\rofoot}{\sls@renewelement{odd}{right}{foot}}% +} +\scrlayerAddToInterface\cefoot{% + \newcommand*{\cefoot}{\sls@renewelement{even}{middle}{foot}}% +} +\scrlayerAddToInterface\cofoot{% + \newcommand*{\cofoot}{\sls@renewelement{odd}{middle}{foot}}% +} +% \end{macrocode} +% \begin{macro}{\sls@renewelement} +% \begin{macro}{\sls@@renewelement} +% \begin{macro}{\sls@@@renewelement} +% \begin{macro}{\sls@@renewplainelement} +% Little helper for several of the above commands. +% \begin{macrocode} +\scrlayerAddToInterface\sls@renewelement{% + \newcommand*{\sls@renewelement}[3]{% + \@ifnextchar[%] + {\sls@@@renewelement{#1}{#2}{#3}}% + {\sls@@renewelement{#1}{#2}{#3}}% + }% +} +\scrlayerAddToInterface\sls@@renewelement{% + \newcommand*{\sls@@renewelement}[4]{% + \scr@ifundefinedorrelax{sls@ps@\sls@currentheadings @#1@#2@#3}{% + \@namedef{sls@ps@scrheadings@#1@#2@#3}{#4}% + }{% + \@namedef{sls@ps@\sls@currentheadings @#1@#2@#3}{#4}% + }% + }% +} +\scrlayerAddToInterface\sls@@@renewelement{% + \def\sls@@@renewelement#1#2#3[#4]#5{% + \sls@@renewplainelement{#1}{#2}{#3}{#4}% + \sls@@renewelement{#1}{#2}{#3}{#5}% + }% +} +\scrlayerAddToInterface\sls@@renewplainelement{% + \newcommand*{\sls@@renewplainelement}[4]{% + \scr@ifundefinedorrelax{sls@ps@\sls@currentplain @#1@#2@#3}{% + \@namedef{sls@ps@plain.scrheadings@#1@#2@#3}{#4}% + }{% + \@namedef{sls@ps@\sls@currentplain @#1@#2@#3}{#4}% + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \sls@@renewplainelement +% \end{macro}^^A \sls@@@renewelement +% \end{macro}^^A \sls@@renewelement +% \end{macro}^^A \sls@renewelement +% \end{macro}^^A \cofoot +% \end{macro}^^A \cefoot +% \end{macro}^^A \rofoot +% \end{macro}^^A \refoot +% \end{macro}^^A \lofoot +% \end{macro}^^A \lefoot +% \end{macro}^^A \cfoot +% \end{macro}^^A \ofoot +% \end{macro}^^A \ifoot +% \end{macro}^^A \cohead +% \end{macro}^^A \cehead +% \end{macro}^^A \rohead +% \end{macro}^^A \rehead +% \end{macro}^^A \lohead +% \end{macro}^^A \lehead +% \end{macro}^^A \chead +% \end{macro}^^A \ohead +% \end{macro}^^A \ihead +% +% \begin{macro}{\clearmainofpairofpagestyles} +% \begin{macro}{\clearscrheadings} +% Maybe you want to clear the currently defined head and foot. First +% let's clear only scrheadings pagestyle but not scrplain pagestyle. +% We do this simply using the already known command: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\clearmainofpairofpagestyles{% + \newcommand*{\clearmainofpairofpagestyles}{% + \ihead{}\chead{}\ohead{}\ifoot{}\cfoot{}\ofoot{}% + }% +} +\scrlayerAddToInterface\clearscrheadings{% + \let\clearscrheadings\clearmainofpairofpagestyles +} +%</body> +% \end{macrocode} +% \end{macro}^^A \clearscrheadings +% \end{macro}^^A \clearmainofpairofpagestyles +% \begin{macro}{\clearplainofpairofpagestyles} +% \begin{macro}{\clearscrplain} +% Now, we use the not recommended feature to set up a plain style: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\clearplainofpairofpagestyles{% + \newcommand*{\clearplainofpairofpagestyles}{% + \sls@@renewplainelement{odd}{left}{head}{}% + \sls@@renewplainelement{odd}{right}{head}{}% + \sls@@renewplainelement{odd}{middle}{head}{}% + \sls@@renewplainelement{even}{left}{head}{}% + \sls@@renewplainelement{even}{right}{head}{}% + \sls@@renewplainelement{even}{middle}{head}{}% + \sls@@renewplainelement{odd}{left}{foot}{}% + \sls@@renewplainelement{odd}{right}{foot}{}% + \sls@@renewplainelement{odd}{middle}{foot}{}% + \sls@@renewplainelement{even}{left}{foot}{}% + \sls@@renewplainelement{even}{right}{foot}{}% + \sls@@renewplainelement{even}{middle}{foot}{}% + }% +} +\scrlayerAddToInterface\clearscrplain{% + \let\clearscrplain\clearplainofpairofpagestyles +} +%</body> +% \end{macrocode} +% \end{macro}^^A \clearscrplain +% \end{macro}^^A \clearplainofpairofpagestyles +% \begin{macro}{\clearpairofpagestyles} +% \begin{macro}{\clearscrheadfoot} +% Last but not least we clean up both, the main and the plain: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\clearpairofpagestyles{% + \newcommand*{\clearpairofpagestyles}{% + \ihead[]{}\chead[]{}\ohead[]{}\ifoot[]{}\cfoot[]{}\ofoot[]{}% + }% +} +\scrlayerAddToInterface\clearscrheadfoot{% + \let\clearscrheadfoot\clearpairofpagestyles +} +%</body> +% \end{macrocode} +% \end{macro}^^A \clearscrheadfoot +% \end{macro}^^A \clearpairofpagestyles +% +% \begin{macro}{\ps@useheadings} +% Not longer supported: +% \begin{macrocode} +%<*body> +\scrlayerAddToInterface\ps@useheadings{% + \newcommand*\ps@useheadings{% + \PackageWarning{scrlayer-scrpage}{incompatible page style!\MessageBreak + Page styles like `headings' and `plain'\MessageBreak + are incompatible with the page styles\MessageBreak + of scrlayer-scrpage. You shouldn't mix\MessageBreak + them up. Therefore page style\MessageBreak + `useheadings' is not longer provided.\MessageBreak + Usage is deprecated and will be replaced\MessageBreak + by `scrheadings'% + }% + \let\ps@useheadings\ps@scrheadings + \ps@useheadings + }% +} +\scrlayerAddCsToInterface{ps@plain.useheadings}{% + \@namedef{ps@plain.useheadings}{\@nameuse{ps@plain.scrheadings}}% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \ps@useheadings +% +% \iffalse^^A meta-comment +%</interface> +% \fi^^A meta-comment +% +% \Finale +% \let\subsection\section +% \let\section\chapter +% \let\chapter\restorechapter +% +\endinput +% +% end of file `scrlayer.dtx' + +%%% Local Variables: +%%% mode: doctex +%%% mode: flyspell +%%% ispell-local-dictionary: "en_GB" +%%% TeX-master: t +%%% End: |