如何在Eisvogel模板中自定义Markdown转PDF的标题编号
问题解决方案
核心问题分析
你的标题编号异常源于LaTeX计数器的层级依赖关系未正确配置:默认情况下subsection计数器会随section重置,且编号格式包含section前缀;同时subsubsection未与subsection建立正确的从属关系,导致Lab编号不递增、Step编号重复。
修改后的Eisvogel模板配置
替换原titlesec相关代码为以下内容:
\usepackage{titlesec} %% 调整计数器规则与编号格式 % 取消section对subsection的重置,实现Lab全局递增(若需每个Part下Lab从1开始,替换为\counterwithin{subsection}{section}) \counterwithout{subsection}{section} % 让subsubsection随subsection重置,确保每个Lab下Step从X.1开始 \counterwithin{subsubsection}{subsection} % 重新定义各层级编号格式 \renewcommand{\thesection}{\arabic{section}} % Part的编号格式(用于目录) \renewcommand{\thesubsection}{\arabic{subsection}} % Lab的编号格式 \renewcommand{\thesubsubsection}{\thesubsection.\arabic{subsubsection}} % Step的编号格式 %% 标题格式定义 % Markdown一级标题(#):正文显示无编号「Part」,目录保留编号 \titleformat{\section} {\normalfont\huge\bfseries\justifyheadingleft\sffamily\color{black}} {Part}{0.5em} {}[{\titlerule[1.2pt]}] % Markdown二级标题(##):显示「Lab X:」 \titleformat{\subsection} {\normalfont\LARGE\bfseries\justifyheadingright\sffamily\color{green}} {Lab \thesubsection:}{0.5em} {}[{\titlerule[1.2pt]}] % Markdown三级标题(###):显示「Step X.X」 \titleformat{\subsubsection} {\normalfont\Large\bfseries\sffamily\color{black}} {Step \thesubsubsection}{0em}{}
关键修改说明
计数器层级调整
\counterwithout{subsection}{section}:解除section对subsection的重置绑定,让Lab编号全局连续递增;若需每个Part下Lab独立编号,改为\counterwithin{subsection}{section}即可。\counterwithin{subsubsection}{subsection}:绑定subsubsection到subsection,每次新建Lab时,Step编号自动重置为1。
编号格式重定义
- 去掉
subsection编号中的section前缀,直接用纯阿拉伯数字实现「Lab 1、Lab 2」格式。 - 让
subsubsection编号继承subsection的数字,形成「Step 1.1、1.2」的从属格式。
- 去掉
正文与目录的编号分离
- 一级标题的
titleformat中去掉\thesection,让正文显示无编号的「Part」;但section计数器仍正常递增,确保目录中保留Part的编号。
- 一级标题的
构建脚本优化建议
保留原脚本参数即可,但需确保--toc-depth 2符合需求(当前会显示Part和Lab的目录项)。若需在目录中显示Step,可将--toc-depth改为3。
内容的提问来源于stack exchange,提问作者Kerry Cox
相关产品推荐
相关产品推荐

