我想将文档中某些页面的页面样式切换为不同的纯标题对(使用\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.scrheadings
以specialfoot
保留样式的plain.specialfoot
“ plain
-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
它将不起作用。不过,这应该不是问题。\@specialstyle
plain\@empty