使用 Scrlayer-Scrpage 在每一章的第一页应用不同的格式

使用 Scrlayer-Scrpage 在每一章的第一页应用不同的格式

由于我使用 KOMA 脚本,所以我决定学习 Scrlayer-Scrpage,但我无法复制使用 Fancyhdr 所获得的结果。

这是使用 Fancyhdr 的:

\documentclass[oneside, openany]{scrbook}
\usepackage{lipsum}

\usepackage{fancyhdr}
\fancypagestyle{my_style}{    
    \fancyhf{}
    \fancyhead[RO]{\leftmark}
    \fancyhead[LE]{\rightmark}
    \fancyhead[LO,RE]{\thepage}
}    
\pagestyle{my_style}
\fancypagestyle{plain}{
    \fancyhf{}
    \fancyfoot[C]{\thepage}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0.4pt}
}

\usepackage{etoc}           
\renewcommand{\etocaftertitlehook}{\pagestyle{plain}}
\renewcommand{\etocaftertochook}{\thispagestyle{plain}}

\begin{document}
\title{title}
\maketitle

\tableofcontents
\thispagestyle{empty}
\addtocontents{toc}{\protect\thispagestyle{empty}} 

\addchap{Copyright}
\pagenumbering{roman}

\chapter{Chapter}
\pagenumbering{arabic}

\section{hello}
\lipsum[1-20]
\end{document}

取得了以下成果:

  1. 使用 etoc,即使 ToC 超过 1 页,也不会编号或换行。
  2. 除章节的第一页外,内容上方都会画一条线。

这是我使用 Scrlayer-Scrpage 的尝试:

\documentclass[oneside, openany, headsepline]{scrbook}
\usepackage{lipsum}

\usepackage[]{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\pagemark}
\ohead{\headmark}

\usepackage{etoc}           
\renewcommand{\etocaftertitlehook}{\pagestyle{plain}}
\renewcommand{\etocaftertochook}{\thispagestyle{plain}}

\begin{document}
\title{title}
\maketitle

\tableofcontents
\thispagestyle{empty}
\addtocontents{toc}{\protect\thispagestyle{empty}} 

\addchap{Copyright}
\pagenumbering{roman}

\chapter{Chapter}
\pagenumbering{arabic}

\section{hello}
\lipsum[1-20]
\end{document}

它确实成功地避免了对目录进行编号,但我找不到区分章节前几页的方法。Scrlayer-Scrpage 的手册有时会列出几个选项,甚至不告诉它们放在哪里,我找不到任何解决方案。

除了上述问题之外,我还想知道如何更改这两个软件包中的标题标记。Fancyhdr 将其打印为第 1 章。而 Scrlayer-Scrpage 则将其打印为 1。

答案1

大多数书籍类的章节首页的页面样式与其他页面的页面样式不同。标准类book使用硬编码的\thispagestyle{plain}页面样式\chapter。KOMA-Script 类scrbook使用\thispagestyle{\chapterpagestyle}默认的\chapterpagestyle也是plain

如果你看一下scrlayer-scrpage示例的结果:

包含问题示例的两页

本章第一页(左侧)与其他页面(右侧)有几点不同:

  • 第一页没有页眉分隔线/规则,其他页面有页眉分隔线/规则
  • 第一页没有页眉 VS 其他页面有页眉
  • 第一页没有页码,其他页有页码

首先是因为选项headsepline不会在页面样式 plain 上设置头部分隔规则。您可以使用以下命令将其打开plainheadsepline。但我想,你不想要它。所以这很好

第二个原因是,由于您删除了页面样式的默认设置scrheadingsplain.scrheadings(这与在加载时完成的plain之后的操作相同)使用\pagestyle{scrheadings}scrlayer-scrpage\clearpairofpagestyls而且您\headmark只添加了scrheadings,而没有添加到plain.scrheadings。这是绝对正确的。

第三个原因与第二个原因几乎相同,但您\pagemark只添加了scrheadings。因此,如果您想在章节的第一页显示页码,则必须添加到\pagemarkplain.scrheadings这可以通过替换来完成\ihead经过\ihead*。但这会将页码添加到页首。我认为,您希望页码位于页脚的中间。因此您必须使用

\cfoot[\pagemark]{}

注意,可选参数\cfoot等确实会改变普通页面样式的相应元素。

因此:

\documentclass[oneside, openany, headsepline]{scrbook}
\usepackage{lipsum}

\usepackage[]{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\pagemark}
\ohead{\headmark}

\usepackage{etoc}           
\renewcommand{\etocaftertitlehook}{\pagestyle{plain}}
\renewcommand{\etocaftertochook}{\thispagestyle{plain}}

\begin{document}
\title{title}
\maketitle

\tableofcontents
\thispagestyle{empty}
\addtocontents{toc}{\protect\thispagestyle{empty}} 

\addchap{Copyright}
\pagenumbering{roman}

\chapter{Chapter}
\pagenumbering{arabic}

\section{hello}
\lipsum[1-20]
\end{document}

你会得到

第一章第页有两页带页码

您甚至可以删除使用etoc并使用\BeforeStartingTOC\AfterStartingTOC使用页面样式设置目录的第一页,empty但使用页面样式设置目录的其余部分plain

\documentclass[oneside, openany, headsepline]{scrbook}
\usepackage{lipsum}

\usepackage{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\pagemark}
\ohead{\headmark}
\cfoot[\pagemark]{}

\BeforeStartingTOC{\pagestyle{plain}\thispagestyle{empty}}
\AfterStartingTOC{\clearpage}

\begin{document}
\title{title}
\maketitle

\tableofcontents

\addchap{Copyright}
\pagenumbering{roman}

\chapter{Chapter}
\pagenumbering{arabic}

\section{hello}
\lipsum[1-20]

\end{document}

顺便说一句:您的fancyhdr定义与您的描述不同。它确实还在页面上设置了分隔线plain。我不建议这样做,但您可以这样做:

\documentclass[oneside, openany, headsepline,footlines=1]{scrbook}
\usepackage{lipsum}

\usepackage[plainfootsepline]{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\pagemark}
\ohead{\headmark}
\cfoot[\pagemark]{}

\BeforeStartingTOC{\pagestyle{plain}\thispagestyle{empty}}
\AfterStartingTOC{\clearpage}
\AddToLayerPageStyleOptions{plain.scrheadings}{% whenever page style plain.scrheadings is selected
  onselect={\KOMAoptions{footsepline}}% activate footsepline
}
\AddToLayerPageStyleOptions{scrheadings}{% whenever page style scrheadings is selected
  onselect={\KOMAoptions{footsepline=false}}% deactivate footsepline
}

\begin{document}
\title{title}
\maketitle

\tableofcontents

\addchap{Copyright}
\pagenumbering{roman}

\chapter{Chapter}
\pagenumbering{arabic}

\section{hello}
\lipsum[1-20]

\end{document}

在此处输入图片描述

在这里我用的是\AddToLayerPageStyleOptions设置 KOMA-Script 选项footsepline取决于选定的页面样式

如果你还想使用大写字母,请参见选项markcase在 KOMA-Script 手册中。如果您想要前缀,CHAPTER请参阅\chaptermarkformat。如果您想更改字体,请参阅元素pageheadfootpageheadpagenumber和命令\setkomafont\addtokomafont

相关内容