Markdown 分页符完整教程:4 种方法实现 page break

Markdown 原生语法里没有分页符(page break)。John Gruber 设计 Markdown 的初衷是给网页内容写格式,网页不需要分页,所以压根没设计这个功能。但现实是——我们经常需要把 Markdown 导出成 PDF、打印成纸质文档、或者生成 Word 文件,这些场景都离不开分页控制。

这篇文章把目前所有可行的 markdown 分页符方案都整理出来了,从最通用的 HTML/CSS 方法到特定工具的专有语法,按你的使用场景选一个就行。

方法一:HTML + CSS 分页(最通用)

这是适用范围最广的方案。几乎所有 Markdown 渲染器都支持内联 HTML,而 PDF 导出工具和浏览器的打印功能都能识别 CSS 分页属性。

基本写法

在需要分页的位置插入这行 HTML:

第一页的内容写在这里。

<div style="page-break-after: always;"></div>

第二页的内容从这里开始。

page-break-after: always 的意思是:在这个元素之后强制分页。渲染器在导出 PDF 或打印时会在这里断开,新内容从下一页开始。

还有一种写法效果相同:

<hr style="page-break-after: always;">

这个写法会同时显示一条分割线和分页效果。如果你不想要分割线的视觉效果,用 <div> 的写法更干净。

CSS 分页属性的区别

CSS 提供了三个分页相关属性,很多人分不清它们:

属性作用推荐场景
page-break-after元素之后分页最常用,当前内容结束后另起一页
page-break-before元素之前分页确保某个章节总是从新页开始
break-after / break-beforeCSS3 新标准,作用相同面向未来,但旧浏览器支持不够

说实话,实际使用中 page-break-after: always 就够用了。break-after 是 CSS Fragmentation Module Level 3 里定义的新属性,理论上更强大(支持分栏、分区域等),但目前大部分 PDF 导出工具还是认 page-break-after 更可靠。

我之前用 VS Code 的 Markdown PDF 插件导出文档时,page-break-after 完美生效,换成 break-after 反而没反应。所以除非你确定目标工具支持新标准,否则还是用 page-break-after 稳妥。

page-break-before 确保章节从新页开始

如果你希望每个大章节都从新页开始(而不是在上一节结束后分页),可以用 page-break-before

## 第一章

第一章的内容...

<div style="page-break-before: always;"></div>

## 第二章

第二章的内容...

这个写法的好处是:不管第一章内容多长多短,第二章一定会从新页开始。

兼容性

工具/平台是否支持备注
浏览器打印(Chrome、Firefox)支持
VS Code Markdown PDF 插件支持
Typora 导出 PDF支持
Pandoc 转 PDF(通过 HTML)支持
GitBook支持
GitHub 网页不生效网页不需要分页
GitLab 网页不生效同上

基本上,只要是导出打印场景,HTML + CSS 的方法都管用。在网页上预览时分页符不会显示——这其实是对的,因为网页本来就是连续滚动的。

方法二:Pandoc 的 \newpage(适合技术文档)

如果你用 Pandoc 把 Markdown 转成 PDF 或 Word(通过 LaTeX),直接写 LaTeX 分页命令就行:


这是第一章的内容。

\newpage

# 第二章

这是第二章的内容。

Pandoc 在处理时会直接把 \newpage 传给 LaTeX 引擎,效果就是在这个位置强制分页。

支持的输出格式

\newpage 在 Pandoc 中不只适用于 PDF,对不同输出格式的处理方式:

输出格式是否生效实际效果
PDF(通过 LaTeX)生效LaTeX 的 \newpage 命令
Word(.docx)生效转换为 Word 的分页符
HTML部分生效显示为原始文本,但配合 CSS 可生效
ODT生效转换为分页符

我写技术报告的时候基本都用这个方法,Pandoc 一行命令 pandoc report.md -o report.pdf 就能把分页处理好,配合 Markdown 换行分割线 语法,排版效果很稳定。

对了,还有一个小技巧:如果你想在同一个 Pandoc 文档里同时支持 PDF 和 HTML 导出,可以把两种写法都加上:

第一页内容

\newpage
<div style="page-break-after: always;"></div>

第二页内容

Pandoc 转 PDF 时 \newpage 生效,转 HTML 时 CSS 的分页属性生效。虽然看起来有点冗余,但实际用起来确实省心。

方法三:Quarto 的 pagebreak(数据报告场景)

