Markdown 樣式排版完整指南

說到 Markdown 排版,很多人第一反應就是「不就粗體斜體那幾樣嘛」。但真到寫文件的時候,經常會冒出一些問題:刪除線在哪個平台能用?粗體和斜體能不能疊加?為什麼我的 ==高亮== 在 GitHub 上變成了普通文字?

這篇文章就專門聊 Markdown 的文字樣式(text styling)——把所有跟「文字長什麼樣」有關的語法整理清楚,順便說說不同平台的相容性差異和排版上的實用技巧。

Markdown 樣式速查表

先上一張總表,方便隨時查閱。表裡的每一項後面都會展開說明。

樣式語法範例效果
粗體**文字**__文字__文字
斜體*文字*_文字_文字
粗體+斜體***文字***文字
刪除線~~文字~~文字
行內程式碼`程式碼` | 程式碼
高亮==文字====文字==(需平台支援)
底線<u>文字</u>文字(HTML)
上標x<sup>2</sup>x2(HTML)
下標H<sub>2</sub>OH2O(HTML)
文字顏色<span style="color:red">文字</span>需平台支援行內樣式
鍵盤按鍵<kbd>Ctrl</kbd>Ctrl(HTML)

這個表基本涵蓋了 Markdown 中所有跟文字樣式相關的寫法。注意看就能發現,有些是 Markdown 原生語法(粗體、斜體、刪除線),有些是靠內嵌 HTML 實現的(底線、上標、下標)。這個區別很重要,後面會詳細說。

粗體和斜體:最基礎的文字樣式

粗體和斜體是 Markdown 裡用得最多的兩種樣式,語法也很簡單:

**這是粗體文字**
*這是斜體文字*
***這是粗體加斜體***

Markdown 提供了兩套符號來做這件事——星號(*)和底線(_)都能用:

**粗體** 或 __粗體__
*斜體* 或 _斜體_

實際使用中,大多數人的習慣是用星號。原因是底線在某些場景下會和單字內部的底線衝突(比如 some_variable_name),解析器可能把它當成斜體標記 [^1]。

粗體和斜體可以疊加。***文字*** 就是粗體加斜體,等效於 **_文字_**___文字___

順便說一個我在 GitHub 上踩過的坑:在列表項裡巢狀使用粗體和斜體時,如果符號和文字之間有空格,有些渲染器的解析結果不一樣。比如 ** 粗體 ** 在 CommonMark 規範下不會變粗(因為星號和文字之間有空格),但在某些編輯器的即時預覽裡卻顯示正常。所以我的建議是,符號緊貼文字寫,別加空格 [^1]。

刪除線:標記已刪除或過時內容

刪除線在 Markdown 刪除線 語法中使用雙波浪號:

~~這段文字被劃掉了~~

渲染效果就是文字中間多了一條橫線:這段文字被劃掉了

這個語法屬於 GitHub Flavored Markdown(GFM)擴展,不是 CommonMark 標準的一部分。不過現在幾乎所有主流平台都支援——GitHub、GitLab、Obsidian、Typora、VS Code、Discord 都可以。如果你在某個小眾平台上不生效,那就是它不支援 GFM 擴展 [^2]。

刪除線經常和粗體搭配用,比如在更新日誌裡標記舊的價格:

~~**原價 ¥199**~~ 限時 **¥99**

高亮:給文字加背景色

高亮(highlight)的寫法是用雙等號把文字包起來:

==這是一段需要強調的文字==

這個語法在 Obsidian、Typora(需在設定中開啟)、Logseq、iA Writer 等筆記工具裡都支援,效果是文字出現黃色背景。

但要注意,==高亮== 不屬於任何 Markdown 標準。CommonMark 不認,GFM 也不認 [^3]。如果你在 GitHub 或 GitLab 上寫 ==高亮==,它會原樣顯示為普通文字。

在這些不支援的平台上,可以用 HTML 的 <mark> 標籤替代:

<mark>這是一段需要強調的文字</mark>

不過 GitHub 會過濾大部分 HTML 標籤,所以 <mark> 在 GitHub 上也不行。說實話,如果你需要 GitHub 上的高亮效果,最靠譜的替代方案是用粗體或者 行內程式碼 來強調。

