如何使页眉显示连续部分的标题?

如何使页眉显示连续部分的标题?

目标:我希望读者知道自己处于哪个部分,即使某个部分是换页的。

我之前一直使用\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}

相关内容