diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrlayer.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrlayer.dtx | 313 |
1 files changed, 252 insertions, 61 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrlayer.dtx b/Master/texmf-dist/source/latex/koma-script/scrlayer.dtx index 86bedf742eb..0fc52a4e682 100644 --- a/Master/texmf-dist/source/latex/koma-script/scrlayer.dtx +++ b/Master/texmf-dist/source/latex/koma-script/scrlayer.dtx @@ -1,8 +1,8 @@ -% \CheckSum{3933} +% \CheckSum{4042} % \iffalse^^A meta-comment % ====================================================================== % scrlayer.dtx -% Copyright (c) Markus Kohm, 2012-2017 +% Copyright (c) Markus Kohm, 2012-2018 % % This file is part of the LaTeX2e KOMA-Script bundle. % @@ -20,7 +20,7 @@ % This work consists of all files listed in manifest.txt. % ---------------------------------------------------------------------- % scrlayer.dtx -% Copyright (c) Markus Kohm, 2012-2017 +% Copyright (c) Markus Kohm, 2012-2018 % % Diese Datei ist Teil der LaTeX2e KOMA-Script-Sammlung. % @@ -57,7 +57,7 @@ % Right brace \} Tilde \~} % % \iffalse^^A meta-comment -%%% From File: $Id: scrlayer.dtx 2684 2017-10-13 13:35:13Z kohm $ +%%% From File: $Id: scrlayer.dtx 3015 2018-09-03 10:51:32Z kohm $ %<identify>%%% (run: identify) %<init>%%% (run: init) %<options>%%% (run: options) @@ -67,9 +67,9 @@ \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi \begingroup \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}} - \filedate$Date: 2017-10-13 15:35:13 +0200 (Fri, 13 Oct 2017) $ + \filedate$Date: 2018-09-03 12:51:32 +0200 (Mon, 03 Sep 2018) $ \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} - \filerevision$Revision: 2684 $ + \filerevision$Revision: 3015 $ \edef\reserved@a{% \noexpand\endgroup \noexpand\ProvidesFile{scrlayer.dtx}% @@ -572,54 +572,10 @@ % \begin{macrocode} %<*(package|class)&body> \providecommand*{\@mkleft}{% - \begingroup - \ifx\@mkboth\markboth \aftergroup\markleft - \else - \ifx\@mkboth\@gobbletwo \aftergroup\@gobble - \else \def\@gobbletwo##1##2{}% - \ifx \@mkboth\@gobbletwo \aftergroup\@gobble - \else -%<class> \ClassWarning{\KOMAClassName}{% -%<package> \PackageWarning{scrlayer}{% - package incompatibility detected!\MessageBreak - \string\@mkboth it neither \string\markboth nor any\MessageBreak - kind of two arguments gobbling,\MessageBreak - e.g., \string\@gobbletwo.\MessageBreak - So I don't known, what to do\MessageBreak - with \string\@mkleft.\MessageBreak - Nevertheless, \string\markleft\space will be\MessageBreak - used% - }% - \aftergroup\markleft - \fi - \fi - \fi - \endgroup + \IfActiveMkBoth{\markleft}{\@gobble}% }% \providecommand*{\@mkright}{% - \begingroup - \ifx\@mkboth\markboth \aftergroup\markright - \else - \ifx\@mkboth\@gobbletwo \aftergroup\@gobble - \else \def\@gobbletwo##1##2{}% - \ifx \@mkboth\@gobbletwo \aftergroup\@gobble - \else -%<class> \ClassWarning{\KOMAClassName}{% -%<package> \PackageWarning{scrlayer}{% - package incompatibility detected!\MessageBreak - \string\@mkboth it neither \string\markboth nor any\MessageBreak - kind of two arguments gobbling,\MessageBreak - e.g., \string\@gobbletwo.\MessageBreak - So I don't known, what to do\MessageBreak - with \string\@mkright.\MessageBreak - Nevertheless, \string\markright\space will be\MessageBreak - used% - }% - \aftergroup\markright - \fi - \fi - \fi - \endgroup + \IfActiveMkBoth{\markright}{\@gobble}% }% \providecommand*{\@mkdouble}[1]{% \@mkboth{#1}{#1}% @@ -1411,6 +1367,44 @@ \csname @scr@l@\scr@current@layer @onesidetrue\endcsname } % \end{macrocode} +% \changes{v3.26}{2018/07/14}{new attribute \texttt{beforecontents}}^^A +% \item[\Option{beforecontents}:] code to be executed immediately before +% setting the contents. See also modification attribute +% \texttt{addbeforecontents}. +% \begin{macrocode} +\FamilyCSKey[.definelayer]{KOMAarg}{beforecontents} + {scr@l@\scr@current@layer @precontents@hook} +% \end{macrocode} +% \changes{v3.26}{2018/07/14}{new attribute \texttt{aftercontents}}^^A +% \item[\Option{aftercontents}:] code to be executed immediately before +% setting the contents. See also modification attribute +% \texttt{addaftercontents}. +% \begin{macrocode} +\FamilyCSKey[.definelayer]{KOMAarg}{aftercontents} + {scr@l@\scr@current@layer @postcontents@hook} +% \end{macrocode} +% \changes{v3.26}{2018/07/14}{new attribute \texttt{artifact}}^^A +% \item[\Option{artifact}:] reserved for tagging packages. The artifact can +% either be a boolean or a general value. Boolean false will unset the +% attribute. Boolean true is the same like empty. All other values will be +% stored. +% \begin{macrocode} +\DefineFamilyKey[.definelayer]{KOMAarg}{artifact}[true]{% + \FamilySetBool{KOMAarg}{artifact}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \if@tempswa + \expandafter\let\csname scr@l@\scr@current@layer @artifact\endcsname + \@empty + \else + \expandafter\let\csname scr@l@\scr@current@layer @artifact\endcsname + \relax + \fi + \else + \FamilyKeyStateProcessed + \@namedef{scr@l@\scr@current@layer @artifact}{#1}% + \fi +} +% \end{macrocode} % \end{description} % % Attribute modifications are attributes, that modify existing basic @@ -1484,6 +1478,44 @@ \FamilyKeyStateProcessed } % \end{macrocode} +% \changes{v3.26}{2018/07/14}{new attribute \texttt{addbeforecontents}}^^A +% \item[\Option{addbeforecontents}:] code to be executed immediately before +% setting the contents. The new code will be added before the old code. +% \begin{macrocode} +\DefineFamilyKey[.definelayer]{KOMAarg}{addbeforecontents}{% + \scr@ifundefinedorrelax{scr@l@\scr@current@layer @precontents@hook}{% + \expandafter\def + \csname scr@l@\scr@current@layer @precontents@hook\endcsname{#1}% + }{% + \expandafter\edef + \csname scr@l@\scr@current@layer @precontents@hook\endcsname{% + \unexpanded\expandafter\expandafter\expandafter{% + \csname scr@l@\scr@current@layer @precontents@hook\endcsname}% + \unexpanded{#1} + }% + }% + \FamilyKeyStateProcessed +} +% \end{macrocode} +% \changes{v3.26}{2018/07/14}{new attribute \texttt{addaftercontents}}^^A +% \item[\Option{addaftercontents}:] code to be executed immediately before +% setting the contents. The new code will be added after the old code. +% \begin{macrocode} +\DefineFamilyKey[.definelayer]{KOMAarg}{addaftercontents}{% + \scr@ifundefinedorrelax{scr@l@\scr@current@layer @postcontents@hook}{% + \expandafter\def + \csname scr@l@\scr@current@layer @postcontents@hook\endcsname{#1}% + }{% + \expandafter\edef + \csname scr@l@\scr@current@layer @postcontents@hook\endcsname{% + \unexpanded{#1}% + \unexpanded\expandafter\expandafter\expandafter{% + \csname scr@l@\scr@current@layer @postcontents@hook\endcsname}% + }% + }% + \FamilyKeyStateProcessed +} +% \end{macrocode} % \end{description} % % Compounding attributes are attributes, that set up several basic attributes @@ -1729,6 +1761,8 @@ \FamilyKeyStateProcessed } % \end{macrocode} +% \changes{v3.26}{2018/07/14}{clone code for \texttt{precontents@hook}, +% \texttt{postcontents@hook} and \texttt{artifact} added}^^A % \item[\texttt{clone=\meta{layer}}:] set up the new layer by the settings % of the given \meta{layer}. % \begin{macrocode} @@ -1756,6 +1790,9 @@ \scrlayer@clone@switch{\scr@current@layer}{#1}{twoside}% \scrlayer@clone@switch{\scr@current@layer}{#1}{floatpage}% \scrlayer@clone@switch{\scr@current@layer}{#1}{nonfloatpage}% + \scrlayer@clone@attribute{\scr@current@layer}{#1}{precontents@hook}% + \scrlayer@clone@attribute{\scr@current@layer}{#1}{postcontents@hook}% + \scrlayer@clone@attribute{\scr@current@layer}{#1}{artifact}% }% } % \end{macrocode} @@ -1921,6 +1958,31 @@ % \end{macro}^^A \ProvideLayer % \end{macro}^^A \DeclareNewLayer % +% \begin{macro}{\ModifyLayers} +% \changes{v3.26}{2018/07/14}{new}^^A +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A +% Like \cs{ModifyLayer} but allows a list of layers instead of only one layer. +% For the commands \cs{DeclareLayer}, \cs{ProvideLayer} and +% \cs{RedeclareLayer} this does not make any sense, so there are not similar +% list commands for these commands. +% \begin{macrocode} +%<*package&body> +\newcommand{\ModifyLayers}[2][]{% + \edef\scr@current@layer{#2}% + \@for\scr@current@layer:=\scr@current@layer\do{% + \scr@trim@spaces\scr@current@layer + \ifx\scr@current@layer\@emtpy\else + \edef\scr@current@layer{% + \unexpanded{\ModifyLayer[{#1}]}{\scr@current@layer}% + }% + \scr@current@layer + \fi + }% + \let\scr@current@layer\@empty +} +%</package&body> +% \end{macrocode} +% \end{macro}^^A \ModifyLayers % % \begin{macro}{\GetLayerContents} % \changes{v3.16}{2015/01/26}{new} @@ -1942,6 +2004,8 @@ % % % \begin{macro}{\DestroyLayer} +% \changes{v3.26}{2018/07/14}{destroy pre-contents hook, post-contents hook +% and artifact}^^A % \begin{description} % \item[\Parameter{string}:] the name of the layer, that should be % destroyed @@ -1989,6 +2053,9 @@ \expandafter\let\csname if@scr@l@#1@nonfloatpage\endcsname\relax \expandafter\let\csname @scr@l@#1@nonfloatpagefalse\endcsname\relax \expandafter\let\csname @scr@l@#1@nonfloatpagetrue\endcsname\relax + \expandafter\let\csname scr@l@#1@precontents@hook\relax + \expandafter\let\csname scr@l@#1@postcontents@hook\relax + \expandafter\let\csname scr@l@#1@artifact\relax }{% %<*trace> \PackageInfo{scrlayer}{\string\DestroyLayer{#1} ignored,\MessageBreak @@ -2596,12 +2663,13 @@ } % \end{macrocode} % \begin{macro}{\scrlayer@declare@ps@by@layers} -% \changes{v3.15}{2014/12/28}{fix: \cs{linewidth} replaced by -% \cs{textwidth}}^^A -% \changes{v3.18}{2015/06/09}{usage of \cs{parbox[b]} instead of -% \cs{parbox[t]} because of strange effect with package -% \textsf{multicol}}^^A -% \changes{v3.24}{2017/05/22}{test for \cs{if@ps@singlespacing} added}^^A +% \changes{v3.15}{2014/12/28}{fix: \cs{linewidth} replaced by +% \cs{textwidth}}^^A +% \changes{v3.18}{2015/06/09}{usage of \cs{parbox[b]} instead of +% \cs{parbox[t]} because of strange effect with package +% \textsf{multicol}}^^A +% \changes{v3.24}{2017/05/22}{test for \cs{if@ps@singlespacing} added}^^A +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % Needed, because of page style aliases. Same arguments like % \cs{DeclarePageStyleByLayers} but, \#1 is the name of the page style, \#2 is % the list of options and \#3 is still the list of layers. @@ -2758,6 +2826,7 @@ }% \@namedef{@ps@#1@layers}{}% \@for \reserved@a:=#3\do {% + \scr@trim@spaces\reserved@a \ifstr\reserved@a\@empty{}{% \expandafter\@cons\csname @ps@#1@layers\endcsname{{\reserved@a}}% }% @@ -2847,6 +2916,7 @@ % \end{macro}^^A \ForEachLayerOfPageStyle % % \begin{macro}{\scrlayer@do@page@style@element@layer} +% \changes{v3.26}{2018/07/14}{added hooks and artifact code}^^A % Helper macro to show one layer. First argument is either ``background'' or % ``foreground'', second argument is either ``odd'' or ``even'', and third % argument is the name of the layer. Note, that in draft mode for every layer @@ -2871,7 +2941,13 @@ (\csname scr@l@#3@w\endcsname,% \csname scr@l@#3@h\endcsname)% [\csname scr@l@#3@align\endcsname]% - {\layercontentsmeasure}% + {% + \scrlayer@predraftmeasure@hook + \scrlayer@beginartifact{}% + \layercontentsmeasure + \scrlayer@endartifact{}% + \scrlayer@postdraftmeasure@hook + }% \fi \scr@layerbox(\csname scr@l@#3@x\endcsname,% \csname scr@l@#3@y\endcsname)% @@ -2879,8 +2955,26 @@ \csname scr@l@#3@h\endcsname)% [\csname scr@l@#3@align\endcsname]% {\csname layer\csname scr@l@#3@mode\endcsname - mode\expandafter\endcsname - \csname scr@l@#3@contents\endcsname}% + mode\expandafter\endcsname{% + \csname scr@l@#3@precontents@hook\endcsname + \scr@ifundefinedorrelax{scr@l@#3@artifact}{}{% + \expandafter\expandafter\expandafter + \scrlayer@beginartifact + \expandafter\expandafter\expandafter{% + \csname scr@l@#3@artifact\endcsname + }% + \csname scr@l@#3@contents\endcsname + \expandafter\expandafter\expandafter + \scrlayer@endartifact + \expandafter\expandafter\expandafter{% + \csname scr@l@#3@artifact\endcsname + }% + }{% + \csname scr@l@#3@contents\endcsname + }% + \csname scr@l@#3@postcontents@hook\endcsname + }% + }% \fi \fi \fi @@ -2888,6 +2982,42 @@ \endgroup } % \end{macrocode} +% \begin{macro}{\scrlayer@predraftmeasure@hook} +% \changes{v3.26}{2018/07/14}{new (internal)}^^A +% The hooks that will be executed before setting the draft measuring. +% \begin{macrocode} +\newcommand*{\scrlayer@predraftmeasure@hook}{} +% \end{macrocode} +% \begin{macro}{\BeforeDraftMeasuringLayer} +% \changes{v3.26}{2018/07/14}{new}^^A +% New code will be added in front of the hook. +% \begin{macrocode} +\newcommand*{\BeforeDraftMeasuringLayer}[1]{% + \edef\scrlayer@predraftmeasure@hook{% + \unexpanded{#1}\unexpanded\expandafter{\scrlayer@predraftmeasure@hook}% + }% +} +% \end{macrocode} +% \end{macro}^^A \BeforeDraftMeasuringLayer +% \end{macro}^^A \scrlayer@predraftmeasure@hook +% \begin{macro}{\scrlayer@postdraftmeasure@hook} +% \changes{v3.26}{2018/07/14}{new (internal)}^^A +% The hook that will be executed after setting the draft measuring. +% \begin{macrocode} +\newcommand*{\scrlayer@postdraftmeasure@hook}{} +% \end{macrocode} +% \begin{macro}{\AfterDraftMeasuringLayer} +% \changes{v3.26}{2018/07/14}{new}^^A +% New code will be added at the end of the hook. +% \begin{macrocode} +\newcommand*{\AfterDraftMeasuringLayer}[1]{% + \expandafter\def\expandafter\scrlayer@postdraftmeasure@hook\expandafter{% + \scrlayer@postdraftmeasure@hook #1% + }% +} +% \end{macrocode} +% \end{macro}^^A \AfterDraftMeasuringLayer +% \end{macro}^^A \scrlayer@postdraftmeasure@hook % \begin{macro}{\scr@layerbox} % \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by % \cs{kernel@ifnextchar}}^^A @@ -3145,9 +3275,11 @@ % \end{macrocode} % % \begin{macro}{\AddLayersToPageStyle} +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % \begin{macro}{\AddLayersAtBeginOfPageStyle} % \begin{macro}{\AddLayersAtEndOfPageStyle} % \begin{macro}{\RemoveLayersFromPageStyle} +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % \begin{description} % \item[\Parameter{string}:] the name of the page style to be modified (must % be expandable and result in a string). @@ -3174,6 +3306,7 @@ \edef\reserved@b{\GetRealPageStyle{#1}}% \IfLayerPageStyleExists{\reserved@b}{% \@for \reserved@a:=#2\do {% + \scr@trim@spaces\reserved@a \ifstr\reserved@a\@empty{}{% \expandafter\@cons\csname @ps@\reserved@b @layers\endcsname {{\reserved@a}}% @@ -3207,6 +3340,7 @@ \edef\reserved@b{\GetRealPageStyle{#1}}% \IfLayerPageStyleExists{#1}{% \@for \reserved@a:=#2\do {% + \scr@trim@spaces\reserved@a \ifstr\reserved@a\@empty{}{% \expandafter\remove@layer@from@page@style\expandafter{\reserved@a}% {\reserved@b}% @@ -3268,7 +3402,9 @@ % \end{macro}^^A \AddLayersToPageStyle % % \begin{macro}{\AddLayersToPageStyleBeforeLayer} +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % \begin{macro}{\AddLayersToPageStyleAfterLayer} +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % \begin{description} % \item[\Parameter{string}:] the name of the page style to be modified (must % be expandable and result in a string). @@ -3296,6 +3432,7 @@ \expandafter\@cons\csname @ps@\reserved@b @layers\endcsname{{##1}}% \ifstr{##1}{#3}{% \@for \reserved@a:=#2\do {% + \scr@trim@spaces\reserved@a \ifstr\reserved@a\@empty{}{% \expandafter\@cons\csname @ps@\reserved@b @layers\endcsname {{\reserved@a}}% @@ -3321,6 +3458,7 @@ \ifstr{##1}\@empty{}{% \ifstr{##1}{#3}{% \@for \reserved@a:=#2\do {% + \scr@trim@spaces\reserved@a \ifstr\reserved@a\@empty{}{% \expandafter\@cons\csname @ps@\reserved@b @layers\endcsname {{\reserved@a}}% @@ -3457,6 +3595,55 @@ % \end{macro}^^A \AddToLayerPageStyleOptions % \end{macro}^^A \ModifyLayerPageStyleOptions % +% \begin{macro}{\scrlayer@beginartifact} +% \changes{v3.26}{2018/07/14}{new (semi internal)}^^A +% \begin{macro}{\scrlayer@endartifact} +% \changes{v3.26}{2018/07/14}{new (semi internal)}^^A +% These macros are reserved for tagging packages. The first one is executed +% after the initial contents hook, the last one is executed after the final +% contents hook. Both executions are done only, if the \texttt{artifact} +% option of the layer has been used an was not boolean false. With boolean +% true the argument will be empty. All other values will be passed as +% argument. +% +% In case of package \textsf{tagpdf} the following definition would be +% usefull (here automatically done after loading the package, if the package +% does not do its own definitions): +% \begin{macrocode} +%<*package&body> +\RequirePackage{scrlfile} +\BeforePackage{tagpdf}{% +% \end{macrocode} +% Deactivation of the two commands before loading \textsf{tagpdf}, so that +% after loading the package \cs{providecommand} can be used to do a new +% default definition. +% \begin{macrocode} + \let\scrlayer@beginartifact\relax + \let\scrlayer@endartifact\relax +} +\AfterPackage*{tagpdf}{% + \providecommand*{\scrlayer@beginartifact}[1]{% + \ifstr{#1}{}{% + \tagmcbegin{artifact}% + }{% + \tagmcbegin{artifact=#1}% + }% + }% + \providecommand*{\scrlayer@endartifact}[1]{% + \tagmcend + }% +} +% \end{macrocode} +% But the default definition (if \textsf{tagpdf} has not already been loaded) +% are simple dummies: +% \begin{macrocode} +\providecommand*{\scrlayer@beginartifact}[1]{} +\providecommand*{\scrlayer@endartifact}[1]{} +%</package&body> +% \end{macrocode} +% \end{macro}^^A \scrlayer@endartifact +% \end{macro}^^A \scrlayer@beginartifact +% % \begin{macro}{\DeclarePageStyleAlias} % \begin{macro}{\DeclareNewPageStyleAlias} % \begin{macro}{\ProvidePageStyleAlias} @@ -3621,7 +3808,9 @@ % \end{macro}^^A \IfLayerPageStyleExists % % \begin{macro}{\IfLayerAtPageStyle} +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % \begin{macro}{\IfSomeLayersAtPageStyle} +% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}^^A % \begin{macro}{\IfLayersAtPageStyle} % \begin{description} % \item[\Parameter{string}:] the name of the page style to be tested (must @@ -3678,6 +3867,7 @@ \begingroup \@tempswafalse \@for \reserved@a:=#2\do {% + \scr@trim@spaces\reserved@a \edef\reserved@a{\noexpand\IfLayerAtPageStyle{#1}{\reserved@a}}% \reserved@a{\@tempswatrue}{}% }% @@ -3699,6 +3889,7 @@ \fi }{% \@for \reserved@a:=#2\do {% + \scr@trim@spaces\reserved@a \edef\reserved@a{\noexpand\IfLayerAtPageStyle{#1}{\reserved@a}}% \reserved@a{}{\@tempswafalse}% }% |