更多關於高亮的詳細說明,可以看 Markdown 高亮 這篇文章。

行內程式碼:標記程式碼或特殊術語

用單個反引號把文字包起來就是行內程式碼:

在 JavaScript 中,使用 `console.log()` 輸出內容。

行內程式碼的渲染效果是灰色背景的等寬字型。嚴格來說它不是「樣式」,而是語意標記——表示這段文字是程式碼。但視覺上它確實起到了強調的效果,很多人也拿它來標記檔案名稱、命令、快捷鍵等特殊術語。

有一點需要注意:行內程式碼裡的 Markdown 語法不會被解析。所以 `*這段不會變斜體*` 渲染出來就是帶星號的等寬文字,不會變成斜體。

如果程式碼內容本身包含反引號,可以用雙反引號包裹:

`` 程式碼中包含 ` 反引號 ``

樣式疊加:多個格式怎麼組合

Markdown 允許多種樣式疊加使用。常見的組合:

**_粗體斜體_**
~~**刪除線粗體**~~
**`粗體程式碼`**
~~*刪除線斜體*~~

不過疊加有規則限制,不是所有組合都能生效:

  1. 可以疊加的組合:粗體+斜體、刪除線+粗體、刪除線+斜體、粗體+行內程式碼
  2. 不能疊加的組合:行內程式碼裡不能巢狀任何樣式(因為行內程式碼不解析 Markdown)
  3. 高亮+其他樣式:取決於平台,Obsidian 支援 ==**高亮粗體**==,但很多平台不支援

說實話,實際使用中我很少用到三層以上的疊加。兩層就夠了,三層以上反而影響可讀性。

用 HTML 補充 Markdown 的樣式短板

Markdown 的原生樣式能力有限——沒有底線、沒有上標下標、沒有文字顏色。這些都要靠內嵌 HTML 來實現 [^4]。

底線

<u>這段文字帶底線</u>

Markdown 原生沒有底線語法(John Gruber 的設計理念是底線容易和連結混淆),但 HTML 的 <u> 標籤基本所有 Markdown 渲染器都支援。更多內容可以看 Markdown 底線

上標和下標

公式裡常見:x<sup>2</sup> + y<sup>2</sup> = z<sup>2</sup>
化學方程式:H<sub>2</sub>O

這在寫技術文件的時候特別有用,數學公式和化學式都離不開上標下標。

鍵盤按鍵樣式

按 <kbd>Ctrl</kbd> + <kbd>S</kbd> 儲存檔案

<kbd> 標籤會把文字顯示為鍵盤按鍵的樣式,帶邊框的等寬字型。寫教學和操作指南的時候經常用到。

文字顏色

Markdown 原生不支援文字顏色。唯一的辦法是用 HTML:

<span style="color: red">紅色文字</span>
<span style="color: #0066cc">藍色文字</span>

但這個方法的限制很大——GitHub 會過濾掉 style 屬性,所以完全無效。Obsidian 和 Typora 支援行內樣式,可以正常顯示。如果你需要改變文字顏色,建議看 Markdown 文字顏色 那篇,裡面有更詳細的方案對比。

平台相容性對比:你的樣式能不能用

這可能是寫 Markdown 樣式時最讓人頭痛的問題。同一份文件在不同平台上渲染出來的效果可能差別很大。我整理了一張相容性對照表:

樣式語法GitHubObsidianTyporaJupyterVS Code
**粗體**
*斜體*
~~刪除線~~
`程式碼`
==高亮==
<mark>
<u>
<mark style>
<span style>

關鍵發現:

GitHub 是最嚴格的。它不支援高亮語法(==<mark> 都不行),也過濾幾乎所有 HTML 標籤的樣式屬性。如果你的檔案主要發在 GitHub,能用的文字樣式就只有粗體、斜體、刪除線和行內程式碼 [^2]。

Obsidian 和 Typora 是最寬鬆的。幾乎所有樣式語法都支援,包括高亮、HTML 行內樣式和自訂顏色。如果你用的是這兩個工具,樣式自由度最高。

Jupyter Notebook 居中。基礎樣式全支援,<mark> 也可以,但 <mark style> 自訂顏色不行 [^3]。

有一次我把 Obsidian 裡寫好的筆記直接貼上到 GitHub Issue 裡,結果高亮沒了、顏色沒了、底線也沒了,只剩粗體和斜體。後來才知道 GitHub 的 Markdown 渲染器會嚴格過濾 HTML。從那以後我養成一個習慣:如果檔案最終要發到 GitHub,寫的時候就只用基礎樣式。

Markdown 樣式排版實用技巧

掌握了語法之後,怎麼讓檔案排版更好看?這裡分享幾個我在實際寫作中總結出來的經驗。

控制樣式的使用頻率

一篇檔案裡,粗體、斜體、刪除線這些樣式不是用得越多越好。過度使用反而會讓讀者抓不住重點。我的建議是:

  • 粗體:用來標註關鍵操作、重要概念、首次出現的術語
  • 斜體:用來強調語氣、標註英文術語、引用書名或文章名
  • 行內程式碼:用來標記程式碼、命令、檔案名稱、設定項
  • 刪除線:只在標註變更、標記過時資訊時使用

用標題和列表代替過多的行內樣式

很多人喜歡把每段的關鍵字都變粗,但更好的做法是用清晰的標題層級和結構化的列表來組織內容。標題本身就是最強的「樣式」——它不僅改變了文字的視覺大小,還在檔案結構上建立了清晰的層次。

關於標題的詳細用法,可以參考 Markdown 標題

注意中文排版的特殊需求

中文 Markdown 排版有幾個特殊點:

  1. 段落縮排:中文習慣段首縮排兩個字元,但 Markdown 的段落不縮排。如果你需要縮排,可以用 &emsp;&emsp; 或全形空格實現,但大部分 Markdown 檔案直接頂格寫段落也是可以接受的
  2. 中英文之間加空格:在中文和英文/數字之間加一個空格,排版會更好看。比如「使用 Markdown 語法」比「使用Markdown語法」更易讀
  3. 中文標點:確保使用中文全形標點(,。!?),不要混用英文半形標點

跳脫:當特殊字元不想當語法用

如果你需要顯示星號、底線這些 Markdown 的特殊字元本身,在前面加反斜線就行:

\*這不是斜體\*
\# 這不是標題
\~~ 這不是刪除線 \~~

這叫跳脫(escape),更多細節可以看 Markdown 跳脫

常見問題

Markdown 原生支援哪些文字樣式?

CommonMark 標準只定義了三種行內樣式:粗體(**)、斜體(*)和行內程式碼(`)。刪除線、高亮、底線、文字顏色等都不在標準內 [^1] [^3]。

