我正在写一本分为两部分的书。当然,每部分都由几章组成,每章又由几节组成。很棒,对吧?当然!
但....
出于逻辑原因,我们希望将章节组织成部分内的“块”。因此:
- 第一部分:甜点
[第一部分简介]
冰淇淋
- [ 介绍]
- 第一章:巧克力冰淇淋
第二章:香草冰淇淋
馅饼
[ 介绍]
- 第 3 章:苹果派
- 第 4 章:蓝莓派
但当然,“冰淇淋”和“馅饼”并不是章节,就像“香草冰淇淋”和“蓝莓馅饼”不是章节一样。
我怎样才能将这两个“超章节”组织到其他章节的级别之上,但不给它们赋予章节编号?
答案1
也许这是最简单的方法:使用wrapper
执行\chapter*{}
并自动将行添加到目录的命令。
\frontmatter\chapter{foo}\mainmatter
也是可能的,但这也会改变页码,这很可能不是我们所希望的。
我提供了两种变体,效果相同。\addcontentsline
不过,我更喜欢第二种没有显式的变体!
第二种变体使用secnumdepth
计数器的临时更改来控制分区单元是否在显示中编号。将其设置为-1
只会保留\part
计数器,suprachapter
使用后恢复将提供正常行为。
\documentclass{book}
\usepackage{xparse}
\usepackage{hyperref}
\newcounter{oldsecnumdepth}
\NewDocumentCommand{\suprachapter}{som}{%
\IfBooleanTF{#1}{%
\chapter*{#1}%
}{%
\chapter*{#3}%
\IfValueTF{#2}{%
\addcontentsline{toc}{chapter}{#2}%
}{%
\addcontentsline{toc}{chapter}{#3}%
}%
}%
}
\NewDocumentCommand{\suprachapterother}{som}{%
\IfBooleanTF{#1}{%
\chapter*{#1}%
}{%
\setcounter{oldsecnumdepth}{\value{secnumdepth}}%
\setcounter{secnumdepth}{-1}%
\IfValueTF{#2}{%
\chapter[#2]{#3}%
}{%
\chapter{#3}%
}%
\setcounter{secnumdepth}{\value{oldsecnumdepth}}%
}%
}
\begin{document}
\tableofcontents
\part{Foo}
\suprachapter{Ice scream}
\chapter{Vanilla flavour}
\chapter{Albatross flavour}
\suprachapterother{PIE}
\chapter{Apple Pie}
\chapter{Black Forest Cherry Tarte}
\end{document}