所謂「Markdown 語法」到底是什麼

Markdown 語法就是一組用標點符號標記純文字的慣例。行首放 # 代表標題,用星號包住文字代表強調,減號加空格代表清單項目。文件用純文字讀就通順,渲染器再把這些慣例轉成 HTML。

重點摘要
  • 這個語言分成兩層:到處都能用的核心語法,以及支援度不一的擴充語法
  • 十個核心元素就涵蓋了絕大多數真實文件。
  • 本頁只把每個元素點名一次,細節與邊角案例留在八篇元素指南裡。
  • 東西沒有正確顯示時,問題通常出在目的地,而不是你打錯字。

核心語法:不會壞的那一層

核心語法是 John Gruber 在 2004 年推出、後來由 CommonMark 精確定義的那一套:標題、段落、強調、清單、連結、圖片、行內程式碼、引用區塊、分隔線。只要一個工具宣稱支援 Markdown,就一定支援這些。貼到 GitHub issue、Reddit 留言、靜態網站產生器或聊天框,結果都一樣。

擴充語法:後來才加,支援不齊

擴充語法是後來各家實作各自加上去的:表格、待辦清單、刪除線、註腳、帶語言標籤的圍欄程式碼區塊,以及像 GitHub 警示區塊這類單一平台的額外功能。

「支援度廣」不等於「全部支援」。在 README 裡完美的表格,貼到聊天訊息可能變成一整排管線符號,那並不是你的語法寫錯了。

真正該問的是「它會在哪裡被渲染」

所以該問的從來不只是「這個元素怎麼寫」,還要問「負責渲染的那個東西看不看得懂」。兩件事一起看,Markdown 就不再讓人意外。下面那張表一次回答兩個問題,一個元素一列。

每個元素怎麼寫、在哪裡有效

整個語言就在這一個畫面裡。把它當成這一群頁面的地圖:每一列點名一個元素,說明它是否到處安全,並把你送到深入說明它的那一頁。

完整元素對照表

元素你要輸入核心/擴充完整說明
標題# H1###### H6核心Markdown 標題
粗體**粗體**核心粗體與斜體
斜體*斜體*核心粗體與斜體
刪除線~~刪除~~擴充粗體與斜體
符號清單- 項目核心Markdown 清單
編號清單1. 項目核心Markdown 清單
待辦清單- [ ] 待辦擴充Markdown 清單
連結[文字](https://example.com)核心Markdown 連結
圖片![替代文字](image.png)核心Markdown 圖片
行內程式碼`程式碼`核心程式碼區塊
程式碼區塊(縮排式)行首四個空格核心程式碼區塊
程式碼區塊(圍欄式)三個反引號,可加語言名稱擴充,但幾乎全面支援程式碼區塊
引用區塊> 引用的一行核心引用區塊
表格| a | b | 再加一列 ---擴充Markdown 表格
註腳文字[^1] 再加 [^1]: 說明擴充註腳
分隔線單獨一行 ---核心語法速查表

有兩列需要補充說明

  • 圍欄式程式碼區塊原本屬於擴充語法,但 CommonMark 已將它納入,實務上支援度接近百分之百,可以直接當成安全的元素使用。
  • 四個空格的縮排式程式碼區塊屬於核心語法,這正是為什麼清單縮排過頭時,有時會莫名其妙冒出一塊你沒要求的灰底方框。

小提醒:先看第三欄,再看第四欄。知道一個元素屬於擴充語法,等於事先知道哪些平台會讓你失望,這比把語法背起來更省時間。

如果你要的是同樣的資訊、但不要旁邊那些說明文字,Markdown 語法速查表就是為列印與常駐分頁而做的版本。

值得照著走的學習順序

照筆畫排序對學習沒有幫助。下面這個順序之所以有效,是因為每一步都沿用上一步建立的心智模型,而且把每份文件都會用到的元素排在最前面。

先學結構,再學裝飾

標題開始,因為結構優先於裝飾,也因為它帶出了「行首標記」這個概念,而語言的一半都靠它運作。接著讀粗體與斜體,那是成本最低的一次成功,同時教會你語言的另一半:成對的分隔符號包住文字,而不是從行首開始。

接著是真正承載內容的元素

第三順位是清單,因為縮排從這裡開始有意義,而巢狀清單通常是大家的 Markdown 第一次壞掉的位置。第四是連結,值得單獨花點注意力,因為中括號接小括號的寫法跟前面所有元素都不一樣。緊接著讀圖片:語法完全相同,只是前面多一個驚嘆號,等於白賺一個元素。

最後才是會「包住其他東西」的那幾個

第六是程式碼區塊,它不只是拿來放程式碼。圍欄裡的內容不會被解析,所以這是你唯一能談論 Markdown 符號而不觸發它們的方法。第七是引用區塊,它是第一個能包住其他區塊的結構,先知道那些區塊是什麼才學得順。註腳留到最後:它屬於擴充語法、分成引用與定義兩半,而且只有在長文件裡才划算。

這八篇走完,上表就只剩表格本身沒學到,而它有自己的專屬指南。如果你想把整個語言當成一篇連貫的文章讀完,Markdown 完整指南就是同樣的內容寫成一整篇。

插圖:八塊編號踏腳石標著 Markdown 符號,從井字號一路排到註腳標記,形成一條學習路徑

最常出問題的是哪幾個元素

幾乎每一次「我的 Markdown 壞掉了」,都能追溯到底下五個元素之一。它們都不難寫,只是渲染器對它們的看法不一致。

五個慣犯

  • 表格是頭號問題,而且遙遙領先:Discord、Slack、Teams 都不支援,匯入 Notion 時也不太可靠。
  • 註腳來自 PHP Markdown Extra,不屬於核心語言。GitHub 遲至 2021 年才支援,純 CommonMark 剖析器至今仍會把中括號原樣印出來。
  • 待辦清單在 GitHub、GitLab、Obsidian 上會變成核取方塊,在其他地方幾乎都只是兩個中括號。
  • 刪除線在多數現代工具都能用,但雙波浪號不是核心語法,較舊的剖析器會直接忽略。
  • 巢狀清單壞掉的原因不是支援度,而是縮排。兩格、三格、四格空白在不同剖析器眼中意義不同,Tab 與空白混用則會讓所有剖析器一起出錯。

先確認方言,再懷疑自己打錯

真正有用的一件知識,是搞清楚你的目標平台講哪一種方言。多數現代工具已經收斂到 GitHub 風格 Markdown,也就是 CommonMark 再加上表格、待辦清單、刪除線與自動連結,本站編輯器渲染的也是這一套。

該寫哪一種 Markdown 方言說明怎麼判斷眼前是哪一種,Markdown 平台總覽則附上逐一 App 的對照表。所以東西沒有正確渲染時,先問元素是不是擴充語法,再問目的地支援到哪裡。真的很少是打錯字。

怎麼練才記得住

Markdown 是用手指學的,不是用眼睛。讀語法清單只留下「看過的印象」,實際打字才會變成「想得起來的記憶」,而你在半夜十一點趕文件時需要的是後者。

用打的,不要用看的

一個分頁開著 Markdown 編輯器,另一個開著這一頁。打一個元素,看即時預覽確認結果,再換下一個。哪個符號沒照你想的方式運作,預覽會立刻告訴你,這是最快的修正循環。

兩個值得交給工具的結構

  • 管線表格。用手對齊很煩,直接在表格產生器裡做好再貼回來。
  • 目錄。錨點必須跟標題完全對得上,目錄產生器可以一次生成。

注意:不要對著渲染後的畫面學語法。照抄一個標題「看起來的樣子」,學不到當初打了什麼。永遠把原始碼與預覽並排比對。

其餘的免費 Markdown 工具負責雙向轉換。語法練進手裡之後,剩下的變數就是你要發佈到哪裡,那正是 Markdown 平台總覽要處理的問題;想知道這麼小的語言為什麼會無所不在,就看什麼是 Markdown

相容性資料驗證日期

常見問題

Markdown 總共有幾個語法元素?

大約十五個。其中十個屬於核心語法,在任何渲染器都能用:標題、粗體、斜體、符號清單、編號清單、連結、圖片、行內程式碼、引用區塊與分隔線。其餘五個是擴充語法:表格、待辦清單、刪除線、註腳與圍欄式程式碼區塊。

核心語法與擴充語法差在哪裡?

核心語法是 2004 年的原始 Markdown,後來由 CommonMark 精確定義,到哪裡都安全。擴充語法是各家實作後來自行加上的,支援度因工具而異。最廣泛採用的擴充組合請見 GitHub 風格 Markdown

我需要把所有 Markdown 語法都學會嗎?

不用。標題、粗體、清單、連結、程式碼就涵蓋了絕大多數真實文件。表格與註腳等真的需要時再學。上面的順序是刻意排的,在任何一步停下來,學到的都已經夠用。

為什麼我的表格或註腳沒有正確顯示?

幾乎可以確定是目的地不支援,而不是你寫錯。兩者都屬於擴充語法,所以 Discord、Slack、Teams 與純 CommonMark 剖析器會直接忽略。先確認目標平台,再檢查是不是少了分隔列或區塊前的空行。

每個 App 的 Markdown 語法都一樣嗎?

核心的部分一樣,核心以上就看該 App 選用哪個剖析器。多數現代工具跟隨 GitHub 風格 Markdown,但聊天軟體只支援一小部分。平台總覽有逐一 App 的對照表,該寫哪一種方言則說明怎麼判斷。

延伸閱讀

立即使用編輯器

立即使用編輯器