% \CheckSum{2418} % \iffalse^^A meta-comment % ====================================================================== % scrlayer-scrpage.dtx % Copyright (c) Markus Kohm, 2012-2014 % % 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-2014 % % 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 %%%% From File: $Id: scrlayer-scrpage.dtx 1806 2014-10-16 06:41:25Z kohm $ (identify) %%%% From File: $Id: scrlayer-scrpage.dtx 1806 2014-10-16 06:41:25Z kohm $ (init) %%%% From File: $Id: scrlayer-scrpage.dtx 1806 2014-10-16 06:41:25Z kohm $ (options) %%%% From File: $Id: scrlayer-scrpage.dtx 1806 2014-10-16 06:41:25Z kohm $ (body) %<*dtx> \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi \begingroup \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}} \filedate$Date: 2014-10-16 08:41:25 +0200 (Thu, 16 Oct 2014) $ \def\filerevision$#1: #2 ${\gdef\filerevision{#2}} \filerevision$Revision: 1806 $ \endgroup \ProvidesFile{scrlayer-scrpage.dtx}[\filedate\space r\filerevision\space % %<*identify> %\NeedsTeXFormat{LaTeX2e}[1995/12/01] %\ProvidesPackage{scrlayer-scrpage}[% %!KOMAScriptVersion % package % %<*dtx|identify> (end user interface for scrlayer)] % %<*dtx> \ifx\documentclass\undefined \input scrdocstrip.tex \@@input scrkernel-version.dtx \@@input scrstrip.inc \KOMAdefVariable{COPYRIGHTFROM}{2012} \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 % %<*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} % %<*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 % %\fi % % \StopEventually{} % % \chapter{Implementation of \Package{scrlayer-scrpage}} % % This section if for developers only. % % \iffalse %<*interface> %<*identify> % \fi % %\iffalse % %\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 % % \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 % % \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} % \changes{v0.9.1757}{2014/04/09}{new: two offsets available} % \begin{option}{footwidth} % \changes{v0.9.1757}{2014/04/09}{new: two offsets available} % \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@iicolons#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@c}{\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@iicolons#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@c}{\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@iicolons} % \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 is 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@iicolons{% \def\sls@split@at@iicolons#1:#2:#3:#4\@nil{% \ifstr{#4}{}{}{% \ifstr{#4}{:}{}{% \ifstr{#4}{::}{}{% \PackageWarning{scrlayer}{extra `:' found!\MessageBreak You've used more than two colons 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}% \def\reserved@c{#3}% }% } % \end{macrocode} % \end{macro}^^A \sls@split@at@iicolons % \begin{macro}{\sls@set@hf@width} % \changes{v0.9.1757}{2014/04/09}{new: two offsets available} % \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 odd page % \item[\Parameter{special dimensional expression}:] the offset even page % \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}[4]{% \sls@settowidthof{\@tempdima}{#4}% \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}% }% \ifstr{#3}{}{% \addtolength{\@tempdima}{-\@tempdimb}% }{% \sls@settowidthof{\@tempdima}{#3}% \setlength{\@tempdima}{-\@tempdima}% }% \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}% }% }% }% } % % \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}% }% } % % \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@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 is 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@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@}% } % % \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}% } % % \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} % % \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 `:' 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}% }{} % % \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 } % % \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{% \sls@auto@pagestyleset% } % \end{macrocode} % \begin{macro}{\sls@auto@pagestyleset} % \changes{v0.9}{2014/01/22}{new (internal) macro}%^^A % \begin{macrocode} \newcommand*{\sls@auto@pagestyleset}{% \scr@ifundefinedorrelax{KOMAClassName}{% % \PackageInfoNoLine{scrlayer-scrpage}{% % auto-selection of `pagestyleset=standard'}% \FamilyExecuteOptions[.scrlayer-scrpage.sty]{KOMA}{pagestyleset=standard}% }{% % \PackageInfoNoLine{scrlayer-scrpage}{% % auto-selection of `pagestyleset=KOMA-Script'}% \FamilyExecuteOptions[.scrlayer-scrpage.sty]{KOMA}% {pagestyleset=KOMA-Script}% }% } % % \end{macrocode} % \end{macro}%^^A \sls@auto@pagestyleset % \begin{macrocode} %<*options> \KOMA@key{pagestyleset}{% \scr@ifundefinedorrelax{sls@ps@style@#1}{% \FamilyKeyStateUnknownValue }{% \let\sls@auto@pagestyleset\relax \@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}% }{}% }% }% }% } % % \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} % % \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% } % % \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} % \changes{v0.9}{2014/08/18}{fix names of layers \texttt{\dots head.odd} and % \texttt{\dots head.even}}%^^A % \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: % \changes{v3.13b}{2014/10/16}{workaround: additional group added to avoid % pdf\TeX{} color stack warnings}%^^A % \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.even}% \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.odd}% \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} % \changes{v0.9}{2014/08/18}{fix names of layers \texttt{\dots foot.odd} and % \texttt{\dots foot.even}}%^^A % \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.even}% \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.odd}% \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 }% } % % \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} % % \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} % The low level page head font command. It is deprecated to redefine or use % this and it may already be defined. % \begin{macro}{\scr@fnt@pagehead} % \begin{macro}{\scr@fnt@wrn@pagehead} % \changes{v0.9}{2014/01/13}{warning always deactivated} % \begin{macro}{\scr@fnt@pageheadfoot} % \begin{macrocode} %<*body> \@ifundefined{scr@fnt@pagehead}{% \scrlayer@AddCsToInterface{scr@fnt@pagehead}% \@ifundefined{@pageheadfont}{% \newkomafont{pagehead}{}% \scrlayer@AddCsToInterface{@pageheadfont}% }{% \newcommand*{\scr@fnt@pagehead}{\@pageheadfont}% }% }{} \@ifundefined{scr@fnt@pageheadfoot}{% \newcommand*{\scr@fnt@pageheadfoot}{\headfont}% \scrlayer@AddCsToInterface{scr@fnt@pageheadfoot}% \@ifundefined{headfont}{% \newcommand*{\headfont}{\normalcolor\slshape}% }{} }{} \scr@ifundefinedorrelax{scr@wrn@pagehead}{}{% % \PackageInfo{scrlayer-scrpage}{% % deactivating warning for font element\MessageBreak % `pagehead'}% \let\scr@fnt@wrn@pagehead\relax } % \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} % The low level page footer font command. It is deprecated to redefine or use % this and it may already be defined. % \begin{macro}{\scr@fnt@pagefoot} % \begin{macro}{\scr@fnt@wrn@pagefoot} % \changes{v0.9}{2014/01/13}{warning always deactivated} % \begin{macrocode} \@ifundefined{scr@fnt@pagefoot}{% \scrlayer@AddCsToInterface{scr@fnt@pagefoot}% \def\scr@fnt@pagefoot{\footfont}% \@ifundefined{footfont}{% \newcommand*{\footfont}{}% \scrlayer@AddCsToInterface{footfont}% }{}% }{} \scr@ifundefinedorrelax{scr@fnt@pagefoot}{}{% % \PackageInfo{scrlayer-scrpage}{% % deactivating warning for font element\MessageBreak % `pagefoot'}% \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 }% } % % \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.% }% }% }% } % % \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}% }% }% } % % \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% }% % }% }% } % % \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 }% } % % \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}}% }% }% }% } % % \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> \PackageInfo{scrlayer-scrpage}{% Page style of `#2' already defined.\MessageBreak Definition ignored}% % }% }% } % % \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}} % % \end{macrocode} % \end{macro}^^A \ps@scrplain % \end{macro}^^A \ps@plain.scrheadings % \end{macro}^^A \ps@scrheadings % % % \begin{macro}{\ihead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\ohead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\chead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\lehead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\lohead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\rehead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\rohead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\cehead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\cohead} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\ifoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\ofoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\cfoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\lefoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\lofoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\refoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\rofoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\cefoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % \begin{macro}{\cofoot} % \changes{v3.14}{2014/09/19}{new star version double the argument} % 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}{\@ifstar {\@dblarg\@@@ihead}{\@ihead}}% } % \end{macrocode} % \begin{macro}{\@ihead} % \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}{\@ifnextchar[{\@@@ihead}{\@@ihead}}% } \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 % \end{macro}^^A \@ihead % \begin{macrocode} \scrlayerAddToInterface\ohead{% \newcommand*{\ohead}{\@ifstar {\@dblarg\@@@ohead}{\@ohead}}% } % \end{macrocode} % \begin{macro}{\@ohead} % \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}{\@ifnextchar[{\@@@ohead}{\@@ohead}}% } \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 % \end{macro}^^A \@ohead % \begin{macrocode} \scrlayerAddToInterface\chead{% \newcommand*{\chead}{\@ifstar {\@dblarg\@@@chead}{\@chead}}% } % \end{macrocode} % \begin{macro}{\@chead} % \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}{\@ifnextchar[{\@@@chead}{\@@chead}}% } \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 % \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}}% } % \end{macrocode} % \begin{macrocode} \scrlayerAddToInterface\ifoot{% \newcommand*{\ifoot}{\@ifstar {\@dblarg\@@@ifoot}{\@ifoot}}% } % \end{macrocode} % \begin{macro}{\@ifoot} % \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}{\@ifnextchar[{\@@@ifoot}{\@@ifoot}}% } \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 % \end{macro}^^A \@ifoot % \begin{macrocode} \scrlayerAddToInterface\ofoot{% \newcommand*{\ofoot}{\@ifstar {\@dblarg\@@@ofoot}{\@ofoot}}% } % \end{macrocode} % \begin{macro}{\@ofoot} % \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}{\@ifnextchar[{\@@@ofoot}{\@@ofoot}}% } \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 % \end{macro}^^A \@ofoot % \begin{macrocode} \scrlayerAddToInterface\cfoot{% \newcommand*{\cfoot}{\@ifstar {\@dblarg\@@@cfoot}{\@cfoot}}% } % \end{macrocode} % \begin{macro}{\@cfoot} % \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}{\@ifnextchar[{\@@@cfoot}{\@@cfoot}}% } \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 % \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@@@@renewelement} % \begin{macro}{\sls@@renewplainelement} % Little helper for several of the above commands. % \begin{macrocode} \scrlayerAddToInterface\sls@renewelement{% \newcommand*{\sls@renewelement}[3]{% \@ifstar{\@dblarg{\sls@@@@renewelement{#1}{#2}{#3}}}% {\sls@@renewelement{#1}{#2}{#3}}% }% } \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}% }% }% } % % \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 \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 } % % \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 } % % \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 } % % \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}}% } % % \end{macrocode} % \end{macro}^^A \ps@useheadings % % \iffalse^^A meta-comment % % \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: