页眉中的章节范围:如何从上一页继承章节标记?

页眉中的章节范围:如何从上一页继承章节标记?

使用 fancyhdr 和 extramarks 包,我想设置一个标题,其中包含页面上实际显示的部分范围。这意味着我有 3 种可能的情况:

  • 仅显示 1 个部分:标题中仅应出现一个数字。
  • 至少显示 2 个部分:第一个和最后一个数字应出现在标题中。
  • 前一节在页面顶部结束,然后开始新的一节:从上一节开始编号,然后应该出现页面的最后一个新编号。

到目前为止,我设法使用 ifthen 包为两种情况设置了代码,但我无法弄清楚如何正确表达第三种情况。

以下是一个例子:

\documentclass[a4paper, twoside, 12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{extramarks}
\usepackage{ifthen}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyfoot{}
\fancyhead{}

\fancyhead[CE, CO]{\ifthenelse{\equal{\firstleftmark}{\lastleftmark}}
    {\firstleftmark}
    {\firstleftmark -- \lastleftmark}}
\fancyfoot[C]{\thepage}
\usepackage{lipsum}

\begin{document}
    \section{}
    \lipsum[1]
    
    \section{}
    \lipsum[1-5]

    \section{}
    \lipsum[1-4]
    
\end{document}

编译后,问题出现在第 2 页。仅考虑新部分。如何在页眉中创建一个范围编号,以“继承”页面顶部结束部分的编号?

答案1

我不知道如何使用fancyhdr和来做到这一点extramarks,但这里有一个建议使用包裹scrlayer-scrpage

\documentclass[a4paper, twoside, 12pt]{article}
\usepackage[utf8]{inputenc}% shouldn't be needed any more
\usepackage[frenchb]{babel}
\usepackage[headsepline]{scrlayer-scrpage}
\automark[section]{section}
\clearpairofpagestyles
\chead{%
  \Ifstr{\lefttopmark}{}% After deleting the marks or at the very beginning of
                        % the document, use \leftfirstmark instead of
                        % \lefttopmark
  {%
    \Ifstr{\leftfirstmark}{\rightbotmark}%
          {\leftfirstmark}%
          {\leftfirstmark\ -- \rightbotmark}%
  }%
  {%
    \Ifstr{\lefttopmark}{\rightbotmark}%
          {\lefttopmark}%
          {\lefttopmark\ -- \rightbotmark}%
  }%
}
\cfoot*{\pagemark}
\renewcommand*{\sectionmark}[1]{\markboth{\thesection}{\thesection}}

\usepackage{lipsum}

\begin{document}
    \section{}
    \lipsum[1]
    
    \section{}
    \lipsum[1-5]

    \section{}
    \lipsum[1-4]
    
\end{document}

三页输出

相关内容