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 時內容還是連續的,分隔線不會導致換頁。分隔線解決的是視覺分隔,分頁符解決的是實體分頁,兩個完全不同的需求。

參考來源