目标:我希望读者知道自己处于哪个部分,即使某个部分是换页的。
我之前一直使用\renewcommand{\sectionmark}[1]{\markright{#1}}
,然后\fancyhead[C]{\sffamily \bfseries \rightmark}
使该部分的标题出现在标题栏中,但遗憾的是,这不会考虑包装的连续部分,并且始终显示页面上的第一个新部分(如果有)。
今天我玩了一下,发现了\afterpage
我使用的命令
\renewcommand{\sectionmark}[1]{
\markboth{#1}{#1} % make \leftmark and \rightmark refer to the current section title
\afterpage{\markboth{\leftmark}{\rightmark}} % buffer command to \afterpage so that the next page gets the current marks
}
它现在适用于换行部分,但问题是,在新页面上开始且之前没有文本的部分无法覆盖前一个标记。由于最后一节在页面结束之前结束,而下一节是新页面上的第一部分,因此在标题中包含前一节的名称毫无意义。
下面是一个说明我的问题的例子。
- 页眉应该为“test”、“test”和“test4”。
- 如果没有 \afterpage,它们是“test”、“test2”和“test4”。
- 使用 \afterpage 时,它们是“test”、“test”、“test3”。
有没有什么办法可以让它工作?
\documentclass[11pt,a4paper]{scrartcl}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Packages
% Unicode
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
% Fonts
\usepackage[T1]{fontenc}
\usepackage{lmodern}
% Other packages
\usepackage{fancyhdr} % heading and footer
\usepackage{afterpage} % runs command after the current page
\usepackage{ifthen} %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Formatting
\pagestyle{fancy} % set pagestyle
\fancyhf{} % Clear header and footer
\setcounter{secnumdepth}{-1} % Remove numbering from sections
% Header
\renewcommand{\sectionmark}[1]{
\markboth{#1}{#1} % make \leftmark and \rightmark refer to the current section title
%\afterpage{\markboth{\leftmark}{\rightmark}} % buffer command to \afterpage so that the next page gets the current section mark
}
\renewcommand{\subsectionmark}[1]{} % ignore subsections
\renewcommand{\headrulewidth}{1pt}
\fancyhead[C]{\sffamily \bfseries
\rightmark
% \ifthenelse{\equal{\rightmark}{\leftmark}} % if
% {\leftmark} % then
% {\rightmark\ --\ \leftmark} % else
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Body
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
% first page's header should be "test"
\section{test}
Text from test section
\newpage
% second page's header should also be "test"
More text from test section
\section{test2}
Text from test2 section
\section{test3}
Text from test3 section
\newpage
% third page's header should be "test4"
\section{test4}
Text from test4 section
\end{document}
答案1
您的目标可以通过“titleps”包来实现。下面我将包含您的示例,并做了一些更改。 \newpage 似乎干扰了页眉。我用“lipsum”包中的文本替换了它。在第三部分中,文本被放大,以强制将第四部分的标题移到下一页的顶部。该示例编译为四页,标题分别为“test”、“test”、“test3”、“test4”。
\documentclass[11pt,a4paper]{scrartcl}
% Packages
% Unicode
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
% Fonts
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lipsum}
\usepackage[outermarks]{titleps} % 'outermarks' assures titles for continuing section
\def\header{}
\newpagestyle{main}{
\setheadrule{.8pt}
\sethead{\bf{\sectiontitle}}
{\global\let\header\sectiontitle}
{\bf{\thepage}}}
\pagestyle{main}
% Body
\begin{document}
% first page's header should be "test"
\section{test}
Text from test section\\
\lipsum
% second page's header should also be "test"
More text from test section
\section{test2}
Text from test2 section
\section{test3}
Text from test3 section\\
{\large \lipsum}
% third page's header should be "test4"
\section{test4}
Text from test4 section
\end{document}