You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3043 lines
111 KiB
3043 lines
111 KiB
% \CheckSum{2604}
|
|
% \iffalse^^A meta-comment
|
|
% ======================================================================
|
|
% scrlayer-scrpage.dtx
|
|
% Copyright (c) Markus Kohm, 2012-2019
|
|
%
|
|
% 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.
|
|
%
|
|
% This work consists of all files listed in manifest.txt.
|
|
% ----------------------------------------------------------------------
|
|
% scrlayer-scrpage.dtx
|
|
% Copyright (c) Markus Kohm, 2012-2019
|
|
%
|
|
% 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 3390 2019-11-18 17:09:35Z kohm $
|
|
%<identify>%%% (run: identify)
|
|
%<init>%%% (run: init)
|
|
%<options>%%% (run: options)
|
|
%<body>%%% (run: 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: 2019-11-18 18:09:35 +0100 (Mon, 18 Nov 2019) $
|
|
\def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
|
|
\filerevision$Revision: 3390 $
|
|
\edef\reserved@a{%
|
|
\noexpand\endgroup
|
|
\noexpand\ProvidesFile{scrlayer-scrpage.dtx}%
|
|
[\filedate\space\filerevision\space
|
|
KOMA-Script package source
|
|
}%
|
|
\reserved@a
|
|
%</dtx>
|
|
%<*identify>
|
|
%<interface>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
|
%<interface>\ProvidesPackage{scrlayer-scrpage}[%
|
|
%!KOMAScriptVersion
|
|
%<interface> package
|
|
%</identify>
|
|
%<*dtx|identify>
|
|
(end user interface for scrlayer)]
|
|
%</dtx|identify>
|
|
%<*dtx>
|
|
\ifx\documentclass\undefined
|
|
\input scrdocstrip.tex
|
|
\@@input scrkernel-version.dtx
|
|
\@@input scrstrip.inc
|
|
\KOMAdefVariable{COPYRIGHTFROM}{2012}
|
|
\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
|
|
\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}
|
|
% \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
|
|
%
|
|
%\iffalse
|
|
%</dtx>
|
|
%\fi
|
|
%
|
|
% \StopEventually{}
|
|
%
|
|
% \chapter{Implementation of \Package{scrlayer-scrpage}}
|
|
% \label{sec:scrlayer-scrpage}
|
|
%
|
|
% This section if for developers only.
|
|
%
|
|
% \iffalse
|
|
%<*interface>
|
|
%<*identify>
|
|
% \fi
|
|
%
|
|
%\iffalse
|
|
%</identify>
|
|
%\fi
|
|
%
|
|
%
|
|
% \section{Initialising some Values before the Options}
|
|
%
|
|
% \iffalse^^A meta-comment
|
|
%<*init>
|
|
% \fi^^A meta-comment
|
|
%
|
|
% Initialisation before all options (even the options from
|
|
% \File{scrlayer.dtx}).
|
|
%
|
|
% Currently nothing.
|
|
%
|
|
% \iffalse^^A meta-comment
|
|
%</init>
|
|
% \fi^^A meta-comment
|
|
%
|
|
% \section{Options}
|
|
%
|
|
% \iffalse^^A meta-comment
|
|
%<*options>
|
|
% \fi
|
|
%
|
|
% Package \Package{scrpage2} doesn't support \KOMAScript{} options but only
|
|
% regular \LaTeX{} package options. The interface will also support those
|
|
% options, but uses \KOMAScript{} options for the implementation. This
|
|
% results in additional features of the interface.
|
|
%
|
|
% Note, that some options are already defined before this by the common option
|
|
% parts of \File{scrlayer.dtx}. All others will follow step by step in the
|
|
% main part.
|
|
%
|
|
% Options \Option{headinclude}, \Option{headexclude}, \Option{footinclude} and
|
|
% \Option{footexclude} of package \Package{scrpage2} are deprecated since
|
|
% package version 2.3, 2008-12-08. They won't be supported by the
|
|
% \Package{scrlayer-scrpage} interface.
|
|
%
|
|
% Additional initialisation may be done here, but currently this isn't
|
|
% needed.
|
|
%
|
|
% \iffalse^^A meta-comment
|
|
%</options>
|
|
% \fi^^A meta-comment
|
|
%
|
|
%
|
|
% \section{Width of Header and Footer}
|
|
%
|
|
% \Package{scrpage2} provided 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}%^^A
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{option}{footwidth}
|
|
% \changes{v0.9.1757}{2014/04/09}{new: two offsets available}%^^A
|
|
% \changes{v3.15}{2014/12/28}{fix: missing colon in call of
|
|
% \cs{sls@split@at@iicolons}}%^^A
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \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}%
|
|
\noexpand\FamilyKeyStateProcessed
|
|
\noexpand\KOMA@kav@replacevalue{.scrlayer-scrpage.sty}{headwidth}{%
|
|
\reserved@a:\reserved@b:\reserved@c
|
|
}%
|
|
}%
|
|
\reserved@a
|
|
}
|
|
\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}%
|
|
\noexpand\FamilyKeyStateProcessed
|
|
\noexpand\KOMA@kav@replacevalue{.scrlayer-scrpage.sty}{footwidth}{%
|
|
\reserved@a:\reserved@b:\reserved@c
|
|
}%
|
|
}%
|
|
\reserved@a
|
|
}
|
|
\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}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \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}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \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}%
|
|
\KOMA@kav@add{.scrlayer-scrpage.sty}{headwidth}{\textwidth:0pt:0pt}%
|
|
}{%
|
|
\newcommand*{\sls@headwidth}{\@headwidth}%
|
|
\KOMA@kav@xadd{.scrlayer-scrpage.sty}{headwidth}{\@headwidth:0pt:0pt}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\sls@oddheadshift{\newcommand*{\sls@oddheadshift}{0pt}}
|
|
\scrlayerAddToInterface\sls@evenheadshift{\newcommand*{\sls@evenheadshift}{0pt}}
|
|
\scrlayerAddToInterface\sls@footwidth{%
|
|
\scr@ifundefinedorrelax{@footwidth}{%
|
|
\newcommand*{\sls@footwidth}{\textwidth}%
|
|
\KOMA@kav@add{.scrlayer-scrpage.sty}{footwidth}{\textwidth:0pt:0pt}
|
|
}{%
|
|
\newcommand*{\sls@footwidth}{\@footwidth}%
|
|
\KOMA@kav@xadd{.scrlayer-scrpage.sty}{footwidth}{\@footwidth:0pt:0pt}
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\sls@oddfootshift{\newcommand*{\sls@oddfootshift}{0pt}}
|
|
\scrlayerAddToInterface\sls@evenfootshift{\newcommand*{\sls@evenfootshift}{0pt}}
|
|
% \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}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \begin{macro}{\sls@deftowidthof}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% the special dimensional expressions may be either one of the strings
|
|
% \texttt{paper}, \texttt{text}, \texttt{marginpar},
|
|
% \texttt{textwithmarginpar}, \texttt{head}, \texttt{foot},
|
|
% \texttt{headtopline}, \texttt{headsepline}, \texttt{footsepline},
|
|
% \texttt{footbotline}, or \texttt{page} or a valid dimensional
|
|
% expression. But it cannot be both a dimensional expression using symbolic
|
|
% values!
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\sls@settotwidthof{%
|
|
\newcommand*{\sls@settowidthof}[2]{%
|
|
\Ifstr{#2}{paper}{%
|
|
\setlength{#1}{\paperwidth}%
|
|
}{%
|
|
\Ifstr{#2}{text}{%
|
|
\setlength{#1}{\textwidth}%
|
|
}{%
|
|
\Ifstr{#2}{marginpar}{%
|
|
\setlength{#1}{\dimexpr \marginparwidth+\marginparsep\relax}%
|
|
}{%
|
|
\Ifstr{#2}{textwithmarginpar}{%
|
|
\setlength{#1}{\dimexpr\textwidth
|
|
+\marginparwidth
|
|
+\marginparsep\relax}%
|
|
}{%
|
|
\Ifstr{#2}{head}{%
|
|
\setlength{#1}{\sls@headwidth}%
|
|
}{%
|
|
\Ifstr{#2}{foot}{%
|
|
\setlength{#1}{\sls@footwidth}%
|
|
}{%
|
|
\Ifstr{#2}{headtopline}{%
|
|
\setlength{#1}{\sls@headabove@linelength}%
|
|
}{%
|
|
\Ifstr{#2}{headsepline}{%
|
|
\setlength{#1}{\sls@headbelow@linelength}%
|
|
}{%
|
|
\Ifstr{#2}{footsepline}{%
|
|
\setlength{#1}{\sls@footabove@linelength}%
|
|
}{%
|
|
\Ifstr{#2}{footbotline}{%
|
|
\setlength{#1}{\sls@footbelow@linelength}%
|
|
}{%
|
|
\Ifstr{#2}{page}{%
|
|
\setlength{#1}{\paperwidth}%
|
|
\begingroup
|
|
\expandafter\expandafter\expandafter\endgroup
|
|
\expandafter\ifx\csname ta@bcor\endcsname\relax\else
|
|
\addtolength{#1}{-\ta@bcor}%
|
|
\fi
|
|
}{%
|
|
\setlength{#1}{\dimexpr #2\relax}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\sls@deftowidthof{%
|
|
\newcommand*{\sls@deftowidthof}[2]{%
|
|
\Ifstr{#2}{autohead}{%
|
|
\expandafter\def\csname #1\endcsname{\sls@headwidth}%
|
|
}{%
|
|
\Ifstr{#2}{autofoot}{%
|
|
\expandafter\def\csname #1\endcsname{\sls@footwidth}%
|
|
}{%
|
|
\sls@settowidthof{\@tempdima}{#2}%
|
|
\expandafter\edef\csname #1\endcsname{\the\@tempdima}%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@deftowidthof
|
|
% \end{macro}%^^A \sls@settowidthof
|
|
% \end{option}%^^A footwidth
|
|
% \end{option}%^^A footheight
|
|
%
|
|
% \begin{macro}{\setheadwidth}
|
|
% \begin{macro}{\setfootwidth}
|
|
% For compatibility with \Package{scrpage2}, map the commands to the options:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\setheadwidth{%
|
|
\newcommand*{\setheadwidth}[2][]{%
|
|
\KOMAoptions{headwidth=#2:#1}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\setfootwidth{%
|
|
\newcommand*{\setfootwidth}[2][]{%
|
|
\KOMAoptions{footwidth=#2:#1}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \setheadwidth
|
|
% \end{macro}%^^A \setfootwidth
|
|
%
|
|
%
|
|
% \section{Lines in Page Head and Footer}
|
|
%
|
|
% The interface implements the options \Option{headtopline},
|
|
% \Option{headsepline}, \Option{footsepline}, \Option{footbotline},
|
|
% \Option{plainheadtopline}, \Option{plainheadsepline},
|
|
% \Option{plainfootsepline}, \Option{plainfootbotline}, \Option{ilines},
|
|
% \Option{clines}, and \Option{olines}, the commands \Macro{setheadtopline},
|
|
% \Macro{setheadsepline}, \Macro{setfootsepline}, and \Macro{setfootbotline},
|
|
% and the corresponding \KOMAScript{} font elements of package
|
|
% \Package{scrpage2}. Some of the options are extended to understand
|
|
% values.
|
|
%
|
|
% \begin{option}{headtopline}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{option}{headsepline}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{option}{footsepline}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{option}{footbotline}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \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[headtopline]{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[headsepline]{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[footsepline]{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[footbotline]{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}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \begin{description}
|
|
% \item[\OParameter{option name}:] either empty or the name of the option
|
|
% that sets the line,
|
|
% \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}[4][]{%
|
|
\begingroup
|
|
\Ifstr{#1}{}{%
|
|
\FamilyKeyStateUnknown
|
|
}{%
|
|
\KOMA@set@ifkey{#1}{@tempswa}{#4}%
|
|
}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\if@tempswa
|
|
\edef\reserved@b{%
|
|
\noexpand\endgroup
|
|
\noexpand\@namedef{sls@#2#3@linethickness}{.4pt}%
|
|
\noexpand\@namedef{sls@#2#3@linelength}{%
|
|
\expandafter\noexpand\csname sls@#2width\endcsname
|
|
}%
|
|
}%
|
|
\else
|
|
\def\reserved@b{%
|
|
\endgroup
|
|
\@namedef{sls@#2#3@linethickness}{0pt}%
|
|
\@namedef{sls@#2#3@linelength}{0pt}%
|
|
}%
|
|
\fi
|
|
\else
|
|
\let\reserved@a\@empty
|
|
\let\reserved@b\@empty
|
|
\sls@split@at@colon#4::\@nil
|
|
\ifx\reserved@a\@empty
|
|
\def\reserved@a{\endgroup\@namedef{sls@#2#3@linethickness}{.4pt}}%
|
|
\else
|
|
\setlength{\@tempdima}{\dimexpr\reserved@a\relax}%
|
|
\edef\reserved@a{%
|
|
\noexpand\endgroup
|
|
\noexpand\@namedef{sls@#2#3@linethickness}{\the\@tempdima}%
|
|
}%
|
|
\fi
|
|
\ifx\reserved@b\@empty
|
|
\def\reserved@b{%
|
|
\reserved@a
|
|
\@namedef{sls@#2#3@linelength}{\@nameuse{sls@#2width}}%
|
|
}%
|
|
\else
|
|
\edef\reserved@b{%
|
|
\noexpand\reserved@a
|
|
\noexpand\sls@deftowidthof{sls@#2#3@linelength}{\reserved@b}%
|
|
}%
|
|
\fi
|
|
\fi
|
|
\reserved@b
|
|
\FamilyKeyStateProcessed
|
|
\Ifstr{#1}{}{}{%
|
|
\KOMA@kav@xreplacevalue{.scrlayer-scrpage.sty}{#1}{%
|
|
\csname sls@#2#3@linethickness\endcsname
|
|
:\csname sls@#2#3@linelength\endcsname
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@set@values
|
|
% \begin{macro}{\sls@split@at@colon}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \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}{0pt}%
|
|
}
|
|
\KOMA@kav@xadd{.scrlayer-scrpage.sty}{headtopline}{%
|
|
\expandafter\noexpand\sls@headabove@linethickness:%
|
|
\expandafter\noexpand\sls@headabove@linelength}
|
|
\scrlayerAddToInterface\sls@headbelow@linelength{%
|
|
\newcommand*{\sls@headbelow@linelength}{\sls@headwidth}%
|
|
}
|
|
\scrlayerAddToInterface\sls@headbelow@linethickness{%
|
|
\newcommand*{\sls@headbelow@linethickness}{0pt}%
|
|
}
|
|
\KOMA@kav@xadd{.scrlayer-scrpage.sty}{headsepline}{%
|
|
\expandafter\noexpand\sls@headbelow@linethickness:%
|
|
\expandafter\noexpand\sls@headbelow@linelength}
|
|
\scrlayerAddToInterface\sls@footabove@linelength{%
|
|
\newcommand*{\sls@footabove@linelength}{\sls@footwidth}%
|
|
}
|
|
\scrlayerAddToInterface\sls@footabove@linethickness{%
|
|
\newcommand*{\sls@footabove@linethickness}{0pt}%
|
|
}
|
|
\KOMA@kav@xadd{.scrlayer-scrpage.sty}{footsepline}{%
|
|
\expandafter\noexpand\sls@footabove@linethickness:%
|
|
\expandafter\noexpand\sls@footabove@linelength}
|
|
\scrlayerAddToInterface\sls@footbelow@linelength{%
|
|
\newcommand*{\sls@footbelow@linelength}{\sls@footwidth}%
|
|
}
|
|
\scrlayerAddToInterface\sls@footbelow@linethickness{%
|
|
\newcommand*{\sls@footbelow@linethickness}{0pt}%
|
|
}
|
|
\KOMA@kav@xadd{.scrlayer-scrpage.sty}{footbotline}{%
|
|
\expandafter\noexpand\sls@footbelow@linethickness:%
|
|
\expandafter\noexpand\sls@footbelow@linelength}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@footbelow@linethickness
|
|
% \end{macro}%^^A \sls@footbelow@linelength
|
|
% \end{macro}%^^A \sls@footabove@linethickness
|
|
% \end{macro}%^^A \sls@footabove@linelength
|
|
% \end{macro}%^^A \sls@headbelow@linethickness
|
|
% \end{macro}%^^A \sls@headbelow@linelength
|
|
% \end{macro}%^^A \sls@headabove@linethickness
|
|
% \end{macro}%^^A \sls@headabove@linelength
|
|
% \end{option}%^^A footbotline
|
|
% \end{option}%^^A footsepline
|
|
% \end{option}%^^A headsepline
|
|
% \end{option}%^^A headtopline
|
|
%
|
|
% \begin{option}{plainheadtopline}
|
|
% \begin{macro}{\ifsls@plain@head@above@line}
|
|
% \begin{option}{plainheadsepline}
|
|
% \begin{macro}{\ifsls@plain@head@below@line}
|
|
% \begin{option}{plainfootsepline}
|
|
% \begin{macro}{\ifsls@plain@foot@above@line}
|
|
% \begin{option}{plainfootbotline}
|
|
% \begin{macro}{\ifsls@plain@foot@below@line}
|
|
% \begin{description}
|
|
% \item[\texttt{=\meta{switch value}}:]
|
|
% \end{description}\noindent
|
|
% While these only switches the rule on or off, we need only some switches.
|
|
% \begin{macrocode}
|
|
%<*options>
|
|
\scrlayerAddCsToInterface{ifsls@plain@head@above@line}{%
|
|
\KOMA@ifkey{plainheadtopline}{sls@plain@head@above@line}%
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainheadtopline}%
|
|
\scrlayer@AddCsToInterface{%
|
|
KV@KOMA.scrlayer-scrpage.sty@plainheadtopline@default}%
|
|
\scrlayer@AddCsToInterface{sls@plain@head@above@linetrue}
|
|
\scrlayer@AddCsToInterface{sls@plain@head@above@linefalse}
|
|
}
|
|
\scrlayerAddCsToInterface{ifsls@plain@head@sbelow@line}{%
|
|
\KOMA@ifkey{plainheadsepline}{sls@plain@head@below@line}%
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainheadsepline}%
|
|
\scrlayer@AddCsToInterface{%
|
|
KV@KOMA.scrlayer-scrpage.sty@plainheadsepline@default}%
|
|
\scrlayer@AddCsToInterface{sls@plain@head@below@linetrue}%
|
|
\scrlayer@AddCsToInterface{sls@plain@head@below@linefalse}%
|
|
}
|
|
\scrlayerAddCsToInterface{ifsls@plain@foot@above@line}{%
|
|
\KOMA@ifkey{plainfootsepline}{sls@plain@foot@above@line}%
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainfootsepline}%
|
|
\scrlayer@AddCsToInterface{%
|
|
KV@KOMA.scrlayer-scrpage.sty@plainfootsepline@default}%
|
|
\scrlayer@AddCsToInterface{sls@plain@foot@above@linetrue}%
|
|
\scrlayer@AddCsToInterface{sls@plain@foot@above@linefalse}%
|
|
}
|
|
\scrlayerAddCsToInterface{ifsls@plain@foot@below@line}{%
|
|
\KOMA@ifkey{plainfootbotline}{sls@plain@foot@below@line}%
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@plainfootbotline}%
|
|
\scrlayer@AddCsToInterface{%
|
|
KV@KOMA.scrlayer-scrpage.sty@plainfootbotline@default}%
|
|
\scrlayer@AddCsToInterface{sls@plain@foot@below@linetrue}%
|
|
\scrlayer@AddCsToInterface{sls@plain@foot@below@linefalse}%
|
|
}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \ifsls@plain@foot@below@line
|
|
% \end{option}%^^A plainfootbotline
|
|
% \end{macro}%^^A \ifsls@plain@foot@above@line
|
|
% \end{option}%^^A plainfootsepline
|
|
% \end{macro}%^^A \ifsls@plain@head@below@line
|
|
% \end{option}%^^A plainheadsepline
|
|
% \end{macro}%^^A \ifsls@plain@head@above@line
|
|
% \end{option}%^^A plainheadtopline
|
|
%
|
|
% \begin{option}{ilines}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{option}{clines}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{option}{olines}
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \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@kav@add{.scrlayer-scrpage.sty}{ilines}{}
|
|
\KOMA@key{ilines}[]{%
|
|
\ifx\relax#1\relax
|
|
\renewcommand*{\sls@hfline@adjust}{0}%
|
|
\FamilyKeyStateProcessed
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{ilines}%
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{clines}%
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{olines}%
|
|
\KOMA@kav@add{.scrlayer-scrpage.sty}{ilines}{}%
|
|
\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
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{ilines}%
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{clines}%
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{olines}%
|
|
\KOMA@kav@add{.scrlayer-scrpage.sty}{clines}{}%
|
|
\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
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{ilines}%
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{clines}%
|
|
\KOMA@kav@removekey{.scrlayer-scrpage.sty}{olines}%
|
|
\KOMA@kav@add{.scrlayer-scrpage.sty}{olines}{}%
|
|
\else
|
|
\def\FamilyKeyStateProcessed{unexpected value}%
|
|
\fi
|
|
}
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@olines}
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@olines@default}
|
|
\KOMA@kav@add{.scrlayer-scrpage.sty}{ilines}{}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@hfline@adjust
|
|
% \end{option}%^^A olines
|
|
% \end{option}%^^A clines
|
|
% \end{option}%^^A ilines
|
|
%
|
|
% \begin{macro}{\setheadtopline}
|
|
% \begin{macro}{\setheadsepline}
|
|
% \begin{macro}{\setfootsepline}
|
|
% \begin{macro}{\setfootbotline}
|
|
% \begin{description}
|
|
% \item[\OParameter{extended dimensional expression}:] the length of the
|
|
% line; if omitted the length will use the width of the page head or
|
|
% footer while printing the line.
|
|
% \item[\Parameter{dimensional expression}:] the thickness of the line.
|
|
% \item[\OParameter{code}:] the font selection code for the line. You may
|
|
% use it for any kind of operation, that doesn't change the position,
|
|
% width, height, or depth, e.g., to change the colour of the line.
|
|
% \end{description}
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\setheadtopline{%
|
|
\newcommand*{\setheadtopline}{\sls@setline{head}{above}}%
|
|
}
|
|
\scrlayerAddToInterface\setheadsepline{%
|
|
\newcommand*{\setheadsepline}{\sls@setline{head}{below}}%
|
|
}
|
|
\scrlayerAddToInterface\setfootsepline{%
|
|
\newcommand*{\setfootsepline}{\sls@setline{foot}{above}}%
|
|
}
|
|
\scrlayerAddToInterface\setfootbotline{%
|
|
\newcommand*{\setfootbotline}{\sls@setline{foot}{below}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\sls@setline}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\sls@@setline}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \begin{macro}{\sls@@@setline}
|
|
% \changes{v3.17}[2015/02/27]{internal use of the corresponding options}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \begin{macro}{\sls@@@@setline}
|
|
% \changes{v3.18}{2015/06/17}{explicit reuse of the current length}%^^A
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% Helper to set up the line attributes processing the parameters of the
|
|
% commands above.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\sls@setline{%
|
|
\newcommand*\sls@setline[2]{%
|
|
\kernel@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}%
|
|
\Ifstr{#1}{headabove}{%
|
|
\KOMAExecuteOptions[.scrlayer-scrpage.sty]%
|
|
{headtopline=\@tempdima:\csname sls@#1@linelength\endcsname}%
|
|
}{\Ifstr{#1}{headbelow}{%
|
|
\KOMAExecuteOptions[.scrlayer-scrpage.sty]%
|
|
{headsepline=\@tempdima:\csname sls@#1@linelength\endcsname}%
|
|
}{%
|
|
\Ifstr{#1}{footabove}{%
|
|
\KOMAExecuteOptions[.scrlayer-scrpage.sty]%
|
|
{footsepline=\@tempdima:\csname sls@#1@linelength\endcsname}%
|
|
}{%
|
|
\KOMAExecuteOptions[.scrlayer-scrpage.sty]%
|
|
{footbotline=\@tempdima:\csname sls@#1@linelength\endcsname}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
\PackageWarning{scrlayer-scrpage}{%
|
|
Command deprecated!\MessageBreak
|
|
Usage of `\string\setheadtopline',
|
|
`\string\setheadsepline',\MessageBreak
|
|
`\string\setfootsepline', and `\string\setfootbotline'\MessageBreak
|
|
became deprecated with scrlayer-scrpage.\MessageBreak
|
|
You should use KOMA-Script options\MessageBreak
|
|
`headsepline', `headtopline', `footsepline',\MessageBreak
|
|
or `footbotline' with values\MessageBreak
|
|
`<line thickness>:<line length>' to setup\MessageBreak
|
|
the line length and thickness, and\MessageBreak
|
|
`\string\setkomafont' or `\string\addtokomafont' to\MessageBreak
|
|
setup the colour%
|
|
}%
|
|
\kernel@ifnextchar[%]
|
|
{%
|
|
\sls@@@@setline{#1}%
|
|
}{%
|
|
}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\sls@@@@setline{%
|
|
\def\sls@@@@setline#1[#2]{%
|
|
\Ifstr{#1}{headabove}{\setkomafont{headtopline}{#2}}{%
|
|
\Ifstr{#1}{headbelow}{\setkomafont{headsepline}{#2}}{%
|
|
\Ifstr{#1}{footabove}{\setkomafont{footsepline}{#2}}{%
|
|
\setkomafont{footbotline}{#2}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@setline
|
|
% \end{macro}%^^A \sls@@setline
|
|
% \end{macro}%^^A \sls@@@setline
|
|
% \end{macro}%^^A \sls@@@@setline
|
|
% \begin{KOMAfont}{headtopline}
|
|
% \begin{KOMAfont}{headsepline}
|
|
% \begin{KOMAfont}{footsepline}
|
|
% \begin{KOMAfont}{footbotline}
|
|
% These are the font elements used in \Macro{sls@hf@rule} to set the rules
|
|
% with, i.e., another colour. Note, that those may already be defined and
|
|
% become only part of the interface if they are not.
|
|
% \begin{macrocode}
|
|
\@ifundefined{scr@fnt@headtopline}{%
|
|
\@ifundefined{@headtoplinefont}{%
|
|
\scrlayer@AddCsToInterface{@headtoplinefont}%
|
|
}{}%
|
|
\newkomafont{headtopline}{}%
|
|
\scrlayer@AddCsToInterface{scr@fnt@headtopline}%
|
|
}{}
|
|
\@ifundefined{scr@fnt@headsepline}{%
|
|
\@ifundefined{@headseplinefont}{%
|
|
\scrlayer@AddCsToInterface{@headseplinefont}%
|
|
}{}%
|
|
\newkomafont{headsepline}{}%
|
|
\scrlayer@AddCsToInterface{scr@fnt@headsepline}%
|
|
}{}
|
|
\@ifundefined{scr@fnt@footsepline}{%
|
|
\@ifundefined{@footseplinefont}{%
|
|
\scrlayer@AddCsToInterface{@footseplinefont}%
|
|
}{}%
|
|
\newkomafont{footsepline}{}%
|
|
\scrlayer@AddCsToInterface{scr@fnt@footsepline}%
|
|
}{}
|
|
\@ifundefined{scr@fnt@footbotline}{%
|
|
\@ifundefined{@footbotlinefont}{%
|
|
\scrlayer@AddCsToInterface{@footbotlinefont}%
|
|
}{}%
|
|
\newkomafont{footbotline}{}%
|
|
\scrlayer@AddCsToInterface{scr@fnt@footbotline}%
|
|
}{}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{KOMAfont}%^^A footbotline
|
|
% \end{KOMAfont}%^^A footsepline
|
|
% \end{KOMAfont}%^^A headsepline
|
|
% \end{KOMAfont}%^^A headtopline
|
|
% \end{macro}%^^A \setfootbotline
|
|
% \end{macro}%^^A \setfootsepline
|
|
% \end{macro}%^^A \setheadsepline
|
|
% \end{macro}%^^A \setheadtopline
|
|
%
|
|
% \begin{length}{\headheight}
|
|
% \changes{v3.24}{2017/05/22}{warning depends on option
|
|
% \texttt{singlespacing}}%^^A
|
|
% Some classes set \Length{headheight} to a very, very small value. We'll
|
|
% warn about that.
|
|
% \begin{length}{\footheight}
|
|
% \changes{v3.24}{2017/05/23}{also warn for low \cs{footheight}}%^^A
|
|
% If the \Length{headheight} is OK, we also test for \Length{footheight}.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\AtBeginDocument{%
|
|
\ifdim \headheight
|
|
<\if@ps@singlespacing\f@baselineskip\else\baselineskip\fi\relax
|
|
\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
|
|
\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi\space
|
|
currently.\MessageBreak
|
|
But head height is currently
|
|
\the\headheight\space only.\MessageBreak
|
|
You may use\MessageBreak
|
|
\@ifpackageloaded{geometry}{%
|
|
geometry option
|
|
`head=\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi'%
|
|
}{%
|
|
\@ifpackageloaded{typearea}{%
|
|
typearea option `headheight=%
|
|
\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi'%
|
|
}{%
|
|
\string\setlength{\string\headheight}%
|
|
{\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi}%
|
|
}%
|
|
}\MessageBreak
|
|
\if@ps@singlespacing\else\ifdim \headheight<\f@baselineskip\else
|
|
or load package `scrlayer-scrpage' with\MessageBreak
|
|
option `singlespacing=true'\MessageBreak
|
|
\fi\fi
|
|
to avoid this warning%
|
|
}%
|
|
\else
|
|
\ifdim \footheight
|
|
<\if@ps@singlespacing\f@baselineskip\else\baselineskip\fi\relax
|
|
\PackageWarningNoLine{scrlayer-scrpage}{Very small foot height
|
|
detected!\MessageBreak
|
|
Using scrlayer-scrpage the foot height\MessageBreak
|
|
should be at least \string\baselineskip, which is\MessageBreak
|
|
\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi\space
|
|
currently.\MessageBreak
|
|
But foot height is currently
|
|
\the\footheight\space only.\MessageBreak
|
|
You may use\MessageBreak
|
|
\@ifpackageloaded{typearea}{%
|
|
typearea option `footheight=%
|
|
\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi'%
|
|
}{%
|
|
\string\setlength{\string\footheight}%
|
|
{\if@ps@singlespacing\f@baselineskip\else\the\baselineskip\fi}%
|
|
}%
|
|
\MessageBreak
|
|
\if@ps@singlespacing\else\ifdim \footheight<\f@baselineskip\else
|
|
or load package `scrlayer-scrpage' with\MessageBreak
|
|
option `singlespacing=true'\MessageBreak
|
|
\fi\fi
|
|
to avoid this warning%
|
|
}%
|
|
\fi
|
|
\fi
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{length}%^^A \footheight
|
|
% \end{length}%^^A \headheight
|
|
%
|
|
%
|
|
% \section{Usual \LaTeX{} Kernel Commands}
|
|
%
|
|
% \Package{scrlayer-scrpage} some usual \LaTeX{} kernel commands, that should
|
|
% really behave like the original \LaTeX{} kernel commands do. But some
|
|
% packages redefine them without restoring them in the output routine before
|
|
% the page head and foot is build. Such a redefinition could break
|
|
% \Package{scrlayer-scrpage} or even provoke errors. Here we try to make sure,
|
|
% that \Package{scrlayer-scrpage} uses the correct definitions. Note: This
|
|
% should not be needed, if other packages would be more careful.
|
|
%
|
|
% \begin{macro}{\LaTeXcentering}
|
|
% \changes{v3.27}{2019/04/05}{added}%^^A
|
|
% \begin{macro}{\raggedright}
|
|
% \changes{v3.27}{2019/04/05}{added}%^^A
|
|
% \begin{macro}{\raggedleft}
|
|
% \changes{v3.27}{2019/04/05}{added}%^^A
|
|
% \Package{scrlayer-scrpage} needs \cs{centering} to center, \cs{raggedright}
|
|
% to left align and \cs{raggedleft} to right align the three elements of
|
|
% three-part header and footer. \Package{ragged2e} optionally redefines
|
|
% them. This is not perfect but does not break \Package{scrlayer-scrpage}
|
|
% completely. But \Package{tabu} also redefines them an that breaks
|
|
% \Package{scrlayer-scrpage} in a way, that even error messages can occur. So
|
|
% from version 3.27 \Package{scrlayer-scrpage} does not longer use
|
|
% \cs{centering}, \cs{raggedright} or \cs{raggedleft} but \cs{LaTeXcentering},
|
|
% \cs{LaTeXraggedright} and \cs{LaTeXraggedleft}. With \Package{ragged2e} and
|
|
% its option \texttt{newcommands}/\texttt{NewCommands} this would be already
|
|
% defined and contain the original definition. On all other circumstances the
|
|
% commands have to be defined. But these commands should not be defined as
|
|
% part of the interface or removing the interface could break other packages
|
|
% like \Package{ragged2e}.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\@ifundefined{LaTeXcentering}{\let\LaTeXcentering\centering}{}
|
|
\@ifundefined{LaTeXraggedleft}{\let\LaTeXraggedleft\raggedleft}{}
|
|
\@ifundefined{LaTeXraggedright}{\let\LaTeXraggedright\raggedright}{}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \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}{%
|
|
%<trace> \PackageInfoNoLine{scrlayer-scrpage}{%
|
|
%<trace> auto-selection of `pagestyleset=standard'}%
|
|
\FamilyExecuteOptions[.scrlayer-scrpage.sty]{KOMA}{pagestyleset=standard}%
|
|
}{%
|
|
%<trace> \PackageInfoNoLine{scrlayer-scrpage}{%
|
|
%<trace> auto-selection of `pagestyleset=KOMA-Script'}%
|
|
\FamilyExecuteOptions[.scrlayer-scrpage.sty]{KOMA}%
|
|
{pagestyleset=KOMA-Script}%
|
|
}%
|
|
}
|
|
%</init>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@auto@pagestyleset
|
|
% \changes{v3.17}{2015/02/25}{new: store the values}%^^A
|
|
% \begin{macrocode}
|
|
%<*options>
|
|
\KOMA@key{pagestyleset}{%
|
|
\scr@ifundefinedorrelax{sls@ps@style@#1}{%
|
|
\FamilyKeyStateUnknownValue
|
|
}{%
|
|
\let\sls@auto@pagestyleset\relax
|
|
\@nameuse{sls@ps@style@#1}%
|
|
\FamilyKeyStateProcessed
|
|
\KOMA@kav@replacevalue{.scrlayer-scrpage.sty}{pagestyleset}{#1}%
|
|
}%
|
|
}
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@pagestyleset}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\sls@ps@style@standard}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \begin{macro}{\sls@ps@style@KOMA-Script}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% 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:
|
|
% \changes{v3.18}{2015/06/24}{missing \cs{lofoot} and \cs{rofoot} added}%^^A
|
|
% \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}%
|
|
\lofoot[\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}%
|
|
\rofoot[\ifnum\@pageat=5 \pagemark\fi]
|
|
{\ifnum\@pageat=5 \pagemark\fi}%
|
|
}{}%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@ps@style@KOMA-Script
|
|
% \end{macro}%^^A \sls@ps@style@standard
|
|
% \end{option}%^^A pagestyleset
|
|
%
|
|
% \begin{option}{komastyle}
|
|
% \begin{option}{standardstyle}
|
|
% These options are deprecated, but defined for compatibility with
|
|
% \Package{scrpage2}:
|
|
% \begin{macrocode}
|
|
%<*options>
|
|
\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{komastyle}{%
|
|
pagestyleset=KOMA-Script}
|
|
\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{standardstyle}{%
|
|
pagestyleset=standard}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{option}%^^A standardstyle
|
|
% \end{option}%^^A komastyle
|
|
%
|
|
%
|
|
% \section{Extended Mark Mechanisms}
|
|
%
|
|
% Package options \Option{markuppercase}, \Option{markusedcase}, and
|
|
% \Option{nouppercase} of package \Package{scrpage2} will be mapped to
|
|
% \KOMAScript{} option \Option{markcase}.
|
|
%
|
|
% \begin{option}{markuppercase}
|
|
% \begin{option}{markusedcase}
|
|
% \begin{option}{nouppercase}
|
|
% For compatibility with \Package{scrpage2}.
|
|
% \begin{macrocode}
|
|
%<*options>
|
|
\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{markuppercase}{markcase=upper}
|
|
\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{markusedcase}{markcase=used}
|
|
\KOMA@DeclareDeprecatedOption[scrlayer-scrpage]{nouppercase}{%
|
|
markcase=ignoreuppercase%
|
|
}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{option}%^^A nouppercase
|
|
% \end{option}%^^A markusedcase
|
|
% \end{option}%^^A markuppercase
|
|
%
|
|
%
|
|
% \section{Expert Page Style Definition Interface}
|
|
%
|
|
% This is the low level interface of \Package{scrpage2} with
|
|
% \Macro{defpagestyle}, \Macro{newpagestyle}, \Macro{renewpagestyle}, and
|
|
% \Macro{providepagestyle}. We will also define is. In difference to
|
|
% \Package{scrpage2} layers are used. Following layers will be defined for
|
|
% each page style:
|
|
% \begin{description}
|
|
% \item[\texttt{\meta{page style name}.head.above.line}] line above the head
|
|
% \item[\texttt{\meta{page style name}.head.odd}] odd page head (only twoside)
|
|
% \item[\texttt{\meta{page style name}.head.even}] even page head (only
|
|
% twoside)
|
|
% \item[\texttt{\meta{page style name}.head.oneside}] single-side head (only
|
|
% oneside)
|
|
% \item[\texttt{\meta{page style name}.head.below}] line below the head
|
|
% \item[\texttt{\meta{page style name}.foot.above.line}] line above the footer
|
|
% \item[\texttt{\meta{page style name}.foot.odd}] odd page footer (only
|
|
% twoside)
|
|
% \item[\texttt{\meta{page style name}.foot.even}] even side footer (only
|
|
% twoside)
|
|
% \item[\texttt{\meta{page style name}.foot.oneside}] single-side footer (only
|
|
% oneside)
|
|
% \item[\texttt{\meta{page style name}.foot.below.line}] line below the footer
|
|
% (only oneside)
|
|
% \end{description}
|
|
% Note: \Package{scrpage2} also provides starred versions of the page style
|
|
% definition commands, doing the same like the starless versions. This has
|
|
% been done for compatibility reasons with deprecated \Package{scrpage2} and
|
|
% may be removed some times. The layer interface doesn't support this.
|
|
%
|
|
% \begin{macro}{\defpagestyle}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \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}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\sls@@defhead}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \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]{%
|
|
\kernel@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{%
|
|
\kernel@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}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\sls@@deffoot}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \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]{%
|
|
\kernel@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{%
|
|
\kernel@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
|
|
\ifsls@autoenlarge
|
|
I'll enlarge \string#1, for further\MessageBreak
|
|
processing, but you should do this yourself,\MessageBreak
|
|
\else
|
|
You should enlarge \string#1,\MessageBreak
|
|
\fi
|
|
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
|
|
}%
|
|
\ifsls@autoenlarge
|
|
.\MessageBreak
|
|
I'll also
|
|
\ifx #1\headheight decrease \string\topmargin
|
|
\else increase \string\footskip\fi
|
|
\fi
|
|
}%
|
|
\ifsls@autoenlarge
|
|
\@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
|
|
\fi
|
|
\usebox\z@
|
|
\endgroup
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \begin{option}{hmode}
|
|
% Switch automatically to the horizontal mode before setting a page head or
|
|
% page footer element.
|
|
% \begin{macrocode}
|
|
%<*options>
|
|
\KOMA@ifkey{hmode}{sls@leavevmode}
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@hmode}
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@hmode@default}
|
|
\scrlayer@AddCsToInterface{sls@leavevmode@linetrue}
|
|
\scrlayer@AddCsToInterface{sls@leavevmode@linefalse}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{option}%^^A hmode
|
|
% \begin{option}{autoenlargeheadfoot}
|
|
% \changes{v3.25}{2018/01/14}{new option}%^^A
|
|
% Automaticly enlarge vertical size of head or foot if the contents is to
|
|
% large. This is the default.
|
|
% \begin{macrocode}
|
|
%<*options>
|
|
\KOMA@ifkey{autoenlargeheadfoot}{sls@autoenlarge}
|
|
\KOMAExecuteOptions{autoenlargeheadfoot=true}
|
|
\scrlayer@AddCsToInterface{KV@KOMA.scrlayer-scrpage.sty@autoenlargeheadfoot}
|
|
\scrlayer@AddCsToInterface{%
|
|
KV@KOMA.scrlayer-scrpage.sty@autoenlargeheadfoot@default}
|
|
\scrlayer@AddCsToInterface{sls@autoenlargetrue}
|
|
\scrlayer@AddCsToInterface{sls@autoenlargefalse}
|
|
%</options>
|
|
% \end{macrocode}
|
|
% \end{option}%^^A autoenlargeheadfoot
|
|
% \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}
|
|
% \changes{v3.25}{2018/02/05}{don't use \cs{newkomafont} to avoid
|
|
% warning}%^^A
|
|
% \begin{macro}{\scr@fnt@wrn@pagehead}
|
|
% \changes{v0.9}{2014/01/13}{warning always deactivated}%^^A
|
|
% \begin{macro}{\scr@fnt@pageheadfoot}
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\@ifundefined{scr@fnt@pagehead}{%
|
|
\scr@ifundefinedorrelax{scr@fnt@instead@pagehead}{}{%
|
|
\PackageInfo{scrlayer-scrpage}{%
|
|
Makeing stand-alone element `pagehead' from\MessageBreak
|
|
alias to `pageheadfoot'%
|
|
}%
|
|
\let\scr@fnt@instead@pagehead\relax
|
|
}%
|
|
\scrlayer@AddCsToInterface{scr@fnt@pagehead}%
|
|
\@ifundefined{@pageheadfont}{%
|
|
\newcommand*{\@pageheadfont}{}%
|
|
\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@fnt@wrn@pagehead}{}{%
|
|
%<trace> \PackageInfo{scrlayer-scrpage}{%
|
|
%<trace> deactivating warning for font element\MessageBreak
|
|
%<trace> `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@wrn@pagefoot}{}{%
|
|
%<trace> \PackageInfo{scrlayer-scrpage}{%
|
|
%<trace> deactivating warning for font element\MessageBreak
|
|
%<trace> `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
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@leftmargin
|
|
% \end{macro}%^^A \sls@topmargin
|
|
% \end{macro}%^^A \defpagestyle
|
|
%
|
|
% \begin{macro}{\newpagestyle}
|
|
% For the parameters see \Macro{defpagestyle}.
|
|
% Define only, if not already defined:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\newpagestyle{%
|
|
\newcommand*\newpagestyle[3]{%
|
|
\@ifundefined{ps@#1}{\defpagestyle{#1}{#2}{#3}}{%
|
|
\PackageError{scrlayer-scrpage}{Page style `#1' already defined}{%
|
|
Only not yet defined page style may be defined using
|
|
\string\newpagestyle.\MessageBreak
|
|
You may use either \string\renewpagestyle, \string\providepagestyle,
|
|
or \string\defpagestyle\MessageBreak
|
|
with already defined page styles.\MessageBreak
|
|
If you'll continue, your command will be ignored.%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \newpagestyle
|
|
%
|
|
% \begin{macro}{\renewpagestyle}
|
|
% For the parameters see \Macro{defpagestyle}.
|
|
% Define only, if not already defined:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\renewpagestyle{%
|
|
\newcommand*\renewpagestyle[3]{%
|
|
\@ifundefined{ps@#1}{%
|
|
\PackageError{scrlayer-scrpage}{Undefined page style `#1'}{%
|
|
Only already defined page style may be re-defined using
|
|
\string\renewpagestyle.\MessageBreak
|
|
You may use either \string\newpagestyle, \string\providepagestyle,
|
|
or \string\defpagestyle\MessageBreak
|
|
with not yet defined page styles.\MessageBreak
|
|
If you'll continue, your command will be ignored.%
|
|
}%
|
|
}{%
|
|
\defpagestyle{#1}{#2}{#3}%
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \renewpagestyle
|
|
%
|
|
% \begin{macro}{\providepagestyle}
|
|
% For the parameters see \Macro{defpagestyle}.
|
|
% Define only, if not already defined:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\providepagestyle{%
|
|
\newcommand*\providepagestyle[3]{%
|
|
\@ifundefined{ps@#1}{%
|
|
\defpagestyle{#1}{#2}{#3}%
|
|
}{%
|
|
%<*trace>
|
|
\PackageInfo{scrlayer-scrpage}{%
|
|
page style `#1' already defined.\MessageBreak
|
|
New definition ignored%
|
|
}%
|
|
%</trace>
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \providepagestyle
|
|
%
|
|
%
|
|
% \section{User Page Style Definition Interface}
|
|
%
|
|
% This is the mid-level interface of \Package{scrpage2} with
|
|
% \Macro{deftripstyle}. As in \Package{scrpage2} we simply use the expert page
|
|
% style definition interface to define the new user interface commands. But
|
|
% here the useless starred versions will not longer be supported. So users of
|
|
% them have to remove the star (nothing else).
|
|
%
|
|
% \begin{macro}{\deftriplepagestyle}
|
|
% \begin{macro}{\newtriplepagestyle}
|
|
% \begin{macro}{\renewtriplepagestyle}
|
|
% \begin{macro}{\providetriplepagestyle}
|
|
% \begin{macro}{\deftripstyle}
|
|
% \begin{description}
|
|
% \item[\Parameter{string}:] the name of the page style to be defined (must
|
|
% be fully expandable and expand to a string only).
|
|
% \item[\OParameter{dimensional expression}:] thickness of a horizontal line
|
|
% above the page head and below the page foot (default: 0\,pt).
|
|
% \item[\OParameter{dimensional expression}:] thickness of a horizontal line
|
|
% below the page head and above the page foot (default: 0\,pt).
|
|
% \item[\Parameter{code}:] will be expanded left aligned at head of odd
|
|
% pages (with one-side layout all pages are odd) and right aligned at head
|
|
% of even pages.
|
|
% \item[\Parameter{code}:] will be expanded centered at head of odd
|
|
% and even pages.
|
|
% \item[\Parameter{code}:] will be expanded right aligned at head of odd
|
|
% pages (with one-side layout all pages are odd) and left aligned at head
|
|
% of even pages.
|
|
% \item[\Parameter{code}:] will be expanded left aligned at footer of odd
|
|
% pages (with one-side layout all pages are odd) and right aligned at
|
|
% footer of even pages.
|
|
% \item[\Parameter{code}:] will be expanded centered at footer of odd
|
|
% and even pages.
|
|
% \item[\Parameter{code}:] will be expanded right aligned at footer of odd
|
|
% pages (with one-side layout all pages are odd) and left aligned at
|
|
% footer of even pages.
|
|
% \end{description}
|
|
% See \Package{scrpage2}, but:
|
|
% While the starred version of \Macro{deftripstyle} is deprecated for several
|
|
% years and hasn't been described at the manual, it will not longer be
|
|
% defined. Additional commands have been added.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface{\deftriplepagestyle}{%
|
|
\newcommand*{\deftriplepagestyle}[1]{%
|
|
\let\@tempa\defpagestyle
|
|
\scrlayer@triplestyle{#1}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface{\newtriplepagestyle}{%
|
|
\newcommand*{\newtriplepagestyle}[1]{%
|
|
\let\@tempa\newpagestyle
|
|
\scrlayer@triplestyle{#1}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface{\renewtriplepagestyle}{%
|
|
\newcommand*{\renewtriplepagestyle}[1]{%
|
|
\let\@tempa\renewpagestyle
|
|
\scrlayer@triplestyle{#1}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface{\providetriplepagestyle}{%
|
|
\newcommand*{\providetriplepagestyle}[1]{%
|
|
\let\@tempa\providepagestyle
|
|
\scrlayer@triplestyle{#1}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\scrlayer@triplestyle}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\scrlayer@@triplestyle}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \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{%
|
|
\kernel@ifnextchar[%]
|
|
{\scrlayer@@triplestyle{#1}}%
|
|
{\scrlayer@@triplestyle{#1}[\z@]}%
|
|
}
|
|
}
|
|
\scrlayerAddToInterface\scrlayer@@triplestyle{%
|
|
\def\scrlayer@@triplestyle#1[#2]{%
|
|
\kernel@ifnextchar[%]
|
|
{\scrlayer@@@triplestyle{#1}[#2]}%
|
|
{\scrlayer@@@triplestyle{#1}[\z@][#2]}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\scrlayer@@@triplestyle{%
|
|
\def\scrlayer@@@triplestyle#1[#2][#3]#4#5#6#7#8#9{%
|
|
\@tempa{#1}{%
|
|
(\sls@headwidth,#2)%
|
|
{%
|
|
\makebox[\z@][l]{#6}\hfill
|
|
\makebox[\z@][c]{#5}\hfill
|
|
\makebox[\z@][r]{#4}%
|
|
}{%
|
|
\makebox[\z@][l]{#4}\hfill
|
|
\makebox[\z@][c]{#5}\hfill
|
|
\makebox[\z@][r]{#6}%
|
|
}{%
|
|
\makebox[\z@][l]{#4}\hfill
|
|
\makebox[\z@][c]{#5}\hfill
|
|
\makebox[\z@][r]{#6}%
|
|
}%
|
|
(\sls@headwidth,#3)%
|
|
}{%
|
|
(\sls@footwidth,#3)%
|
|
{%
|
|
\makebox[\z@][l]{#9}\hfill
|
|
\makebox[\z@][c]{#8}\hfill
|
|
\makebox[\z@][r]{#7}%
|
|
}{%
|
|
\makebox[\z@][l]{#7}\hfill
|
|
\makebox[\z@][c]{#8}\hfill
|
|
\makebox[\z@][r]{#9}%
|
|
}{%
|
|
\makebox[\z@][l]{#7}\hfill
|
|
\makebox[\z@][c]{#8}\hfill
|
|
\makebox[\z@][r]{#9}%
|
|
}%
|
|
(\sls@footwidth,#2)%
|
|
}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \scrlayer@@@triplestyle
|
|
% \end{macro}%^^A \scrlayer@@triplestyle
|
|
% \end{macro}%^^A \scrlayer@triplestyle
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface{\deftripstyle}{%
|
|
\newcommand*{\deftripstyle}{%
|
|
\PackageWarning{scrlayer-scrpage}{%
|
|
Command \string\deftripstyle\space is deprecate.\MessageBreak
|
|
You should replace it by \string\deftriplepagestyle,\MessageBreak
|
|
e.g.,%
|
|
}%
|
|
\let\deftripstyle\deftriplepagestyle
|
|
\deftripstyle
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \deftripstyle
|
|
% \end{macro}%^^A \providetriplepagestyle
|
|
% \end{macro}%^^A \renewtriplepagestyle
|
|
% \end{macro}%^^A \newtriplepagestyle
|
|
% \end{macro}%^^A \deftriplepagestyle
|
|
%
|
|
%
|
|
% \section{Pre-defined Page Styles Interface}
|
|
%
|
|
% This is the high-level interface of \Package{scrpage2} with the page style
|
|
% \Pagestyle{scrheadings}, \Pagestyle{scrplain}, and
|
|
% \Pagestyle{useheadings}. Those will work as expected but will also be
|
|
% extended to support definition of additional styles using the same
|
|
% interface.
|
|
%
|
|
% \begin{macro}{\defpairofpagestyles}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \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={%
|
|
% \end{macrocode}
|
|
% \changes{v3.15}{2015/01/08}{usage of \cs{DeclarePageStyleAlias} instead of
|
|
% \cs{let}}%^^A fixme: Is this correct?
|
|
% \begin{macrocode}
|
|
\DeclarePageStyleAlias{plain}{plain.#2}%
|
|
\DeclarePageStyleAlias{headings}{#2}%
|
|
\def\sls@currentheadings{#2}%
|
|
\def\sls@currentplain{plain.#2}%
|
|
#3%
|
|
}%
|
|
}%
|
|
\sls@def@pair@page@style@member{plain.#2}%
|
|
\AddToLayerPageStyleOptions{plain.#2}{%
|
|
onselect={%
|
|
% \end{macrocode}
|
|
% \changes{v3.15}{2015/01/08}{usage of \cs{DeclarePageStyleAlias} instead of
|
|
% \cs{let}}%^^A fixme: Is this correct?
|
|
% \begin{macrocode}
|
|
\DeclarePageStyleAlias{plain}{plain.#2}%
|
|
\DeclarePageStyleAlias{headings}{#2}%
|
|
\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}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \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}{%
|
|
\kernel@ifstar {%
|
|
\kernel@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}
|
|
% \changes{v3.24}{2017/05/04}{improved \textsf{bidi} compatibility}%^^A
|
|
% \changes{v3.27}{2019/04/05}{\cs{centering} replaced by
|
|
% \cs{LaTeXcentering}}%^^A
|
|
% \changes{v3.27}{2019/04/05}{\cs{raggedright} replaced by
|
|
% \cs{LaTeXraggedright}}%^^A
|
|
% \changes{v3.27}{2019/04/05}{\cs{raggedleft} replaced by
|
|
% \cs{LaTeXraggedleft}}%^^A
|
|
% \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][\IfRTL{r}{l}]{\parbox{\sls@headwidth}{\LaTeXraggedright
|
|
\strut\@nameuse{sls@ps@#1@even@left@head}\strut}}%
|
|
\parbox{\sls@headwidth}{\LaTeXcentering
|
|
\strut\@nameuse{sls@ps@#1@even@middle@head}\strut}%
|
|
\makebox[0pt][\IfRTL{l}{r}]{\parbox{\sls@headwidth}{\LaTeXraggedleft
|
|
\strut\@nameuse{sls@ps@#1@even@right@head}\strut}}%
|
|
}{%
|
|
\makebox[0pt][\IfRTL{r}{l}]{\parbox{\sls@headwidth}{\LaTeXraggedright
|
|
\strut\@nameuse{sls@ps@#1@odd@left@head}\strut}}%
|
|
\parbox{\sls@headwidth}{\LaTeXcentering
|
|
\strut\@nameuse{sls@ps@#1@odd@middle@head}\strut}%
|
|
\makebox[0pt][\IfRTL{l}{r}]{\parbox{\sls@headwidth}{\LaTeXraggedleft
|
|
\strut\@nameuse{sls@ps@#1@odd@right@head}\strut}}%
|
|
}{%
|
|
\makebox[0pt][\IfRTL{r}{l}]{\parbox{\sls@headwidth}{\LaTeXraggedright
|
|
\strut\@nameuse{sls@ps@#1@odd@left@head}\strut}}%
|
|
\parbox{\sls@headwidth}{\LaTeXcentering
|
|
\strut\@nameuse{sls@ps@#1@odd@middle@head}\strut}%
|
|
\makebox[0pt][\IfRTL{l}{r}]{\parbox{\sls@headwidth}{\LaTeXraggedleft
|
|
\strut\@nameuse{sls@ps@#1@odd@right@head}\strut}}%
|
|
}%
|
|
}{%
|
|
{%
|
|
\makebox[0pt][\IfRTL{r}{l}]{\parbox{\sls@footwidth}{\LaTeXraggedright
|
|
\strut\@nameuse{sls@ps@#1@even@left@foot}\strut}}%
|
|
\parbox{\sls@footwidth}{\LaTeXcentering
|
|
\strut\@nameuse{sls@ps@#1@even@middle@foot}\strut}%
|
|
\makebox[0pt][\IfRTL{l}{r}]{\parbox{\sls@footwidth}{\LaTeXraggedleft
|
|
\strut\@nameuse{sls@ps@#1@even@right@foot}\strut}}%
|
|
}{%
|
|
\makebox[0pt][\IfRTL{r}{l}]{\parbox{\sls@footwidth}{\LaTeXraggedright
|
|
\strut\@nameuse{sls@ps@#1@odd@left@foot}\strut}}%
|
|
\parbox{\sls@footwidth}{\LaTeXcentering
|
|
\strut\@nameuse{sls@ps@#1@odd@middle@foot}\strut}%
|
|
\makebox[0pt][\IfRTL{l}{r}]{\parbox{\sls@footwidth}{\LaTeXraggedleft
|
|
\strut\@nameuse{sls@ps@#1@odd@right@foot}\strut}}%
|
|
}{%
|
|
\makebox[0pt][\IfRTL{r}{l}]{\parbox{\sls@footwidth}{\LaTeXraggedright
|
|
\strut\@nameuse{sls@ps@#1@odd@left@foot}\strut}}%
|
|
\parbox{\sls@footwidth}{\LaTeXcentering
|
|
\strut\@nameuse{sls@ps@#1@odd@middle@foot}\strut}%
|
|
\makebox[0pt][\IfRTL{l}{r}]{\parbox{\sls@footwidth}{\LaTeXraggedleft
|
|
\strut\@nameuse{sls@ps@#1@odd@right@foot}\strut}}%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@def@pair@page@style@member
|
|
% \end{macro}%^^A \defpairofpagestyles
|
|
%
|
|
% \begin{macro}{\newpairofpagestyles}
|
|
% \begin{macro}{\renewpairofpagestyles}
|
|
% \begin{macro}{\providepairofpagestyles}
|
|
% See \Macro{defpairofpagestyles} for the arguments.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\newpairofpagestyles{%
|
|
\newcommand*{\newpairofpagestyles}[3][]{%
|
|
\scr@ifundefinedorrelax{ps@#2}{%
|
|
\@ifundefined{ps@plain.#2}{\defpairofpagestyles[#1]{#2}{#3}}{%
|
|
\PackageError{scrlayer-scrpage}{%
|
|
Plain page style of `#2' already defined}{%
|
|
You may only define a new pair of page styles, if neither the style
|
|
itself\MessageBreak
|
|
nor it's plain page style has already been defined.\MessageBreak
|
|
You may use only \string\defpairofpagestyles\space or
|
|
\string\providepairofpagestyles\space with partly\MessageBreak
|
|
already defined page styles.\MessageBreak
|
|
If you'll continue, your command will be ignored.%
|
|
}%
|
|
}%
|
|
}{%
|
|
\PackageError{scrlayer-scrpage}{%
|
|
Page style `#2' already defined}{%
|
|
You may only define a new pair of page styles, if neither the style
|
|
itself\MessageBreak
|
|
nor it's plain page style has already been defined.\MessageBreak
|
|
You may use either \string\renewpairsofpagestyles,
|
|
\string\defpairofpagestyles, or\MessageBreak
|
|
\string\providepairofpagestyles\space with already defined page
|
|
styles.\MessageBreak
|
|
If you'll continue, your command will be ignored.%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\renewpairofpagestyles{%
|
|
\newcommand*{\renewpairofpagestyles}[3][]{%
|
|
\scr@ifundefinedorrelax{ps@#2}{%
|
|
\PackageError{scrlayer-scrpage}{%
|
|
Undefined page style `#2'}{%
|
|
You may only redefine existing pairs of page styles. You may use
|
|
either\MessageBreak
|
|
\string\newpairsofpagestyles, \string\defpairofpagestyles, or
|
|
\string\providepairofpagestyles\MessageBreak
|
|
with not yet defined page styles.\MessageBreak
|
|
If you'll continue, your command will be ignored.%
|
|
}%
|
|
}{%
|
|
\@ifundefined{ps@plain.#2}{%
|
|
\PackageError{scrlayer-scrpage}{%
|
|
Undefined plain page style of `#2'}{%
|
|
You may only redefine existing pairs of page styles. You may use
|
|
either\MessageBreak
|
|
\string\defpairofpagestyles\space or
|
|
\string\providepairofpagestyles\space with partly already
|
|
defined\MessageBreak
|
|
page styles.\MessageBreak
|
|
If you'll continue, your command will be ignored.%
|
|
}%
|
|
}{\defpairofpagestyles[#1]{#2}{#3}}%
|
|
}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\providepairofpagestyles{%
|
|
\newcommand*{\providepairofpagestyles}[3][]{%
|
|
\scr@ifundefinedorrelax{ps@#2}{%
|
|
\@ifundefined{ps@plain.#2}{\defpairofpagestyles[#1]{#2}{#3}}{%
|
|
%<*trace>
|
|
\PackageInfo{scrlayer-scrpage}{%
|
|
Plain page style of `#2' already\MessageBreak
|
|
defined. Definition ignored}%
|
|
%</trace>
|
|
}%
|
|
}{%
|
|
%<*trace>
|
|
\PackageInfo{scrlayer-scrpage}{%
|
|
Page style of `#2' already defined.\MessageBreak
|
|
Definition ignored}%
|
|
%</trace>
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \providepairofpagestyles
|
|
% \end{macro}%^^A \renewpairofpagestyles
|
|
% \end{macro}%^^A \newpairofpagestyles
|
|
%
|
|
% \begin{macro}{\ps@scrheadings}
|
|
% \begin{macro}{\ps@plain.scrheadings}
|
|
% We have one predefined pair: \texttt{scrheadings} with plain page style
|
|
% \texttt{plain.scrheadings}.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\newpairofpagestyles{scrheadings}{}%
|
|
% \end{macrocode}
|
|
% \begin{macro}{\ps@scrplain}
|
|
% But with package \Package{scrpage2} the plain page style was
|
|
% \texttt{scrplain}. So we make a kind of alias:
|
|
% \begin{macrocode}
|
|
\DeclarePageStyleAlias{scrplain}{plain.scrheadings}
|
|
\scrlayerOnAutoRemoveInterface{\DestroyPageStyleAlias{scrplain}}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \ps@scrplain
|
|
% \end{macro}%^^A \ps@plain.scrheadings
|
|
% \end{macro}%^^A \ps@scrheadings
|
|
%
|
|
%
|
|
% \begin{macro}{\ihead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\ohead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\chead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\lehead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\lohead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\rehead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\rohead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\cehead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\cohead}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\ifoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\ofoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\cfoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\lefoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\lofoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\refoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\rofoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\cefoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\cofoot}
|
|
% \changes{v3.14}{2014/09/19}{new star version double the argument}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% 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}{\kernel@ifstar {\@dblarg\@@@ihead}{\@ihead}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\@ihead}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@ihead}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\@@@ihead}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Two helpers for the previous one to double the command and it's arguments.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\@ihead{%
|
|
\newcommand*{\@ihead}{\kernel@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}{\kernel@ifstar {\@dblarg\@@@ohead}{\@ohead}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\@ohead}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@ohead}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\@@@ohead}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Two helpers for the previous one to double the command and it's arguments.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\@ohead{%
|
|
\newcommand*{\@ohead}{\kernel@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}{\kernel@ifstar {\@dblarg\@@@chead}{\@chead}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\@chead}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@chead}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\@@@chead}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Two helpers for the previous one to double the command and it's arguments.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\@chead{%
|
|
\newcommand*{\@chead}{\kernel@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}{\kernel@ifstar {\@dblarg\@@@ifoot}{\@ifoot}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\@ifoot}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@ifoot}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\@@@ifoot}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Two helpers for the previous one to double the command and it's arguments.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\@ifoot{%
|
|
\newcommand*{\@ifoot}{\kernel@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}{\kernel@ifstar {\@dblarg\@@@ofoot}{\@ofoot}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\@ofoot}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@ofoot}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\@@@ofoot}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Two helpers for the previous one to double the command and it's arguments.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\@ofoot{%
|
|
\newcommand*{\@ofoot}{\kernel@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}{\kernel@ifstar {\@dblarg\@@@cfoot}{\@cfoot}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\@cfoot}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@cfoot}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\@@@cfoot}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Two helpers for the previous one to double the command and it's arguments.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\@cfoot{%
|
|
\newcommand*{\@cfoot}{\kernel@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}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\sls@@@renewelement}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\sls@@@@renewelement}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% \begin{macro}{\sls@@renewplainelement}
|
|
% \changes{v3.27}{2019/04/05}{made long}%^^A
|
|
% Little helper for several of the above commands.
|
|
% \begin{macrocode}
|
|
\scrlayerAddToInterface\sls@renewelement{%
|
|
\newcommand*{\sls@renewelement}[3]{%
|
|
\kernel@ifstar{\@dblarg{\sls@@@@renewelement{#1}{#2}{#3}}}%
|
|
{\sls@@renewelement{#1}{#2}{#3}}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\sls@@renewelement{%
|
|
\newcommand*{\sls@@renewelement}[3]{%
|
|
\kernel@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{%
|
|
\long\def\sls@@@@renewelement#1#2#3[#4]#5{%
|
|
\sls@@renewplainelement{#1}{#2}{#3}{#4}%
|
|
\sls@@@renewelement{#1}{#2}{#3}{#5}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\sls@@renewplainelement{%
|
|
\newcommand{\sls@@renewplainelement}[4]{%
|
|
\scr@ifundefinedorrelax{sls@ps@\sls@currentplain @#1@#2@#3}{%
|
|
\@namedef{sls@ps@plain.scrheadings@#1@#2@#3}{#4}%
|
|
}{%
|
|
\@namedef{sls@ps@\sls@currentplain @#1@#2@#3}{#4}%
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \sls@@renewplainelement
|
|
% \end{macro}%^^A \sls@@@@renewelement
|
|
% \end{macro}%^^A \sls@@@renewelement
|
|
% \end{macro}%^^A \sls@@renewelement
|
|
% \end{macro}%^^A \sls@renewelement
|
|
% \end{macro}%^^A \cofoot
|
|
% \end{macro}%^^A \cefoot
|
|
% \end{macro}%^^A \rofoot
|
|
% \end{macro}%^^A \refoot
|
|
% \end{macro}%^^A \lofoot
|
|
% \end{macro}%^^A \lefoot
|
|
% \end{macro}%^^A \cfoot
|
|
% \end{macro}%^^A \ofoot
|
|
% \end{macro}%^^A \ifoot
|
|
% \end{macro}%^^A \cohead
|
|
% \end{macro}%^^A \cehead
|
|
% \end{macro}%^^A \rohead
|
|
% \end{macro}%^^A \rehead
|
|
% \end{macro}%^^A \lohead
|
|
% \end{macro}%^^A \lehead
|
|
% \end{macro}%^^A \chead
|
|
% \end{macro}%^^A \ohead
|
|
% \end{macro}%^^A \ihead
|
|
%
|
|
% \begin{macro}{\clearmainofpairofpagestyles}
|
|
% \begin{macro}{\clearscrheadings}
|
|
% Maybe you want to clear the currently defined head and foot. First
|
|
% let's clear only scrheadings pagestyle but not scrplain pagestyle.
|
|
% We do this simply using the already known command:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\clearmainofpairofpagestyles{%
|
|
\newcommand*{\clearmainofpairofpagestyles}{%
|
|
\ihead{}\chead{}\ohead{}\ifoot{}\cfoot{}\ofoot{}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\clearscrheadings{%
|
|
\let\clearscrheadings\clearmainofpairofpagestyles
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \clearscrheadings
|
|
% \end{macro}%^^A \clearmainofpairofpagestyles
|
|
% \begin{macro}{\clearplainofpairofpagestyles}
|
|
% \begin{macro}{\clearscrplain}
|
|
% Now, we use the not recommended feature to set up a plain style:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\clearplainofpairofpagestyles{%
|
|
\newcommand*{\clearplainofpairofpagestyles}{%
|
|
\sls@@renewplainelement{odd}{left}{head}{}%
|
|
\sls@@renewplainelement{odd}{right}{head}{}%
|
|
\sls@@renewplainelement{odd}{middle}{head}{}%
|
|
\sls@@renewplainelement{even}{left}{head}{}%
|
|
\sls@@renewplainelement{even}{right}{head}{}%
|
|
\sls@@renewplainelement{even}{middle}{head}{}%
|
|
\sls@@renewplainelement{odd}{left}{foot}{}%
|
|
\sls@@renewplainelement{odd}{right}{foot}{}%
|
|
\sls@@renewplainelement{odd}{middle}{foot}{}%
|
|
\sls@@renewplainelement{even}{left}{foot}{}%
|
|
\sls@@renewplainelement{even}{right}{foot}{}%
|
|
\sls@@renewplainelement{even}{middle}{foot}{}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\clearscrplain{%
|
|
\let\clearscrplain\clearplainofpairofpagestyles
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \clearscrplain
|
|
% \end{macro}%^^A \clearplainofpairofpagestyles
|
|
% \begin{macro}{\clearpairofpagestyles}
|
|
% \begin{macro}{\clearscrheadfoot}
|
|
% Last but not least we clean up both, the main and the plain:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\clearpairofpagestyles{%
|
|
\newcommand*{\clearpairofpagestyles}{%
|
|
\ihead[]{}\chead[]{}\ohead[]{}\ifoot[]{}\cfoot[]{}\ofoot[]{}%
|
|
}%
|
|
}
|
|
\scrlayerAddToInterface\clearscrheadfoot{%
|
|
\let\clearscrheadfoot\clearpairofpagestyles
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \clearscrheadfoot
|
|
% \end{macro}%^^A \clearpairofpagestyles
|
|
%
|
|
% \begin{macro}{\ps@useheadings}
|
|
% Not longer supported:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\scrlayerAddToInterface\ps@useheadings{%
|
|
\newcommand*\ps@useheadings{%
|
|
\PackageWarning{scrlayer-scrpage}{incompatible page style!\MessageBreak
|
|
Page styles like `headings' and `plain'\MessageBreak
|
|
are incompatible with the page styles\MessageBreak
|
|
of scrlayer-scrpage. You shouldn't mix\MessageBreak
|
|
them up. Therefore page style\MessageBreak
|
|
`useheadings' is not longer provided.\MessageBreak
|
|
Usage is deprecated and will be replaced\MessageBreak
|
|
by `scrheadings'%
|
|
}%
|
|
\let\ps@useheadings\ps@scrheadings
|
|
\ps@useheadings
|
|
}%
|
|
}
|
|
\scrlayerAddCsToInterface{ps@plain.useheadings}{%
|
|
\@namedef{ps@plain.useheadings}{\@nameuse{ps@plain.scrheadings}}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}%^^A \ps@useheadings
|
|
%
|
|
% \iffalse^^A meta-comment
|
|
%</interface>
|
|
% \fi^^A meta-comment
|
|
%
|
|
% \Finale
|
|
% \let\subsection\section
|
|
% \let\section\chapter
|
|
% \let\chapter\restorechapter
|
|
%
|
|
\endinput
|
|
%
|
|
% end of file `scrlayer.dtx'
|
|
|
|
%%% Local Variables:
|
|
%%% mode: doctex
|
|
%%% mode: flyspell
|
|
%%% ispell-local-dictionary: "en_GB"
|
|
%%% TeX-master: t
|
|
%%% End:
|
|
|