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-before | CSS3 新標準,作用相同 | 面向未來,但舊瀏覽器支援不夠 |
說實話,實際使用中 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 | \newpage | Pandoc 使用者 | 技術文件、LaTeX 工作流 |
Quarto pagebreak | ::: pagebreak | Quarto 使用者 | 學術報告、資料文件 |
iA Writer +++ | +++ | 僅 iA Writer | iA 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-after 和 break-after 有什麼差別?
page-break-after 是 CSS 2.1 的屬性,瀏覽器和 PDF 工具支援廣泛。break-after 是 CSS Fragmentation Module Level 3 定義的新標準,功能更強(支援分欄、分區域等場景),但部分舊工具不認識。對於 Markdown 分頁的需求,page-break-after: always 就夠了。
為什麼匯出 PDF 時分頁符沒生效?
幾個常見原因:
- 渲染器不支援內聯 HTML——檢查你的工具是否開啟了 HTML 支援
- CSS 屬性寫錯了——確認是
page-break-after,不是page-break或pagebreak - 分頁標籤和內容之間沒有空行——Markdown 的 HTML 區塊前後建議各空一行
- 匯出工具的問題——有些工具的 PDF 引擎不處理 CSS 分頁屬性,試試換用 Pandoc
能用分隔線(---)代替分頁符嗎?
不能。Markdown 的分隔線(---、***、___)只是在頁面上顯示一條水平線,對應的 HTML 標籤是 <hr>。它沒有任何分頁功能——匯出 PDF 時內容還是連續的,分隔線不會導致換頁。分隔線解決的是視覺分隔,分頁符解決的是實體分頁,兩個完全不同的需求。
參考來源
- CommonMark Spec — Markdown 官方規範,確認無原生分頁符語法
- W3C CSS Fragmentation Module Level 3 — CSS 分頁屬性的權威定義
- Pandoc 官方文件 — Pandoc Markdown 擴展語法說明
- Quarto — Markdown Basics — Quarto pagebreak 語法官方文件
- R Markdown Cookbook — Page Breaks — R Markdown 中的分頁方案