我正在使用文档类处理单面 LaTeX 文档scrreprt
,并用它scrpage2
来自定义页面的页眉和页脚。目前,相应的章节名称显示在每页的右上角,使用序言中的以下代码:
\usepackage[autooneside]{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\automark{chapter}
\rohead{\headmark}
现在我想改变这一点,这样当一个章节中的一个部分开始时,它\headmark
应该改变为格式
章节名称 - 部分名称
在包含此节文本的所有页面上,直到此节结束。如果我更改\automark
为\automark{section}
,则只显示节名称,而不再显示章节名称。我怎样才能同时显示两者?是否也可以将章节名称放在每页的左上角,将节名称放在右上角?
答案1
这正是您所需要的。唯一需要做的是正确定义\sectionmark
:
\documentclass{scrreprt}
\usepackage[autooneside]{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\automark{chapter}
\renewcommand\sectionmark[1]{\markright{\MakeMarkcase {\thesection\hskip .5em\relax#1}}}
\rohead{\ifnum\expandafter\pdfstrcmp\botmark=0 \rightmark\else\leftmark{} --- \rightmark\fi}
\usepackage{lipsum}
\begin{document}
\chapter{Cht}
\section{Sct}
\lipsum
\section{SScctt}
\lipsum
\end{document}
这实际上表明Section -- Chapter
,为了向他们展示相反的方向,请\leftmark{} --- \rightmark
改为\rightmark{} --- \leftmark
。
答案2
一种可能的解决方案是使用scrreprt
class 选项twoside=semi
(边距类似于oneside
,但不同于\leftmark
和\rightmark
)。
\documentclass[twoside=semi]{scrreprt}
\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\lehead{\leftmark}
\rehead{\rightmark}
\lohead{\leftmark}
\rohead{\rightmark}
\usepackage{lipsum}
\begin{document}
\chapter{foo}
\section{foobar}
\lipsum[1-12]
\chapter{bla}
\end{document}
答案3
请注意,scrpage2 已弃用。因此建议使用scrlayer-scrpage
。
\documentclass{scrreprt}
\usepackage[automark,autooneside=false]{scrlayer-scrpage}
\clearpairofpagestyles
\ohead{\leftmark\ifstr{\rightmark}{\leftmark}{}{ -- \rightmark}}
\usepackage{lipsum}
\begin{document}
\chapter{Cht}
\section{Sct}
\lipsum
\section{SScctt}
\lipsum
\chapter{Next}
\lipsum
\end{document}
如果您想使用过时的包scrpage2
删除选项autooneside
并使用\automark[section]{chapter}
。
\documentclass{scrreprt}
\usepackage{scrpage2}
\automark[section]{chapter}
\pagestyle{scrheadings}
\clearscrheadfoot
\ohead{\leftmark\ifstr{\rightmark}{\leftmark}{}{ -- \rightmark}}
\usepackage{lipsum}
\begin{document}
\chapter{Cht}
\section{Sct}
\lipsum
\section{SScctt}
\lipsum
\chapter{Next}
\lipsum
\end{document}