Quarto 是基于 Pandoc 的下一代发布工具,在学术和技术写作领域越来越流行。它提供了更优雅的分页语法:

第一部分内容

::: pagebreak
:::

第二部分内容

::: pagebreak 是 Quarto 的自定义 div 语法。Quarto 会根据你的输出格式自动选择合适的分页方式——PDF 用 LaTeX 命令,Word 用原生分页符,HTML 用 CSS。你不需要关心底层细节,写这一行就够了。

有些 Quarto 模板还支持 shortcode 写法:

{{< pagebreak >}}

效果和 ::: pagebreak 一样,选哪种取决于你的模板配置。

Quarto 的方案是我觉得最"干净"的——语法简洁,跨格式自动适配,不用写 HTML 也不用记 LaTeX 命令。如果你已经在用 Quarto 写文档,强烈建议直接用这个。

方法四:编辑器特定语法

有些 Markdown 编辑器定义了自己的分页符语法,只有在它们的环境里才能用。

iA Writer:三个加号

iA Writer 用三个加号 +++ 表示分页:

第一页的内容

+++

第二页的内容

在 iA Writer 里导出 PDF 或打印时,+++ 会被识别为分页符。注意 +++ 前后都需要空一行,不然可能不被识别。

Typora

Typora 本身没有专有的分页语法,但它完美支持方法一中的 HTML/CSS 写法。在 Typora 编辑器里,分页标签会显示为一个带虚线边框的 HTML 块,导出 PDF 时正常分页。

其他编辑器

大部分 Markdown 编辑器(Obsidian、Mark Text、MacDown 等)都支持 HTML 内联,所以用方法一的 CSS 方案基本都能解决。如果你的编辑器不支持内联 HTML,那就只能考虑换个工具了。

方法对比:选哪个?

方法语法通用性适用场景
HTML + CSS<div style="page-break-after: always;"></div>最广通用 PDF 导出、浏览器打印
Pandoc \newpage\newpagePandoc 用户技术文档、LaTeX 工作流
Quarto pagebreak:::pagebreakQuarto 用户学术报告、数据文档
iA Writer ++++++仅 iA WriteriA Writer 导出

选择建议:

  • 不确定用哪个:选方法一(HTML + CSS),几乎所有工具都认
  • 用 Pandoc 生成文档:直接写 \newpage,最简洁
  • 用 Quarto:用 ::: pagebreak,跨格式自动适配
  • 只用 iA Writer+++ 最方便
  • 需要同时支持多种导出格式:可以把 HTML/CSS 和 \newpage 都写上

常见问题

Markdown 原生支持分页符吗?

不支持。根据 CommonMark 规范,标准 Markdown 没有定义任何分页语法。Markdown 的设计目标是网页内容格式化,而网页是连续滚动的,不需要分页。所有的分页方案都是通过 HTML 内联、工具扩展或编辑器特定语法实现的。

GitHub 上写 README 能用分页符吗?

没意义。GitHub README 在网页上显示,网页不存在"页"的概念。page-break 相关的 CSS 属性在 GitHub 的渲染环境中不会生效。分页符只在导出 PDF、打印或生成 Word 文档时才有意义。

page-break-afterbreak-after 有什么区别?

page-break-after 是 CSS 2.1 的属性,浏览器和 PDF 工具支持广泛。break-after 是 CSS Fragmentation Module Level 3 定义的新标准,功能更强(支持分栏、分区域等场景),但部分旧工具不认识。对于 Markdown 分页的需求,page-break-after: always 就够了。

为什么导出 PDF 时分页符没生效?

几个常见原因:

  1. 渲染器不支持内联 HTML——检查你的工具是否开启了 HTML 支持
  2. CSS 属性写错了——确认是 page-break-after,不是 page-breakpagebreak
  3. 分页标签和内容之间没有空行——Markdown 的 HTML 块前后建议各空一行
  4. 导出工具的问题——有些工具的 PDF 引擎不处理 CSS 分页属性,试试换用 Pandoc

能用分割线(---)代替分页符吗?

不能。Markdown 的分割线---***___)只是在页面上显示一条水平线,对应的 HTML 标签是 <hr>。它没有任何分页功能——导出 PDF 时内容还是连续的,分割线不会导致换页。分割线解决的是视觉分隔,分页符解决的是物理分页,两个完全不同的需求。

参考来源