我希望每一页都有范围显示其涵盖的章节,与页码相对,并附有名称第一新节(如果有新节)从该页开始。章节可以从奇数页或偶数页开始。我还希望章节的第一页具有完全相同的样式:节范围位于内页眉边距旁边,页码位于外页眉边距旁边。如果章节的前几页没有“第一”节,则页眉中应仅显示页码。
这个问题与关于在标题中正确显示节号的问题;我认为正确的解决方案可能取决于答案中给出的信息。
我总是使用memoir
-package。
格式示例:使用以下代码
\documentclass[openany]{memoir}
\usepackage{lipsum}
\begin{document}
\chapter{The only chapter} \lipsum[1]
\section{Section one} \lipsum[1]
\section{Section two} \lipsum[1-2]\lipsum[4]\lipsum[4]\lipsum[4]
\section{Section three} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section four} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section five} \lipsum[2]
\section{Section six} \lipsum[1]
\section{Section seven} \lipsum[1]
\section{Section eight} \lipsum[1]
\section{Section nine} \lipsum[1-5]
\section{Section ten} \lipsum[1]
\section{Section eleven} \lipsum[1-8]
\chapter{The second chapter} \lipsum[1-10]
\section{Section one} \lipsum[1]
\chapter{The third chapter}
\section{Section one} \lipsum[4]
\section{Section two} \lipsum[4]
\section{Section three} \lipsum[4]
\end{document}
第 2 章从第 10 页开始(由于选项,不是第 11 页openany
),第 3 章从第 13 页开始(出于同样的原因,不是第 15 页),标题应如下:
1.1 -- Section one
-1
2
-Section two -- 1.2
1.3--1.4 -- Section three
-3
4
-Section five -- 1.4--1.5
1.6--1.8 -- Section six
-5
6
-Section nine -- 1.9
1.9--1.11 -- Section ten
-7
8
-1.11
1.11
-9
10
--
11
12
-Section one -- 2.1
3.1--3.3 -- Section one
-13
一个小小的变化是让章节开头的前节页面仅显示章节编号。这将使第 10 页和第 11 页更改为以下内容:
[10.] 10
— (2
德文10
:—)2.
[11.] 2
— (11
德文2.
:—)11
另一个(非常合理并且可能更好的)变体是即使特定页面上没有新的部分,也要提及该部分的名称;这就是 Heiko Oberdiek 当前解决方案所做的:
[8.] 8
-Section eleven -- 1.11
[9.] 1.11 -- Section eleven
——9
对于那些不可避免的想要告诉我章节第一页“不应该”有页眉的人来说,这里有两条非常友好的说明:
- 书面材料包含很多冗余内容(页码、目录、索引、正文中的内容冗余……),而且标题本身在技术上也是冗余的。一致性是我个人的设计选择。
- 在某些类型中,美学考虑在很大程度上服从于风格统一性,例如某些法律文件。(但我并不认为章节内第一页的页眉和页脚样式不美观。)
答案1
因为memoir
使用了类,所以在任何页面上开始一个章节都很容易:
\renewcommand*{\clearforchapter}{\clearpage}
正确设置页眉要复杂得多。如果plain
为章节的第一页设置页面样式,这项任务就会大大简化,因为这样标记寄存器中的章节值就可以轻松重置。下面的示例使用了许多额外的标记寄存器(使用 eTeX 和包etex
)来记住章节标题、章节名称和章节编号。
评论:
章节标题记在 中
\MarkSectionTitle
。其章节号记在 中\MarkSectionChapterNumber
。只有当此章节号与当前章节号匹配时,才会打印标题,以避免在新的章节的起始页上打印上一章的标题。未编号的章节/部分不受支持或支持不力。
编号内容仅具有原型质量。可能存在一些缺失的案例/错误。
\MarkSectionEarlyNumber
添加此标记是为了处理某个部分开始新页面的情况。这意味着,前一节也在该页面上结束,但页眉的第一个数字应为页面上的新部分。
示例文件:
\documentclass{memoir}
\usepackage{lipsum}
\usepackage{etex}
\newmarks\MarkSectionTitle
\newmarks\MarkSectionChapterNumber
\newmarks\MarkSectionNumber
\newmarks\MarkSectionEarlyNumber
\newmarks\MarkChapterNumber
\makeatletter
\newcommand*{\AddMarks}[2]{%
\begingroup
\let\label\relax
\let\index\relax
\let\glossary\relax
\protected@edef\x{#2}%
\toks@\expandafter{\x}%
\marks#1\expandafter{\the\toks@}%
\endgroup
}
\newcommand*{\MarksNoBreak}{%
\if@nobreak\ifvmode\nobreak\fi\fi
}
\newcommand*{\OriginalSection}{}
\let\OriginalSection\section
\renewcommand*{\section}{%
\@ifstar{\OriginalSection*}{%
\stepcounter{section}%
\AddMarks\MarkSectionEarlyNumber{\thesection}%
\addtocounter{section}{-1}%
\OriginalSection
}%
}
\makepagestyle{secheadings}
\makepsmarks{secheadings}{%
\def\chaptermark##1{%
\AddMarks\MarkChapterNumber{\thechapter}%
\marks\MarkSectionEarlyNumber{}%
\MarksNoBreak
}%
\def\sectionmark##1{%
\ifnum\value{secnumdepth}>0 %
\AddMarks\MarkSectionNumber{\thesection}%
\fi
\AddMarks\MarkSectionTitle{##1}%
\AddMarks\MarkSectionChapterNumber{\thechapter}%
\MarksNoBreak
}%
\def\tocmark{}%
\def\lofmark{}%
\def\lotmark{}%
\def\bibmark{}%
\def\indexmark{}%
\def\glossarymark{}%
}
\newcommand*{\SecHeadingsSetup}{%
\protected@edef\SecHeadingsTheChapter{\thechapter}%
\edef\SecHeadingsSectionChapterNumber{%
\firstmarks\MarkSectionChapterNumber
}%
\ifx\SecHeadingsTheChapter\SecHeadingsSectionChapterNumber
\edef\SecHeadingsFirstTitle{\firstmarks\MarkSectionTitle}%
\edef\SecHeadingsPreviousChapterNumber{\topmarks\MarkChapterNumber}%
\edef\SecHeadingsThisChapterNumber{\firstmarks\MarkChapterNumber}%
\edef\SecHeadingsLastNumber{\botmarks\MarkSectionNumber}%
\let\SecHeadingsFirstNumber\@empty
\ifx\SecHeadingsPreviousChapterNumber\SecHeadingsThisChapterNumber
\edef\SecHeadingsFirstNumber{\topmarks\MarkSectionEarlyNumber}%
\fi
\ifx\SecHeadingsFirstNumber\@empty
\edef\SecHeadingsFirstNumber{\firstmarks\MarkSectionNumber}%
\fi
\ifx\SecHeadingsFirstNumber\@empty
\let\SecHeadingsNumbers\@empty
\else
\ifx\SecHeadingsFirstNumber\SecHeadingsLastNumber
\let\SecHeadingsNumbers\SecHeadingsFirstNumber
\else
\def\SecHeadingsNumbers{%
\SecHeadingsFirstNumber--\SecHeadingsLastNumber
}%
\fi
\fi
\else
\let\SecHeadingsFirstTitle\@empty
\let\SecHeadingsNumbers\@empty
\fi
}
\newcommand*{\SecHeadingsPrint}[2]{%
\ifx#1\@empty
\ifx#2\@empty
\SecHeadingsOut{}%
\else
\SecHeadingsOut{#2}%
\fi
\else
\ifx#2\@empty
\SecHeadingsOut{#1}%
\else
\SecHeadingsOut{#1 -- #2}%
\fi
\fi
}
\newcommand*{\SecHeadingsOut}[1]{%
#1%
\protected@edef\SecHeadingsTemp{#1}%
\@onelevel@sanitize\SecHeadingsTemp
\typeout{Header(\thepage): \SecHeadingsTemp}%
}
\makeevenhead{secheadings}{\thepage}{}{%
\SecHeadingsSetup
\SecHeadingsPrint\SecHeadingsFirstTitle\SecHeadingsNumbers
}
\makeoddhead{secheadings}{%
\SecHeadingsSetup
\SecHeadingsPrint\SecHeadingsNumbers\SecHeadingsFirstTitle
}{}{\thepage}
\makeatother
\aliaspagestyle{chapter}{secheadings}
\pagestyle{secheadings}
\renewcommand*{\clearforchapter}{\clearpage}
\begin{document}
\chapter{The only chapter} \lipsum[1]
\section{Section one} \lipsum[1]
\section{Section two} \lipsum[1-2]\lipsum[4]\lipsum[4]\lipsum[4]
\section{Section three} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section four} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section five} \lipsum[2]
\section{Section six} \lipsum[1]
\section{Section seven} \lipsum[1]
\section{Section eight} \lipsum[1]
\section{Section nine} \lipsum[1-5]
\section{Section ten} \lipsum[1]
\section{Section eleven} \lipsum[1-8]
\chapter{The second chapter} \lipsum[1-10]
\section{Section one} \lipsum[1]
\chapter{The third chapter}
\section{Section one} \lipsum[4]
\section{Section two} \lipsum[4]
\section{Section three} \lipsum[4]
\end{document}
结果:
Header(1): 1.1 -- Section one
Header(2): Section two -- 1.2
Header(3): 1.3--1.4 -- Section three
Header(4): Section five -- 1.4--1.5
Header(5): 1.6--1.8 -- Section six
Header(6): Section nine -- 1.9
Header(7): 1.9--1.11 -- Section ten
Header(8): Section eleven -- 1.11
Header(9): 1.11 -- Section eleven
Header(10):
Header(11):
Header(12): Section one -- 2.1
Header(13): 3.1--3.3 -- Section one