更改页面样式对但使用 KOMA-Script 保留纯文本/标题

更改页面样式对但使用 KOMA-Script 保留纯文本/标题

我想将文档中某些页面的页面样式切换为不同的纯标题对(使用\thispagestyle)。当在plain页面上发生此切换时,切换应为新页面样式的纯文本版本,并相应地切换headings页面。考虑以下 MWE:

\documentclass{scrreprt}

\usepackage{mwe}
\usepackage{scrlayer-scrpage}

\pagestyle{scrheadings}
\chead{This is not a plain page!}

\newpairofpagestyles[scrheadings]{specialfoot}{\cfoot*{I am special}}

\begin{document}

\chapter{First Chapter}
\thispagestyle{specialfoot}
\lipsum

\end{document}

这里,\thispagestyle恰好位于以章节开头的页面上,因此页面样式最初为plain.scrheadings。如果使用 进行切换\thispagestyle{specialfoot},则此信息会丢失,并会打印不需要的标题。\thispagestyle{plain.specialfoot}如果在最初为 样式的页面上使用 ,则当然会产生相反的问题scrheadings。我事先并不知道切换将在哪些页面上进行。

我如何切换scrheadings/plain.scrheadingsspecialfoot保留样式的plain.specialfootplain-part”?也就是说,如果没有切换,是否有办法检查当前页面将使用哪种页面样式进行排版?

答案1

也许以下内容可以帮助您获得期望的结果:

\documentclass{scrreprt}

\usepackage{mwe}% only for dummy text
\usepackage{scrlayer-scrpage}% sets pagestyle scrheadings automatically
\chead{This is not a plain page!}

%\newpairofpagestyles[scrheadings]{specialfoot}{\cfoot*{I am special}}

\usepackage{etoolbox}
\newbool{specialfooter}

\newcommand*\thispagespecialfooter{\booltrue{specialfooter}}
\KOMAoptions{
  onpsforeground={%
    \ifbool{specialfooter}{\cfoot*{I am special}\global\boolfalse{specialfooter}}{}%
  }
}

\begin{document}

\chapter{First Chapter}
\thispagespecialfooter
\lipsum[1-20]

\chapter{Second Chapter}
\lipsum[1-5]
\thispagespecialfooter
\lipsum[6-15]
\end{document}

在此处输入图片描述

在此处输入图片描述

答案2

尽管esdd 的方法\thispagestyle对于问题中的例子来说,这种方法效果很好,但“真正”切换页面样式在许多情况下可能是可取的,甚至是必要的。在发现设置\@specialpagetrue并存储此页面使用的样式后,我最终想出了以下方法\@specialstyle

\documentclass{scrreprt}

\usepackage{mwe}
\usepackage{scrlayer-scrpage}

\makeatletter
    \def\@corresponding@pagestyle#1#2{\expandafter\@maybeplainprefix\expandafter{\romannumeral-`X#1}#2}
    \def\@maybeplainprefix#1{\@@maybeplainprefix#1.\@empty plain.\@empty\@empty}
    \def\@@maybeplainprefix#1plain.#2\@empty{\ifx#1\@empty\@empty\else\expandafter\@gobbleto@empty\fi}
    \def\@gobbleto@empty#1\@empty{}

    \def\pagestylepair#1{\pagestyle{\@corresponding@pagestyle{\currentpagestyle}{#1}}}
    \def\thispagestylepair#1{{%
        \edef\@thispagestyle@name{%
            \if@specialpage
                \@corresponding@pagestyle{\@specialstyle}{#1}%
            \else
                \@corresponding@pagestyle{\currentpagestyle}{#1}%
            \fi
        }%
        \expandafter\thispagestyle\expandafter{\@thispagestyle@name}%
    }}
\makeatother

\pagestyle{scrheadings}
\chead{This is not a plain page!}

\newpairofpagestyles[scrheadings]{specialfoot}{\cfoot*{I am special}}

\begin{document}

\chapter{First Chapter}
\thispagestylepair{specialfoot}
\lipsum

\end{document}

使用\pagestylepair\thispagestylepair代替\pagestyle\thispagestyle将保留“简单状态”。


请注意,只会扩展第一个参数,直到达到一个不可扩展的标记。这意味着,如果当前页面样式(或)为,\@corresponding@pagestyle它将不起作用。不过,这应该不是问题。\@specialstyleplain\@empty

相关内容