Code|XeLaTeX:高度个性化章节&目录

结月lalalll

ctex 对于章节和目录做了本地化的设置,但若不希望其操控章节&目录的生成方式,则需要我们进行自定义

基本思路:
1.消除ctex的影响+个性化章节
2.个性化目录
3.自定义章节序号&目录生成深度
4.关于无编号章节的特殊处理

具体内容参见下方

消除ctex的影响+个性化章节
1
2
3
4
5
6
7
8
9
10
11
12
13
14
\ctexset{
chapter = {
name = {},
number = \arabic{chapter},
beforeskip = 5pt,
afterskip = 5pt,
},
section = {
number = \thechapter.\arabic{section},
},
subsection = {
number = \thechapter.\arabic{section}.\arabic{subsection},
}
}

name = {} 这一设置关闭了标题的前/后字,如 {第,章}
number = \arabic{chapter}定义章节的编号格式.\arabic{chapter}表示使用阿拉伯数字
beforeskip/afterskip定义章节标题前/后的垂直间距
其余章节同理

个性化目录

注意:所有涉及目录的改动都应当在第二次甚至第多次构建下方生效(需要生成.toc文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
\usepackage{titletoc}

\titlecontents{chapter}
[0pt]%整体缩进
{\vspace{1pc}\bfseries}%前置指令
{\makebox[2em][l]{\thecontentslabel}}%编号和标题的格式
{\hspace*{0em}} %无编号章节的格式
{\titlerule*[0.5pc]{.}\texttt{\contentspage}}%点线和页码
[]%后置指令

\titlecontents{section}
[4.5em]
{}
{\contentslabel{2.5em}}
{\hspace*{-3em}}
{\titlerule*[0.5pc]{.}\texttt{\contentspage}}
[]

\titlecontents{subsection}
[6em]
{}
{\contentslabel{3em}}
{\hspace*{-2.5em}}
{\titlerule*[0.5pc]{.}\texttt{\contentspage}}
[]

titlecontentstitletoc的核心控制命令.其接受以下参数,含义如下:

  • <section-type>:你希望设置的章节类型(chapter,section…)
  • <left>:该行目录的整体左位移大小
  • <above-code>:前置代码,你可以在这里设置这行章节的基本样式(例:{\vspace{1pc}\bfseries} 设置1pc的垂直间距,且后续文字为黑体)
  • <numbered-entry-format>:定义编号格式,你可以使用\thecontentslabel动态设置编号,创建一个box来确保编号在一定的限制内
  • <numberless-entry-format>:定义无编号的章节格式
  • <filler-page-format>:定义章节和页码间的连接线与页码(建议使用等宽字体处理数字,更美观)
  • <after-code>:后置代码

需要注意的是,titlecontents并没有捕获章节名的能力,latex在传递标题文本时,会将系统生成的编号和标题文本共同传递到目录处理,标题文本默认会插入在编号和连接线之间

1
2
3
\makeatletter
\renewcommand{\@pnumwidth}{2em}
\makeatother

这段内部代码定义目录中页码区域的最小宽度,提高健壮性和灵活性

自定义章节序号&目录生成深度

特别简单

1
2
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}

其中-1对应part,0对应chapter,以此类推…
设置到哪个编号,显示到哪个编号
本示例中章节编号和目录生成深度都到subsection为止

关于无编号章节的特殊处理

我们不使用titlecontents给予的控制命令,而是重新定义一个宏
我们要明白自己需要干什么:
1.取消章节编号而正常的章节格式显示章节
2.允许被目录捕获
3.允许被页眉页脚捕获

第一条好办,只需要给章节命令加个*则会去除格式以外的所有功能

1
\chapter*{第一章}

第三条也好办,我们使用现有的命令

1
\markboth{第一章}{第一章}

它接受两个需要显示的章节名,第一个是显示在奇数页的,第二个是显示在偶数页的
至于这里,我们如果不是排版书籍的话大可以填写一样的

至于第二条我们则定义一个新宏

1
2
3
\newcommand{\zerochapter}[1]{%
\addcontentsline{toc}{chapter}{#1}%
}

很简单的一个命令,向toc中手动添加一个条目,类型为chapter,显示文本为新命令第一个参数

完整的就是:

1
2
3
\chapter*{第一章}
\zerochapter{第一章}
\markboth{第一章}{第一章}

你甚至可以给他再封装一次awa

  • 本文标题:Code|XeLaTeX:高度个性化章节&目录
  • 本文作者:结月lalalll
  • 创建时间:2025-08-26 20:16:27
  • 本文链接:https://lalalll-lalalll.github.io/code/tex-2/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!