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.
 
 
 
 
 
 
tex-compiler/texmf-dist/source/latex/koma-script/doc/english/common-pagestylemanipulatio...

1058 lines
47 KiB

% ======================================================================
% common-pagestylemanipulation.tex
% Copyright (c) Markus Kohm, 2013-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 or later 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.
% ----------------------------------------------------------------------
% common-pagestylemanipulation.tex
% Copyright (c) Markus Kohm, 2013-2019
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3c, verteilt und/oder veraendert werden.
% 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 oder spaeter 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.
% ======================================================================
%
% Text that is common for several chapters of the KOMA-Script guide
% Maintained by Markus Kohm
%
% ----------------------------------------------------------------------
%
% Absaetze, die mehreren Kapitels in der KOMA-Script-Anleitung gemeinsam sind
% Verwaltet von Markus Kohm
%
% ============================================================================
\KOMAProvidesFile{common-pagestylemanipulation.tex}
[$Date: 2018-02-05 01:50:56 -0800 (Mon, 05 Feb 2018) $
KOMA-Script guide (common paragraph:
Setting up defined page styles)]
\translator{Markus Kohm\and Jana Schubert\and Karl Hagen}
% Date version of the translated file: 2019-12-06
\section{Manipulating Page Styles}
\seclabel{pagestyle.content}
\BeginIndexGroup
\BeginIndex{}{page>style}
\IfThisCommonLabelBase{scrlayer}{%
Although \Package{scrlayer} itself does not define concrete page styles with
content\,---\,the previously mentioned page styles
\DescRef{\LabelBase.pagestyle.@everystyle@} and \PageStyle{empty} are
initially defined without any layers, i.\,e., without content\,---\,, the
package provides some options and commands to manipulate their contents.%
}{%
\IfThisCommonLabelBase{scrlayer-scrpage}{%
\autoref{sec:scrlayer-scrpage.predefined.pagestyles} explains how the page
styles \DescRef{\LabelBase.pagestyle.scrheadings} and
\DescRef{\LabelBase.pagestyle.plain.scrheadings} are defined and how these
defaults can be changed. But topics such as creating running headers,
changing the widths of the header and footer, and putting horizontal lines
above or below the header or footer have yet to be described. Although
these capabilities are actually part of the
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
\important{\hyperref[cha:scrlayer]{\Package{scrlayer}}} package, they will
be explained below because these basic features of
\hyperref[cha:scrlayer]{\Package{scrlayer}} make up an important part of
\IfThisCommonLabelBase{scrlayer-scrpage}{\Package{scrlayer-scrpage}%
}{%
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
}.%
}{%
\IfThisCommonLabelBase{scrlayer-scrpage-experts}{%
This section is a supplement to
\autoref{sec:scrlayer.pagestyle.content}. It describes features that may
be too complicated for beginners.%
}{\InternalCommonFileUsageError}%
}%
}
\IfThisCommonLabelBase{scrlayer-scrpage-experts}{\iffalse}{%
\csname iftrue\endcsname}%
\begin{Declaration}
\IfThisCommonLabelBase{scrlayer}{%
\Option{automark}
\OptionVName{autooneside}{simple switch}
\Option{manualmark}
}{}%
\Macro{automark}\OParameter{section level of the right mark}
\Parameter{section level of the left mark}
\Macro{automark*}\OParameter{section level of the right mark}
\Parameter{section level of the left mark}
\Macro{manualmark}
\end{Declaration}
\IfThisCommonLabelBase{scrlayer-scrpage}{%
\begin{Explain}
In both the standard \LaTeX{} classes and the \KOMAScript{} classes, the
decision of whether to use automatic or static running
heads\Index{running heads>automatic}\Index{running heads>static} is made
by using the appropriate page style. Running heads repeat some
descriptive text, such as a title, that is appropriate to the page or
column, usually in the header, more rarely in the footer. As already
explained in
\autoref{sec:maincls.pagestyle}, you get automatic running heads with
\DescRef{maincls.pagestyle.headings}\IndexPagestyle{headings}%
\important{\DescRef{maincls.pagestyle.headings}}
In the article classes\OnlyAt{\Class{article}\and \Class{scrartcl}}
\Class{article} or \hyperref[cha:maincls]{\Class{scrartcl}}, the
\PageStyle{headings}\IndexPagestyle{headings} page style uses the
section heading, which is either the mandatory or the optional argument
of \DescRef{maincls.cmd.section}, for the running head%
\textnote{automatic running head} of one-sided documents. Two-sided
documents use this section heading as the \emph{left mark} and the
subsection heading as the \emph{right mark}. The left mark is printed,
as the name indicates, on left-hand (verso) pages. The right mark is
printed on right-hand (recto)\,---\,in one-sided printing this means on
all\,---\,pages. The classes by default also delete the right mark
whenever they put the section heading into the left mark.
The report and book classes \OnlyAt{\Class{report}\and
\Class{scrreprt}\and \Class{book}\and \Class{scrbook}} start one level
higher. Thus they use the chapter heading as the right mark in one-sided
printing. In two-sided printing, the chapter heading is the left mark
and the section heading is the right mark.
If you use \DescRef{maincls.pagestyle.myheadings}%
\IndexPagestyle{myheadings}%
\important{\DescRef{maincls.pagestyle.myheadings}}\textnote{manual
running head}, the marks in the page header still exist, and the page
numbers are placed in the same way, but section commands no longer set
the marks automatically. You can set them manually\important{%
\DescRef{\ThisCommonLabelBase.cmd.markright}\\
\DescRef{\ThisCommonLabelBase.cmd.markboth}} using the commands
\DescRef{\ThisCommonLabelBase.cmd.markright} and
\DescRef{\ThisCommonLabelBase.cmd.markboth}, which are described later
in this section.
\end{Explain}\par%
This distinction has been eliminated by %
\iffalse \Package{scrpage2} and now also by \fi%
\hyperref[cha:scrlayer]{\Package{scrlayer}}\IndexPackage{scrlayer}. Instead
of distinguishing between automatic\textnote{automatic and manual running
heads} and manual running heads by which page style is selected, there
are two new commands: \Macro{automark} and \Macro{manualmark}.%
}{%
\IfThisCommonLabelBase{scrlayer}{%
For most classes, the choice of a page style\,---\,generally
\PageStyle{headings} or \PageStyle{myheading}\,---\,determines whether
the running heads are created automatically or manually.
% TODO: Fix new translation
With \Package{scrlayer} the distinction is done with the two commands
\Macro{automark} and \Macro{manualmark}.%
% :ODOT
}{\InternalCommonFileUsageError}%
}%
The \Macro{manualmark}\important{\Macro{manualmark}} command switches to
manual marks and deactivates the automatic filling of the marks. In contrast,
\Macro{automark}\important{\Macro{automark}} and \Macro{automark*} define
which section levels should be used to set the mark automatically. The
optional argument is the \PName{section level of the right mark}, the
mandatory argument the \PName{section level of the left mark}. The
arguments should always be the name of a section level like
\PValue{part}, \PValue{chapter}, \PValue{section}, \PValue{subsection},
\PValue{subsubsection}, \PValue{paragraph}, or \PValue{subparagraph}.
Normally, the higher level should be used for the left mark and the lower
level for the right mark. This is only a convention and not a requirement,
but it makes sense.
Please note\textnote{Attention!} that not every class provides running heads
for every section level. For example, the standard classes\textnote{%
\KOMAScript{} vs. standard classes} never use \DescRef{maincls.cmd.part}
in the heading. The \KOMAScript{} classes, on the other hand, support all
levels.
The difference between \Macro{automark} and \Macro{automark*}%
\important{\Macro{automark*}} is that \Macro{automark} overrides all
previous commands to automatically set the mark, while \Macro{automark*}
changes only the behaviour of the section levels specified in its
arguments.%
\IfThisCommonLabelBase{scrlayer-scrpage}{}{ %
With this feature you can handle
relatively complex cases.%
}% Umbruchoptimierung
\IfThisCommonLabelBase{scrlayer-scrpage}{\iftrue}{\csname
iffalse\endcsname}%
\iffalse% Umbruchkorrekturtext
\iffree{}{\par
The obsolete package
\Package{scrpage2}\IndexPackage{scrpage2}\important{\Package{scrpage2}}
understands both \Macro{manualmark} and \Macro{automark}, but not
\Macro{automark*}. Therefore the following examples are not completely
transferable when using \Package{scrpage2}.%
}%
\fi
%
\begin{Example}
\phantomsection\xmpllabel{mark}%
Suppose you want chapter headings to be used as the running head of even
pages and the section heading to be the running head of odd pages, as
usual. But on odd pages you also want the chapter headings to be used as
the running head until the first section appears. To do so, you first
have to load \IfThisCommonLabelBase{scrlayer-scrpage}{%
\Package{scrlayer-scrpage}%
}{%
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
}
and select the \DescRef{\LabelBase.pagestyle.scrheadings} page style,
so the document starts with:
\begin{lstcode}
\documentclass{scrbook}
\usepackage{scrlayer-scrpage}
\pagestyle{scrheadings}
\end{lstcode}
Next, ensure that the chapter headings set both the left and the right
marks:
\begin{lstcode}
\automark[chapter]{chapter}
\end{lstcode}
Then the section heading should also set right marks:
\begin{lstcode}
\automark*[section]{}
\end{lstcode}
Here the starred version is used, since the previous \Macro{automark}
command should remain in effect. Additionally, the mandatory argument
for the \PName{section level of the left mark} is empty because this
mark should remain unchanged.
All that's missing now is a bit of document content to show the result:
\begin{lstcode}
\usepackage{lipsum}
\begin{document}
\chapter{Chapter Heading}
\lipsum[1-20]
\section{Section Heading}
\lipsum[21-40]
\end{document}
\end{lstcode}
We use the extremely useful \Package{lipsum}\IndexPackage{lipsum}
package to generate some dummy text with command
\Macro{lipsum}\IndexCmd{lipsum}.
If you test the example, you will see that the first page of the chapter
appears, as usual, without a running head, since this page automatically
uses the \PageStyle{plain} page style
\DescRef{\LabelBase.pagestyle.plain.scrheadings} (see the
\DescRef{maincls.cmd.chapterpagestyle} on
\DescPageRef{maincls.cmd.chapterpagestyle}). Pages~2--4 have the
chapter headings in the running head. After the section heading on
page~4, the running head of page~5 changes to this section heading. From
this page to the end, the running head alternates from page to page
between the chapter and section headings.%
\end{Example}
\fi
\IfThisCommonLabelBase{scrlayer}{}{%
\begin{Declaration}
\Option{automark}
\OptionVName{autooneside}{simple switch}
\Option{manualmark}
\end{Declaration}}
Instead of the commands described previously, you can also use the
\Option{manualmark}\important{\Option{manualmark}\\\Option{automark}} and
\Option{automark} options to switch between automatic and manual running
heads. \Option{automark} always uses the default\textnote{default}
\IfThisCommonLabelBase{scrlayer-scrpage}{\iftrue}{\csname
iffalse\endcsname}%
\lstinline|\automark[section]{chapter}| for classes with
\DescRef{maincls.cmd.chapter} and
\lstinline|\automark[subsection]{section}| for other classes.
\else
\begin{lstcode}
\automark[section]{chapter}
\end{lstcode}
for classes with \DescRef{maincls.cmd.chapter} and
\begin{lstcode}
\automark[subsection]{section}
\end{lstcode}
for other classes.
\fi
\IfThisCommonLabelBaseOneOf{scrlayer,scrlayer-scrpage}{%
In one-sided printing, you normally want only the higher section levels
to provide the running title.%
}{%
In one-sided printing, you normally do not want the lower section level
to influence the right mark. Instead, you want the higher section
level, which would appear in only the left mark in two-sided printing, to
be the running head of all pages.%
} The default option \Option{autooneside}\important{\Option{autooneside}}
corresponds to this behaviour. The option accepts the values for
simple switches listed in \autoref{tab:truefalseswitch},
\autopageref{tab:truefalseswitch}. If you deactivate this option, the
optional and mandatory arguments of \Macro{automark} and \Macro{automark*}
will again control the running head in one-sided printing.%
\IfThisCommonLabelBase{scrlayer-scrpage}{\iftrue}{\csname
iffalse\endcsname}%
\begin{Example}
\phantomsection\xmpllabel{mark.oneside}%
Suppose you have a one-sided report but want running heads similar to
those in the previous book example. Specifically, the chapter headings
should be used as the running head until the first section appears.
From the then on, the section heading should be used. So we modify the
previous example a little bit:
\begin{lstcode}
\documentclass{scrreprt}
\usepackage[autooneside=false]{scrlayer-scrpage}
\pagestyle{scrheadings}
\automark[section]{chapter}
\usepackage{lipsum}
\begin{document}
\chapter{Chapter Heading}
\lipsum[1-20]
\section{Section Heading}
\lipsum[21-40]
\end{document}
\end{lstcode}
As you can see an \DescRef{\LabelBase.cmd.automark*} command is not
required in this case. You should try the example with
\Option{autooneside} set to \PValue{true}, or remove the option, for
comparison. You will notice a difference in the running head from
page~4 on.
\end{Example}
\fi
Note\textnote{Attention!} that merely loading the package does not have any
effect on whether automatic or manual running heads are used, or what kind
of sectioning headings fill the marks. Only by explicitly using the option
\Option{automark} or \Option{manualmark}, or the command
\DescRef{\LabelBase.cmd.automark} or \DescRef{\LabelBase.cmd.manualmark},
will the conditions here be initialized.%
\IfThisCommonLabelBase{scrlayer}{\par%
You can find additional background information and examples of how to use
these commands in the documentation for the \Package{scrlayer} package
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
in \autoref{sec:scrlayer-scrpage.pagestyle.content}, starting on
\DescPageRef{scrlayer-scrpage.cmd.manualmark}.%
}{%
\EndIndexGroup%
}%
\EndIndexGroup
\IfThisCommonLabelBase{scrlayer}{% already described at \layercontentsmeasure
}{%
\begin{Declaration}
\OptionVName{draft}{simple switch}
\end{Declaration}
This \KOMAScript{} option accepts the values for simple switches
listed in \autoref{tab:truefalseswitch}, \autopageref{tab:truefalseswitch}.
If this option is active, all elements of the page styles will also show
rulers\index{ruler}%
\IfThisCommonLabelBase{scrlayer}{ for}{%
. This can sometimes be useful during}
the drafting process.%
\IfThisCommonLabelBase{scrlayer-scrpage}{ %
If this option has been set globally (see the optional argument
of \DescRef{\LabelBase.cmd.documentclass}) but you do not want the
rulers, you can deactivate them for this package alone by using
\OptionValue{draft}{false} as an optional argument of
\DescRef{\LabelBase.cmd.usepackage} while loading the package.%
}{}%
\EndIndexGroup%
}%
\begin{Declaration}
\Macro{MakeMarkcase}\Parameter{text}
\OptionVName{markcase}{value}
\end{Declaration}
Automatic running heads, but not manual ones, use \Macro{MakeMarkcase} for
their output. If the command has not been defined, e.\,g., by the class
while loading \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
}, it is defined by default to output the argument \PName{text} without
changes. But the default can be changed either by redefining
\Macro{MakeMarkcase}. Using the \DescRef{\LabelBase.option.markcase}%
\IndexOption{markcase}\important{\DescRef{\LabelBase.option.markcase}}
option with one of the values of \autoref{tab:scrlayer-scrpage.markcase}
also redefines \Macro{MakeMarkcase}.
\IfThisCommonLabelBase{scrlayer}{%
Because of the poor typographical quality of the primitive capitalisation
routine (see the explanation of \DescRef{scrlayer-scrpage.option.markcase}
in \autoref{sec:scrlayer-scrpage.pagestyle.content},
\autopageref{expl:scrlayer-scrpage.MakeUppercase}) the author of
\KOMAScript recommends that you avoid upper-case typesetting for running
heads.%
}{%
Unfortunately,\phantomsection\label{expl:\ThisCommonLabelBase.MakeUppercase}
the \LaTeX{} command for converting text to upper case\Index{upper case},
\Macro{MakeUppercase}\IndexCmd{MakeUppercase}, does not produce good
results because it neither spaces characters nor balances lines
appropriately. This is certainly in part due to the fact that a
typographically correct upper-case conversion requires analysing the
glyphs to account for the different letter shapes \iffree{and their
combinations}{} while balancing the block. I therefore recommend that
you avoid upper-case typesetting for running heads.%
} This is usually possible with \OptionValue{markcase}{used}\important{%
\OptionValue{markcase}{used}}\IndexOption[indexmain]{markcase~=used}.
However, some classes insert \Macro{MarkUppercase}, or even the \TeX{}
command \Macro{uppercase}, into the running heads. For such cases, you can
use the option \OptionValue{markcase}{noupper}%
\important{\OptionValue{markcase}{noupper}}%
\IndexOption[indexmain]{markcase~=noupper}. This will also deactivate
\Macro{MakeUppercase} and \Macro{uppercase} inside the running heads.
You can find all valid values for \Option{markcase} in
\autoref{tab:scrlayer-scrpage.markcase}%
\IfThisCommonLabelBase{scrlayer-scrpage}{}{,
\autopageref{tab:scrlayer-scrpage.markcase}}.%
\IfThisCommonLabelBase{scrlayer-scrpage}{%
\begin{table}
\centering
\caption[Available values for the \Option{markcase} option]{Available
values for the \Option{markcase} option to select upper/lower case
typesetting in automatic running heads}%
\label{tab:\ThisCommonLabelBase.markcase}%
\begin{desctabular}
\pventry{lower}{\IndexOption[indexmain]{markcase~=lower}%
redefines \DescRef{\LabelBase.cmd.MakeMarkcase} to convert the
automatic running heads into lower-case letters using
\Macro{MakeLowercase} (lower case typesetting).%
}%
\pventry{upper}{\IndexOption[indexmain]{markcase~=upper}%
redefines \DescRef{\LabelBase.cmd.MakeMarkcase} to convert the
automatic running heads into upper-case letters using
\Macro{MakeUppercase} (upper case typesetting).%
}%
\pventry{used}{\IndexOption[indexmain]{markcase~=used}%
redefines \DescRef{\LabelBase.cmd.MakeMarkcase} to use automatic
running heads without any case changes.%
}%
\entry{\PValue{ignoreuppercase}, \PValue{nouppercase},
\PValue{ignoreupper},
\PValue{noupper}}{\IndexOption[indexmain]{markcase~=noupper}%
redefines not only \DescRef{\LabelBase.cmd.MakeMarkcase} but also
\Macro{MakeUppercase} and \Macro{uppercase} locally to the running
heads to leave the automatic running heads unchanged.%
}%
\end{desctabular}
\end{table}
}{}%
\EndIndexGroup
\fi
\IfThisCommonLabelBase{scrlayer-scrpage}{\iffalse}{\csname iftrue\endcsname}
\begin{Declaration}
\Macro{righttopmark}
\Macro{rightbotmark}
\Macro{rightfirstmark}
\Macro{rightmark}
\Macro{lefttopmark}
\Macro{leftbotmark}
\Macro{leftfirstmark}
\Macro{leftmark}
\end{Declaration}
\LaTeX\ChangedAt{v3.16}{\Package{scrlayer}} typically uses a two-part
\TeX{} mark for page styles. Running heads can access the left part of that
mark with \DescRef{scrlayer.cmd.leftmark}%
\important{\DescRef{scrlayer.cmd.leftmark}}\IndexCmd{leftmark} and the right
part with \DescRef{scrlayer.cmd.rightmark}%
\important{\DescRef{scrlayer.cmd.rightmark}}\IndexCmd{rightmark}. In fact,
it was probably intended to use \DescRef{scrlayer.cmd.leftmark} for the
running head of left (even) pages and \DescRef{scrlayer.cmd.rightmark} for
the running head of right (odd) pages of two-sided documents. In
one-sided printing, however, the standard classes do not even set the left
part of the mark.
\TeX{} itself knows three ways to access a mark. The \Macro{botmark}%
\IndexCmd{botmark}\important{\Macro{botmark}} is the last valid mark of the
most recent page that has been built. If no mark has been set on the page,
it corresponds to the last mark set on the pages that have already been
shipped out. The \LaTeX{} command \DescRef{scrlayer.cmd.leftmark} uses
precisely this mark, so it returns the left part of the last mark of the
page. This corresponds exactly to \Macro{leftbotmark}%
\important{\Macro{leftbotmark}}. By comparison, \Macro{rightbotmark}%
\important{\Macro{rightbotmark}} prints the right part of this mark.
\Macro{firstmark}\IndexCmd{firstmark}\important{\Macro{firstmark}} is the
first mark of the last page that has been built. This is the first mark that
has been set on the page. If no mark has been set on the page, it
corresponds to the last mark of the pages that have already been shipped
out. The \LaTeX{} command \DescRef{scrlayer.cmd.rightmark} uses precisely
this mark, so it returns the right part of the first mark of the page. This
corresponds exactly to \Macro{rightfirstmark}%
\important{\Macro{rightfirstmark}}. By comparison, \Macro{leftfirstmark}%
\important{\Macro{leftfirstmark}} prints the left part of this mark.
\Macro{topmark}\IndexCmd{topmark}\important{\Macro{topmark}} is the content
that \Macro{botmark} had before building the current page. \LaTeX{} itself
does not use it. Nevertheless, \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
} provides \Macro{lefttopmark}\important{\Macro{lefttopmark}} to access the
left part of this mark and \Macro{righttopmark}%
\important{\Macro{righttopmark}} to access the right part.
Note\textnote{Attention!} that the left and right portions of the mark
can only be set together. Even if you use
\DescRef{scrlayer.cmd.markright}\IndexCmd{markright} to change only the
right part, the left part will set again (unchanged). Accordingly, in
two-sided printing, using the \PageStyle{headings}%
\important{\PageStyle{headings}}\IndexPagestyle{headings} page style,
the higher section levels always make both parts. For example,
\DescRef{scrlayer.cmd.chaptermark} uses \DescRef{scrlayer.cmd.markboth} with
an empty right argument in this case. This is the reason
\DescRef{scrlayer.cmd.rightmark} or \Macro{rightfirstmark} always shows an
empty value on pages which start a chapter, even if there was a
\DescRef{scrlayer.cmd.sectionmark} or \DescRef{maincls.cmd.section} on the
same page to make the right part of the mark.
Please note\textnote{Attention!} that using any of these commands to show
the left or right part of the mark as part of the page content may lead to
unexpected results. They are really meant for use in the header or footer
of a page style only. Therefore, they should always be part of the contents
of a layer when using \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
}. But it does not matter whether the layer is restricted to the background
or the foreground, since all layers are shipped out after building the
current page.
If you need more information about the mark mechanism
\iffree{of \TeX{}}{\unskip}, please have a look at
\cite[chapter~23]{knuth:texbook}. The topic is flagged there as an issue for
real experts. \IfThisCommonLabelBase{scrlayer}{% Umbruchkorrektur
So if the explanation above confused you, please don't worry about it.}{}%
\EndIndexGroup
\fi
\IfThisCommonLabelBase{scrlayer-scrpage-experts}{\iffalse}{%
\csname iftrue\endcsname}%
\begin{Declaration}
\IfThisCommonLabelBase{scrlayer-scrpage}{%
\Macro{leftmark}
\Macro{rightmark}
}{}%
\Macro{headmark}
\Macro{pagemark}
\end{Declaration}
\IfThisCommonLabelBase{scrlayer-scrpage}{%
If you want to depart from the predefined page styles, you typically need
to decide where to place the marks' contents. With
\Macro{leftmark}\important{\Macro{leftmark}} you can define what will
appear in the left mark when the page is output.
Similarly, you can use \Macro{rightmark}\important{\Macro{rightmark}} to
define the contents of the right mark.\iffree{}{ For information about
some subtleties when using these commands, see further
\DescRef{maincls-experts.cmd.rightmark} in
\autoref{sec:maincls-experts.addInfos},
\DescPageRef{maincls-experts.cmd.rightmark}.}
}{}%
You can make life easier with \Macro{headmark}\important{\Macro{headmark}}.
This extension of \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
} is a shorthand that resolves to either \Macro{leftmark} or
\Macro{rightmark} depending on whether the current page is even or odd.
The \Macro{pagemark}\important{\Macro{pagemark}} command has nothing to do
with \TeX's mark mechanism. It is serves to output a formatted page number.
\BeginIndex{FontElement}{pagenumber}\LabelFontElement{pagenumber}%
The font of element
\FontElement{pagenumber}\important{\FontElement{pagenumber}} will be used
for the output. This can be changed using the \Macro{setkomafont} or
\DescRef{maincls.cmd.addtokomafont} commands (see also
\autoref{sec:maincls.textmarkup}, \DescPageRef{maincls.cmd.setkomafont}).%
\EndIndex{FontElement}{pagenumber}%
\IfThisCommonLabelBase{scrlayer-scrpage}{\iftrue}{%
\par %
If you are interested in an example showing the usage of the
\Macro{headmark} and \Macro{pagemark} commands, see
\autoref{sec:scrlayer-scrpage.pagestyle.content},
\PageRefxmpl{scrlayer-scrpage.cmd.headmark}. Internally, the
\IfThisCommonLabelBase{scrlayer-scrpage}{%
\Package{scrlayer-scrpage}%
}{%
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
} package uses many such features of
\IfThisCommonLabelBase{scrlayer-scrpage}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
}{%
\Package{scrlayer}%
}.%
\csname iffalse\endcsname}%
\begin{Example}
\phantomsection\xmpllabel{cmd.headmark}%
Suppose you want the running head to be aligned to the left margin and
the page number to the right margin in one-sided printing. The following
minimal working example does just this:
\begin{lstcode}
\documentclass{scrreprt}
\usepackage{blindtext}
\usepackage[automark]{scrlayer-scrpage}
\pagestyle{scrheadings}
\ihead{\headmark}
\ohead*{\pagemark}
\chead{}
\cfoot[]{}
\begin{document}
\blinddocument
\end{document}
\end{lstcode}
The \Package{blindtext}\IndexPackage{blindtext} package and its
\Macro{blinddocument}\IndexCmd{blinddocument} command have been used
here to quickly generate sample document content for the example.
The \DescRef{scrlayer-scrpage.cmd.ihead}\IndexCmd{ihead} and
\DescRef{scrlayer-scrpage.cmd.ohead*}\IndexCmd{ohead*} commands
configure the desired marks. The starred variant
\DescRef{scrlayer-scrpage.cmd.ohead*} %
\iffalse% Umbruchvarianten
configures the page number mark not only on the pages set with the
\DescRef{\LabelBase.pagestyle.scrheadings}%
\IndexPagestyle{scrheadings} page style but also those set
with the \PageStyle{plain} %
\else%
also configures the page number with the %
\fi%
\DescRef{\LabelBase.pagestyle.plain.scrheadings}%
\IndexPagestyle{plain.scrheadings} page style used on the first page of
a chapter.%
Because these page styles have predefined marks in the centre of the
header and footer, those elements are cleared by using
\DescRef{scrlayer-scrpage.cmd.chead} and
\DescRef{scrlayer-scrpage.cmd.cfoot} with empty arguments. Alternatively
you could use
\DescRef{scrlayer-scrpage-experts.cmd.clearpairofpagestyles}
\IndexCmd{clearpairofpagestyles} \emph{before}
\DescRef{scrlayer-scrpage.cmd.ihead}. You will find this command
described in \autoref{sec:scrlayer-scrpage-experts.pagestyle.pairs}.
\end{Example}
Please note\textnote{Attention!} that the empty optional argument of
\DescRef{scrlayer-scrpage.cmd.cfoot} in the example above is not the same
as omitting the optional argument. You should try it yourself and have a
look at the difference in the footer of the first page.%
\fi
\IfThisCommonLabelBase{scrlayer-scrpage}{% Umbruchvarianten
Advanced users can find more mark-setting commands%
}{%
If the options for the marks described above are not sufficient,
additional commands for advanced users are documented%
} %
starting on \IfThisCommonLabelBase{scrlayer-scrpage}{%
\DescPageRef{scrlayer-scrpage-experts.cmd.righttopmark}}{%
\DescPageRef{\ThisCommonLabelBase.cmd.righttopmark}}.%
\iffalse% Umbruchkorrektur
\ For example, there you can find
\DescRef{scrlayer-scrpage-experts.cmd.leftfirstmark} and
\DescRef{scrlayer-scrpage-experts.cmd.rightbotmark}, which are quite useful
for documents like lexicons.%
\fi%
\EndIndexGroup
\begin{Declaration}
\Macro{partmarkformat}%
\Macro{chaptermarkformat}%
\Macro{sectionmarkformat}%
\Macro{subsectionmarkformat}%
\Macro{subsubsectionmarkformat}%
\Macro{paragraphmarkformat}%
\Macro{subparagraphmarkformat}
\end{Declaration}
\KOMAScript{} classes and the \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
} package typically use these commands internally to format the section
numbers. They also support the \DescRef{maincls.cmd.autodot} mechanism of
the \KOMAScript{} classes. If desired, these commands can be redefined to
achieve a different formatting of section numbers.%
\IfThisCommonLabelBase{scrlayer-scrpage}{\iftrue}{%
\ See the example in \autoref{sec:scrlayer-scrpage.pagestyle.content},
\PageRefxmpl{scrlayer-scrpage.cmd.sectionmarkformat} for more
information.%
\csname iffalse\endcsname%
}%
\begin{Example}
\phantomsection\xmpllabel{cmd.sectionmarkformat}%
\iftrue
For example, if you want to have running heads without a section
number, this is how you do it:
\else
Suppose you want section headings without the section number to appear
in the running head. This can be accomplished easily with the
following:
\fi
\begin{lstcode}
\renewcommand*{\sectionmarkformat}{}
\end{lstcode}
\end{Example}
\ExampleEndFix
\fi%
\EndIndexGroup
\begin{Declaration}
\Macro{partmark}\Parameter{Text}%
\Macro{chaptermark}\Parameter{Text}%
\Macro{sectionmark}\Parameter{Text}%
\Macro{subsectionmark}\Parameter{Text}%
\Macro{subsubsectionmark}\Parameter{Text}%
\Macro{paragraphmark}\Parameter{Text}%
\Macro{subparagraphmark}\Parameter{Text}
\end{Declaration}
Most classes use these commands internally to set the marks according to the
sectioning commands. The argument should contain the text without the number
of the sectioning unit. The number is automatically determined using the
current section level if you use numbered headings.
However\textnote{Attention!}, not all classes use such a command for
every section level. The standard classes\textnote{\KOMAScript{} vs.
standard classes}, for example, do not call \Macro{partmark}
\IfThisCommonLabelBase{scrlayer-scrpage}{%
upon a \Macro{part} command}{%
, whereas the \KOMAScript{} classes naturally support \Macro{partmark} as
well}.
If you redefine these commands, be sure\textnote{Attention!} to check
whether the numbers will be output via the
\DescRef{maincls.counter.secnumdepth} before setting the number even if you
do not change the \DescRef{maincls.counter.secnumdepth} counter yourself,
because packages and classes may do so locally and rely on correct handling
of \DescRef{maincls.counter.secnumdepth}.
The \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
} package also redefines these commands whenever you use
\DescRef{scrlayer.cmd.automark} or \DescRef{scrlayer.cmd.manualmark} or the
corresponding options, to activate or deactivate the desired running heads.%
\EndIndexGroup
\begin{Declaration}
\Macro{markleft}\Parameter{left mark}
\Macro{markright}\Parameter{right mark}
\Macro{markboth}\Parameter{left mark}\Parameter{right mark}
\Macro{markdouble}\Parameter{mark}
\end{Declaration}
Regardless of whether you are working with manual or automatic running
heads, you can always change the contents of the \PName{left mark} or the
\PName{right mark} using these commands. Note that the left-hand mark
resulting from \Macro{leftmark}\IndexCmd{leftmark}%
\important{\Macro{leftmark}} will be the last mark placed on the
corresponding page, while the right-hand mark resulting from
\Macro{rightmark}\IndexCmd{rightmark}\important{\Macro{rightmark}} is the
first mark placed on the corresponding page. For more details, see
\iffree{}{the additional explanation of
\DescRef{maincls-experts.cmd.rightmark} in
\autoref{sec:maincls-experts.addInfos},
\DescPageRef{maincls-experts.cmd.rightmark} or} to
\DescRef{scrlayer.cmd.rightfirstmark}\IfThisCommonLabelBase{scrlayer}{}{ in
\autoref{sec:scrlayer.pagestyle.content}},
\DescPageRef{scrlayer.cmd.rightfirstmark}.
If you are using manual running heads\Index{running head>manual}, the marks
remain valid until they are explicitly replaced by reusing the corresponding
commands. However, if you are using automatic running heads, the marks can
become invalid with the next section heading, depending on the automatic
configuration.
You can also use these commands in conjunction with the starred versions of
the sectioning commands.%
\IfThisCommonLabelBase{scrlayer-scrpage}{\iftrue}{%
\ You can find detailed examples illustrating usage of \Macro{markboth}
with the \IfThisCommonLabelBase{scrlayer-scrpage}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
}{%
\Package{scrlayer}%
}-derived package \IfThisCommonLabelBase{scrlayer-scrpage}{%
\Package{scrlayer-scrpage}%
}{%
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
} in
\autoref{sec:scrlayer-scrpage.pagestyle.content},
\PageRefxmpl{scrlayer-scrpage.cmd.markboth}.%
\csname iffalse\endcsname%
}%
\begin{Example}
\phantomsection\xmpllabel{cmd.markboth}%
Suppose you write a preface of several pages placed just before the
table of contents but not appearing in it. However, since you use
dividing lines in your header, you want a running head for this preface:
\begin{lstcode}
\documentclass[headsepline]{book}
\usepackage{scrlayer-scrpage}
\pagestyle{scrheadings}
\usepackage{blindtext}
\begin{document}
\chapter*{Preface}
\markboth{Preface}{Preface}
\blindtext[20]
\tableofcontents
\blinddocument
\end{document}
\end{lstcode}
At first glance, this seems to produce the desired result. Taking a
second look, however, you can see that the running title
``\texttt{Preface}'' does not appear in upper-case letters, unlike the
other running heads. But that's easy to change:
\begin{lstcode}
\documentclass[headsepline]{book}
\usepackage{scrlayer-scrpage}
\pagestyle{scrheadings}
\usepackage{blindtext}
\begin{document}
\chapter*{Preface}
\markboth{\MakeMarkcase{Preface}}{\MakeMarkcase{Preface}}
\blindtext[20]
\tableofcontents
\blinddocument
\end{document}
\end{lstcode}
Using command \DescRef{\LabelBase.cmd.MakeMarkcase} results in getting
the same letter case as for automatic running heads.
Now, let's move the \DescRef{maincls.cmd.tableofcontents} in front
of the preface and remove the \Macro{markboth} command. You'll
discover that the preface now has the running head
``\texttt{CONTENTS}''. This is due to a quirk of
\DescRef{maincls.cmd.chapter*} (see also \autoref{sec:maincls.structure}
on \DescPageRef{maincls.cmd.chapter*}). If you do not want a running
head here, you can easily accomplish this by passing two empty arguments
to \Macro{markboth}:
\begin{lstcode}
\documentclass[headsepline]{book}
\usepackage{scrlayer-scrpage}
\pagestyle{scrheadings}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\chapter*{Preface}
\markboth{}{}
\blindtext[20]
\blinddocument
\end{document}
\end{lstcode}
\end{Example}
\fi%
% TODO: Fix new translation
The\ChangedAt{v3.28}{\Package{scrlayer}} command
\Macro{markdouble}\important{\Macro{markdouble}} does change the left mark
and the right mark to the same contents. So
\Macro{markdouble}\Parameter{mark} is a shorter form of
\Macro{markboth}\Parameter{mark}\Parameter{mark} with two identical
arguments.%
% :ODOT
\EndIndexGroup
\fi
\IfThisCommonLabelBase{scrlayer-scrpage}{\iffalse}{\csname iftrue\endcsname}
\begin{Declaration}
\Macro{GenericMarkFormat}\Parameter{name of the section level}
\end{Declaration}
By default, this command is used to format all section numbers in running
heads below the subsection level, and for classes without
\DescRef{maincls.cmd.chapter}, also for the section and subsection levels,
unless the respective mark commands for those levels are defined before
loading \Package{scrlayer}. The command causes the package to use
\Macro{@seccntmarkformat}\IndexCmd{@seccntmarkformat}%
\important{\Macro{@seccntmarkformat}} if this internal command is defined,
as it is in the \KOMAScript{} classes. Otherwise \Macro{@seccntformat}%
\IndexCmd{@seccntformat}\important{\Macro{@seccntformat}} will be used,
which is provided by the \LaTeX{} kernel. The mandatory argument of the
command contains the name of a sectioning command, such as \PValue{chapter}
or \PValue{section} \emph{without} the backslash prefix.
By redefining this command, you can change the default number format for all
sectioning commands that use it. Classes can also change the default
formatting also by defining this command.%
\IfThisCommonLabelBase{scrlayer-scrpage-experts}{\iftrue}{%
\par %
A detailed example illustrating the interplay of the
\Macro{GenericMarkFormat} command with the
\DescPageRef{\ThisCommonLabelBase.cmd.chaptermark} command and
\DescRef{\ThisCommonLabelBase.cmd.sectionmarkformat} or
\DescRef{\ThisCommonLabelBase.cmd.subsectionmarkformat} when using
the \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
}-derived package \IfThisCommonLabelBase{scrlayer-scrpage}{%
\Package{scrlayer-scrpage}%
}{%
\hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}%
} is shown in \autoref{sec:scrlayer-scrpage-experts.pagestyle.content},
\PageRefxmpl{scrlayer-scrpage-experts.cmd.GenericMarkFormat}.%
\csname iffalse\endcsname}%
\begin{Example}
\phantomsection
\xmpllabel{cmd.GenericMarkFormat}%
Suppose you want the section numbers of all levels in the running head
of an article to be printed in white within a black box. Since the
commands \Macro{sectionmarkformat} and \Macro{subsectionmarkformat} of
the \Package{scrlayer} package are defined with
\Macro{GenericMarkFormat} for articles using the standard \LaTeX{}
\Class{article} class, you need to redefine only this one command:
\begin{lstcode}
\documentclass{article}
\usepackage{blindtext}
\usepackage[automark]{scrlayer-scrpage}
\pagestyle{scrheadings}
\usepackage{xcolor}
\newcommand*{\numberbox}[1]{%
\colorbox{black}{\strut~\textcolor{white}{#1}~}}
\renewcommand*{\GenericMarkFormat}[1]{%
\protect\numberbox{\csname the#1\endcsname}\enskip}
\begin{document}
\blinddocument
\end{document}
\end{lstcode}
The colour has been changed using the
\Package{xcolor}\IndexPackage{xcolor} package. More details can be found
in that package's manual (see \cite{package:xcolor}).
This example also uses an invisible strut. Any detailed \LaTeX{}
introduction should explain the related command \Macro{strut}.
A helper macro, \Macro{numberbox}, has been defined to format the number
within a box. This command is prefixed in the redefinition of
\Macro{GenericMarkFormat} by \Macro{protect} in order to protect it from
expansion. This is necessary because otherwise the upper-case letter
conversion of \Macro{MakeUppercase} for the running head, would result
in using the colours ``\texttt{BLACK}'' and ``\texttt{WHITE}'' instead
of ``\texttt{black}'' and ``\texttt{white}'', and those colours are
undefined. Alternatively, you could define \Macro{numberbox} using
\Macro{DeclareRobustCommand*} instead of \Macro{newcommand*} and omit
\Macro{protect} (see \cite{latex:clsguide}).
If you wanted to achieve the same effect with a \KOMAScript{} class or
with the standard \LaTeX{} classes \Class{book} or \Class{report}, you
would also have to redefine, respectively,
\DescRef{scrlayer.cmd.sectionmarkformat}\IndexCmd{sectionmarkformat}%
\important{\DescRef{scrlayer.cmd.sectionmarkformat}} and
\DescRef{scrlayer.cmd.subsectionmarkformat}%
\IndexCmd{subsectionmarkformat}%
\important{\DescRef{scrlayer.cmd.subsectionmarkformat}}, or
\DescRef{scrlayer.cmd.chaptermarkformat}%
\IndexCmd{chaptermarkformat}%
\important{\DescRef{scrlayer.cmd.chaptermarkformat}} and
\DescRef{scrlayer.cmd.sectionmarkformat}%
\IndexCmd{sectionmarkformat}%
\important{\DescRef{scrlayer.cmd.sectionmarkformat}}, because
these are not by default defined using \Macro{GenericMarkFormat}:
\begin{lstcode}
\documentclass[headheight=19.6pt]{scrbook}
\usepackage{blindtext}
\usepackage[automark]{scrlayer-scrpage}
\pagestyle{scrheadings}
\usepackage{xcolor}
\newcommand*{\numberbox}[1]{%
\colorbox{black}{\strut~\textcolor{white}{#1}~}}
\renewcommand*{\GenericMarkFormat}[1]{%
\protect\numberbox{\csname the#1\endcsname}\enskip}
\renewcommand*{\chaptermarkformat}{\GenericMarkFormat{chapter}}
\renewcommand*{\sectionmarkformat}{\GenericMarkFormat{section}}
\begin{document}
\blinddocument
\end{document}
\end{lstcode}
% TODO: New translation
Here, option \DescRef{typearea.option.headheight} is used to eliminate
the warning, that also has been reported in the previous example.%
% :ODOT
\end{Example}
\fi%
\EndIndexGroup
\fi
\IfThisCommonLabelBase{scrlayer-scrpage}{\iffalse}{\csname iftrue\endcsname}
\begin{Declaration}
\Macro{@mkleft}\Parameter{left mark}%
\Macro{@mkright}\Parameter{right mark}%
\Macro{@mkdouble}\Parameter{mark}%
\Macro{@mkboth}\Parameter{left mark}\Parameter{right mark}
\end{Declaration}
Within classes and packages, you may only want to use running heads if
automatic running heads are active (see the
\DescRef{scrlayer.option.automark} option and the
\DescRef{scrlayer.cmd.automark} command on
\DescPageRef{scrlayer-scrpage.cmd.automark}). In the standard \LaTeX{}
classes, this only works with \Macro{@mkboth}. This command corresponds to
either \Macro{@gobbletwo}, which simply consumes both mandatory arguments,
or \DescRef{scrlayer.cmd.markboth}, which sets both the \PValue{left mark}
and the \PValue{right mark}. Packages like \Package{babel} also change
\Macro{\@mkboth}, e.\,g., to enable language switching in the running head.
However, if you want to change only the \PName{left mark} or the
\PName{right mark} without changing the other one, there is no corresponding
command. The \IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
} package itself needs such commands to implement automatic running heads.
So if \Macro{@mkleft}, for setting the left mark only, or \Macro{@mkright},
for setting the right mark only, or \Macro{@mkdouble}, for setting both
marks with the same content, is undefined when loading
\IfThisCommonLabelBase{scrlayer}{%
\Package{scrlayer}%
}{%
\hyperref[cha:scrlayer]{\Package{scrlayer}}%
}, this package will define them. This definition uses the state of
\Macro{@mkboth} as an indication of whether to use automatic running heads.
The commands will set the marks only in the case of automatic running heads.
Class and package authors can also fall back on these commands as appropriate
if they want to set the left or right the marks only if automatic running
heads are activated.%
\EndIndexGroup%
\fi%
\IfThisCommonLabelBase{scrlayer}{%
\par
For more information about manipulating the contents of page styles, see
also \autoref{sec:scrlayer-scrpage.pagestyle.content} starting at
\autopageref{sec:scrlayer-scrpage.pagestyle.content}.%
}{}%
\EndIndexGroup
%%% Local Variables:
%%% mode: latex
%%% mode: flyspell
%%% ispell-local-dictionary: "en_GB"
%%% TeX-master: "../guide.tex"
%%% TeX-PDF-mode: t
%%% End:
% LocalWords: scrlayer