Markdown轉PDF分頁:在你想要的地方準確換到新的一頁

作者 pdftomd.tools 團隊 · 更新於 · 約 6 分鐘閱讀

Markdown 本身沒有分頁語法。要在 PDF 裡分頁,就改插入一行 HTML:<div style="page-break-after: always"></div>,上下各空一行。以 HTML 為基礎的匯出工具,包括我們的 Markdown轉PDF 工具,都會在這裡換新的一頁。如果用 Pandoc 走 LaTeX,就寫 \newpage。匯出後再檢查 PDF 有沒有多出空白頁。

插圖:兩張頁面並排,中間是一條虛線分頁線,箭頭指向新的一頁

為什麼 Markdown 沒有分頁符號

Markdown 是為網頁設計的,而網頁沒有「頁」這回事。不管是原始語法還是 CommonMark,都沒有定義分頁符號。最接近的是三個連字號 ---,也就是主題分隔線:它會變成一條 <hr> 橫線,而不是新的一頁。很多人第一個想到的就是拿它來分頁,接著納悶為什麼沒反應。

Markdown 允許的是直接寫 HTML。多數匯出工具會先把 Markdown 轉成 HTML,再把 HTML 列印成 PDF;所以分頁其實是加在 HTML 元素上的一條 CSS 規則。例外是 Pandoc 的預設路徑,它會經過 LaTeX,要的是 LaTeX 指令。

真的有效的分頁寫法

依你用的匯出工具挑一行,單獨放在一行,前後各留一個空行,這樣 Markdown 剖析器才會把它當成 HTML 區塊:

Last paragraph of the first part.

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

## Part two

This heading starts a new page.
舊的屬性名稱,我們知道的每個 HTML 匯出工具都看得懂。
  • 新版 CSS:<div style="break-after: page"></div>,或在要換頁的元素上寫 break-before: page。
  • 直接加在標題上:<h2 style="page-break-before: always">第二部分</h2>,前提是你不介意用 HTML 寫這個標題。
  • VS Code 擴充功能 Markdown PDF:它的 README 寫的是 <div class="page"/>,由擴充功能內建的樣式表負責分頁。這是 VS Code 最常見的答案,上面的行內樣式在那裡一樣能用。
  • Pandoc + LaTeX(預設的 PDF 路徑):一行 \newpage。raw_tex 擴充只會把它原封不動交給 LaTeX 和 ConTeXt 的 writer。Pandoc 的 newpage 指令不適用於 HTML 輸出;如果你用 HTML 引擎產生 PDF,請改用 div。

為什麼有兩個名稱?CSS 分段規範 用 break-before 和 break-after 取代了 page-break-before 和 page-break-after,舊名稱保留為別名:page-break-after: always 的效果和 break-after: page 一樣。舊工具用舊寫法比較保險;MDN 兩種都有說明。

“一律在主要方塊之前/之後強制分頁。”
W3C, CSS Fragmentation Module Level 3,page 值的定義(譯文)

我們的匯出工具怎麼處理手動分頁

2026 年 10 月 19 日以前,我們的匯出工具會忽略手動分頁,每個分頁位置都自己決定。現在它會讀取轉譯後文件中每個元素計算出的 break-before 和 break-after 值,所以寫在 style 屬性裡的 CSS 分頁,不論新舊寫法都會生效。即時預覽會在新頁開始處畫一條標示「分頁」的虛線,匯出後也會提示套用了幾個手動分頁。

螢幕截圖:我們編輯器裡的分頁,左邊是 div,右邊預覽有一條虛線分頁標記
螢幕截圖:原始碼中的分頁行,以及預覽裡的虛線標記。

幾條規則讓輸出保持乾淨:

  • 文件最前面或最後面的分頁會被忽略,所以不會出現空白的第一頁或最後一頁。
  • 連續兩個分頁只算一個。Chrome 會在中間印出一張空白頁;我們認為這很少是你要的。
  • left、right、recto 和 verso 這幾個值都會換新的一頁。我們不會為了落在左頁或右頁而插入空白頁。
  • --- 依然是一條橫線,和 Markdown 的定義相同。
  • 較長的段落內仍會自動分頁,也仍會避免切斷一行文字、一列表格或一張圖片。
螢幕截圖:匯出的兩頁 PDF,第一頁是簡短摘要,附錄表格從第二頁最上方開始
螢幕截圖:用上面範例匯出的 PDF,附錄從第二頁開始。

我們測了什麼:和 Chrome 列印比較

我們寫了 9 份小文件,每份測試一種分頁寫法,全部用真正的「下載 PDF」按鈕匯出,再用 pdfinfo 和 pdftotext 讀回來,看哪段文字落在哪一頁。作為對照,我們也用 Chrome 的 PDF 列印功能輸出同樣的 HTML。測試中,9 個案例全都得到預期的頁面、沒有空白頁,其中 8/9 個和 Chrome 逐頁相同。

