使用 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}