為什麼我的樣式在 GitHub 上不生效?

GitHub 使用的是自己的 Markdown 渲染器,它會過濾掉大部分 HTML 標籤和所有行內樣式。如果你用了 ==高亮==<mark><span style="color:red"> 這些寫法,在 GitHub 上都不會生效。在 GitHub 上可靠的樣式只有粗體、斜體、刪除線和行內程式碼 [^2]。

粗體和斜體的符號可以混用嗎?

可以。**_文字_*****文字*** 效果一樣。但要注意底線(_)在單字內部可能會被當成斜體標記,比如 some_variable_name 裡的底線在某些解析器中會觸發斜體。用星號更安全 [^1]。

Markdown 能改字型和字號嗎?

純 Markdown 語法不支援。Typora 可以透過主題 CSS 修改,Obsidian 透過 CSS 片段修改,GitHub 完全不支援。如果你需要調整字體大小,可以看 Markdown 字體大小

樣式疊加有什麼限制?

行內程式碼內不能巢狀任何 Markdown 樣式。粗體和斜體可以互相疊加,刪除線可以和粗體或斜體疊加。高亮和其他樣式的疊加取決於平台——Obsidian 支援得最好,其他平台不一定行。


參考來源

[^1]: CommonMark Spec — Markdown 官方規範,定義了粗體、斜體等核心語法的解析規則 [^2]: GitHub Docs — GitHub Flavored Markdown 規範,GitHub 官方格式化文件 [^3]: Daring Fireball — Markdown Syntax Documentation,John Gruber 的原始 Markdown 規範 [^4]: Markdown Guide — Basic Syntax,權威的 Markdown 基礎語法參考 [^5]: Stack Overflow — How to apply color on text in Markdown,社群討論 Markdown 文字顏色的解決方案