手動分頁:我們的匯出工具 vs Chrome 列印成 PDF,依我們的測試(2026年10月19日)
標記我們的頁數Chrome 頁數空白頁(我們)符合預期和 Chrome 比較
<div style="page-break-after: always">220是相同
<div style="break-before: page">220是相同
<div style="break-after: page">220是相同
<h2 style="page-break-before: always">220是相同
分頁之後接 Markdown 標題220是相同
連續兩個分頁 div230是不同
文件最前面和最後面的分頁110是相同
---(Markdown 分隔線)110是相同
手動分頁與自動分頁混用440是相同
唯一的差別是連續兩個分頁:Chrome 會多一張空白頁,我們的匯出工具不會。把匯出的 PDF 再轉回 Markdown,標題和內文都能還原。

讓標題跟著內文,以及其他尷尬的分頁

手動分頁解決的是你知道的位置,其餘交給匯出工具。最典型的問題是標題孤單地留在頁面底部,內文卻從下一頁開始。文書處理軟體把解法叫作「與下段同頁」。在 CSS 裡,對應的寫法是在標題加上 break-after: avoid,但各家引擎在列印時對 avoid 值的支援不一樣,使用前先測試。

插圖:左邊是留在頁面底部的孤立標題,右邊是同一個標題移到下一頁最上方
左:孤立的標題。右:標題跟著內文一起移到下一頁。

我們的匯出工具不需要任何標記就做得到:標題一定和後面第一行放在一起,表格列和圖片只要一頁放得下就不會被拆開。如果還是不喜歡某一頁結束的位置,就在標題前面加一個手動分頁。下圖標出哪裡可以分頁、哪裡不行。

插圖:一張頁面上,區塊之間的虛線代表可以分頁,表格裡的紅色標記代表不能分頁
分頁可以落在區塊之間(藍色),不會落在一行文字或一列表格中間(紅色)。

表格要特別留意。我們的 表格列印教學 說明了長表格和寬表格的處理方式;正式匯出前,先用 MD轉PDF 快速匯出一次,是試排版最快的方法。

分頁的常見錯誤

分頁沒有作用時,原因幾乎都是下面四種之一:

  • div 後面沒有空行。在 CommonMark 裡,以 <div> 開頭的 HTML 區塊會一直延續到下一個空行。緊接在下面的文字會被吃進 HTML,顯示時沒有格式,## 和 ** 都原樣露出來。
  • div 放在清單、引言或表格裡。把它放在文件最外層,每個匯出工具都會把它當成獨立的區塊。
  • HTML 被關掉了。有些轉譯器預設關閉 HTML,會把標籤當成文字顯示。到設定裡開啟 HTML,或使用該工具自己的分頁語法(如果有的話)。
  • 只看預覽就下結論。會清理 HTML 的預覽常把行內樣式拿掉,畫面上看不到分頁,匯出時卻照樣有效。我們的預覽會顯示虛線標記,但真正的檢驗還是匯出的檔案。

還有一個好習慣:手動分頁一律放在要換頁那一節的標題正上方,不要放在標題下面。這樣標題和第一段永遠在一起;之後刪掉分頁,文件順序也不會亂。

分享 PDF 前的快速檢查

  1. 從頭翻到尾找空白頁;出現空白頁通常代表連續兩個分頁,或結尾有分頁。
  2. 確認每一節都從頁面最上方開始,標題在最前面。
  3. 搜尋最後一頁的某個字詞,確認文字層是真的。
  4. 如果 PDF 要雙面列印,而且每章都得從右頁開始,請使用支援 break-before: right 的工具;我們的工具會把它當成一般的換頁。

常見問題

Markdown 轉 PDF 時要怎麼插入分頁?

Markdown 沒有分頁語法。插入一行 HTML <div style="page-break-after: always"></div>,前後各空一行;以 HTML 為基礎的 PDF 匯出工具會在這裡換新的一頁。

`---` 可以分頁嗎?

不行。三個連字號是主題分隔線,會顯示成一條橫線,在 PDF 裡也還是一條線。

該用 page-break-after 還是 break-after?

都可以。break-after: page 是現行的 CSS 名稱,page-break-after: always 是舊別名。舊寫法在舊工具上稍微保險一點;我們的匯出工具兩種都能讀。

Pandoc 要怎麼分頁?

透過 LaTeX 產生 PDF 時,在獨立一行寫 \newpage。如果透過 HTML 產生 PDF(例如使用 HTML 引擎),就改用 CSS div,因為這個 LaTeX 指令只會交給 LaTeX 和 ConTeXt 的 writer。

為什麼多了一張空白頁?

通常是連續兩個分頁,或文件最後面有分頁。這兩種情況 Chrome 都會印出空白頁;我們的匯出工具會略過。

可以讓每個 H2 都從新的一頁開始嗎?

在支援自訂 CSS 的工具裡,樣式表寫 h2 { break-before: page; } 就行。在我們的編輯器裡,在每個 H2 前面加上 div 這一行,或把標題寫成 <h2 style="page-break-before: always">。