![如果新章节从页面中间开始,则在页眉中显示章节编号,除非章节从页面顶部开始](https://linux22.com/image/462999/%E5%A6%82%E6%9E%9C%E6%96%B0%E7%AB%A0%E8%8A%82%E4%BB%8E%E9%A1%B5%E9%9D%A2%E4%B8%AD%E9%97%B4%E5%BC%80%E5%A7%8B%EF%BC%8C%E5%88%99%E5%9C%A8%E9%A1%B5%E7%9C%89%E4%B8%AD%E6%98%BE%E7%A4%BA%E7%AB%A0%E8%8A%82%E7%BC%96%E5%8F%B7%EF%BC%8C%E9%99%A4%E9%9D%9E%E7%AB%A0%E8%8A%82%E4%BB%8E%E9%A1%B5%E9%9D%A2%E9%A1%B6%E9%83%A8%E5%BC%80%E5%A7%8B.png)
我正在课堂上写论文oneside
scrbook
,希望章节编号和名称显示在所有页面的左上角(新章节开始的页面除外)。我面临的问题是,如果新章节从页面中间开始,那么新的章节编号和标题就会显示出来,而我想显示页面顶部的章节编号和标题。以下是我在网上找到的代码几乎修复了这个问题:
\documentclass[oneside]{scrbook}
\usepackage{lipsum}
\usepackage{xcolor}
\RequirePackage[headsepline=true,footsepline=false]{scrlayer-scrpage}
\makeatletter
\def\leftmark{\expandafter\@leftmark\topmark\@empty\@empty}
\makeatother
\renewcommand{\sectionmark}[1]{\markleft{\textcolor{black}{\thesection}\ ~ #1}}
\clearpairofpagestyles % clear default page style
\lohead{~\leftmark} % section name and number on top left
\begin{document}
\chapter{Introduction}
\section{First section}
\lipsum[1-8]
\section{Second section}
\lipsum[1-1]
\section{Third section}
\lipsum[1-2]
\end{document}
但是,在新部分从页面顶部开始的情况下,页眉仍显示前一节的编号和标题。最简单的方法是调整上述代码以保持相同的功能,但确保当新部分从页面顶部开始时,页眉显示那章节编号和标题?
答案1
您可以使用\leftfirstmark
并删除对的重新定义\leftmark
。但是,对于所示的示例,我只会使用\automark[section]{section}
:
\documentclass[oneside]{scrbook}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage[headsepline=true,footsepline=false]{scrlayer-scrpage}% You should use \usepackage to load packages in documents.
\automark[section]{section}
\clearpairofpagestyles % clear default page style
\ihead{\headmark} % head mark as defined using \automark in the page head
%\ofoot*{\pagemark}% Maybe adding pagination would be a good idea?
\begin{document}
\chapter{Introduction}
\section{First section}
\lipsum[1-8]
\section{Second section}
\lipsum[1-1]
\section{Third section}
\lipsum[1-2]
\end{document}
KOMA-Script 手册中描述了其他命令,例如:\lefttopmark
,,\leftfirstmark
。\leftbotmark
例如,如果您使用\lefttopmark
:
\documentclass[oneside]{scrbook}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage[headsepline=true,footsepline=false]{scrlayer-scrpage}% You should use \usepackage to load packages in documents.
\automark[section]{section}
\clearpairofpagestyles % clear default page style
\ihead{\lefttopmark} % See the KOMA-Script manual for the meaning of \lefttopmark.
%\ofoot*{\pagemark}% Maybe adding pagination would be a good idea?
\begin{document}
\chapter{Introduction}
\section{First section}
\lipsum[1-8]
\section{Second section}
\lipsum[1-1]
\section{Third section}
\lipsum[1-2]
\end{document}
你会得到:
因此没有标记,结果为:获取上一页的最后一个标记,除非该部分从最开始开始。因此,您需要额外的代码来处理这种情况,例如:
\documentclass[oneside]{scrbook}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage[headsepline=true,footsepline=false]{scrlayer-scrpage}% You should use \usepackage to load packages in documents.
\automark[section]{section}
\clearpairofpagestyles % clear default page style
\ihead{\lefttopmark} % See the KOMA-Script manual for the meaning of \lefttopmark.
% \ofoot*{\pagemark}% Maybe adding pagination would be a good idea?
\newpairofpagestyles{sectionpagestyle}{\ihead{\leftfirstmark}}
\makeatletter
\AddtoDoHook{heading/postinit/section}{%
\ifdim \dimexpr\pagegoal-\pagetotal\relax<3\baselineskip
\pagebreak[4]%
\thispagestyle{sectionpagestyle}%
\typeout{Do it!}%
\else
\typeout{\the\pagegoal, \the\pagetotal, \the\baselineskip}%
\fi
\@gobble
}
\makeatother
\begin{document}
\chapter{Introduction}
\section{First section}
\lipsum[1-8]
\section{Second section}
\lipsum[1-1]
\section{Third section}
\lipsum[1-6]
\section{Fourth section}
\lipsum[1]
\end{document}
但请注意:这样的代码可能会失败,例如,如果节头后面跟着一个巨大的不可破坏的盒子。
顺便说一句:如果您想要在标题中的章节编号和章节标题之间留出额外的空格,请不要重新定义,\sectionmark
例如\sectionmarkformat
\renewcommand*{\sectionmarkformat}{\thesection\autodot\hspace{1.5em}}
\automark
有关、\leftfirstmark
和\headmark
的更多信息,请参阅 KOMA-Script 手册\sectionmarkformat
。有关使用 KOMA-Script 的页面样式的更多信息,请参阅,例如KOMA-Script Wiki 中的“如何更改页眉和页脚”还提供德语版本。
离题:在示例中,我建议使用scrreprt
(without option) 而不是scrbook
with option oneside
,但也许没有显示使用scrbook
而不是 的原因scrreprt
。