由于我使用 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}
取得了以下成果:
- 使用 etoc,即使 ToC 超过 1 页,也不会编号或换行。
- 除章节的第一页外,内容上方都会画一条线。
这是我使用 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
。但我想,你不想要它。所以这很好
第二个原因是,由于您删除了页面样式的默认设置scrheadings
和plain.scrheadings
(这与在加载时完成的plain
之后的操作相同)使用\pagestyle{scrheadings}
scrlayer-scrpage
\clearpairofpagestyls
而且您\headmark
只添加了scrheadings
,而没有添加到plain.scrheadings
。这是绝对正确的。
第三个原因与第二个原因几乎相同,但您\pagemark
只添加了scrheadings
。因此,如果您想在章节的第一页显示页码,则必须添加到\pagemark
。plain.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
。如果您想更改字体,请参阅元素pageheadfoot
,pagehead
,pagenumber
和命令\setkomafont
和\addtokomafont
。