Markdown 表格由三種列組成,每一種都用直線符號 | 搭出來。最上面是標題列,像 | 姓名 | 年齡 |。下面接一列連字號組成的分隔列,像 | --- | --- |。再往下每一行就是一列資料。

對齊由分隔列裡的冒號決定。靠左寫 :---,置中寫 :---:,靠右寫 ---:。除此之外什麼都不用 - 不用外掛、不用 HTML、不用畫表工具。

表格來自 GitHub 風格 Markdown(GFM),不在 2004 年的原始語法裡。它在 GitHub、GitLab、Reddit、Obsidian、VS Code 和我們的編輯器都能正常渲染。少數聊天軟體仍然只會原樣顯示那堆直線符號,下方的對照表會點名。

重點速覽

一定要有的列標題列,加上一列連字號組成的分隔列
對齊方式分隔列的冒號::--- 、:---: 、---:
儲存格內容只能放行內格式,不能放清單或段落
需要的方言GitHub 風格 Markdown,原始 Markdown 不支援
跳脫直線符號在它前面加一個反斜線

三種列組出一張表格

重點摘要
  • 資料列之前,一定要先有標題列和一列連字號組成的分隔列。
  • 對齊由分隔列的冒號決定,冒號之間有幾個連字號完全不影響結果。
  • 儲存格只放得下行內格式,塞清單或空白行會讓表格提早結束。
  • 表格是 GFM 的功能,所以 Discord 只會顯示直線符號,不會變成格子。

把下面這段貼進編輯器,看看預覽窗格的變化。

| 方案 | 價格      | 空間   |
| ---- | --------- | ------ |
| 免費 | $0        | 5 GB   |
| 專業 | $9 / 月   | 100 GB |
| 團隊 | $29 / 月  | 1 TB   |

結果是一張三欄表格,標題列粗體,下面三列資料。第一行變成標題儲存格。連字號那一行會直接消失,因為它唯一的任務就是告訴解析器「這一段是表格」。之後每一行都是一列。

上面對得整整齊齊的欄寬純粹是美觀。寫成 |方案|價格|空間| 結果一模一樣。留白只是讓下一個來改檔案的人比較好讀。

插圖:Markdown 表格的三種列(標題列、分隔列、資料列)組合成一張排版完成的表格

用冒號控制對齊

對齊設定寫在分隔列,一欄一個設定。

| 品項   | 數量 |    單價 |
| :----- | :--: | ------: |
| 筆記本 |  3   |  $4.50  |
| 原子筆 |  12  |  $1.20  |

三種冒號寫法各是什麼

  • :--- 讓整欄靠左。分隔列完全不加冒號時,結果也一樣。
  • :---: 讓整欄置中,適合短標籤和個位數。
  • ---: 讓整欄靠右,價格欄的小數點就會對齊。

不管選哪一種,標題儲存格和它下方的所有資料儲存格都會一起套用。

連字號控制不了的事

冒號之間有幾個連字號完全不影響結果。:-::-------: 產生一模一樣的置中欄。欄寬由渲染器和內容決定,絕不是由你的原始檔決定。

注意:分隔列的欄位要和標題列一一對應,順序也要一致。少一欄或多一欄,這一段就不再是表格。所有的列都會退回一段滿是直線符號的文字。

儲存格裡放得下什麼

儲存格只接受行內格式,其他都不行。以下這些都沒問題。

| 項目   | 範例                             |
| ------ | -------------------------------- |
| 粗體   | **已出貨**                       |
| 斜體   | *草稿*                           |
| 程式碼 | `npm install`                    |
| 連結   | [文件](https://example.com/docs) |
| 圖片   | ![標誌](logo.png)                |
| 換行   | 第一行<br>第二行               |

儲存格裡永遠不能放的東西

凡是需要第二行的內容都不行。清單、段落、引言區塊、圍欄式程式碼區塊都會直接讓那一列結束,因為解析器讀到換行就收工。要在儲存格裡換行,請用 HTML 標籤 <br>。GitHub、GitLab 和多數渲染器都接受。

空白儲存格與沒跳脫的直線

空白儲存格是合法的。寫成 | | 就會渲染成空白,這比硬塞一個破折號更誠實地表達「沒有資料」。原樣的直線符號則是相反的問題。一定要用反斜線跳脫,否則解析器會把它當成欄位分界,那一列就默默多出一欄。

小提醒:某個儲存格塞滿長篇文字,通常代表這張表格的形狀不對。儲存格控制在幾個字,把解釋移到表格下方的段落,手機螢幕才放得下。

哪些平台真的支援表格

直線表格來自 GFM 規範,所以支援程度取決於平台跟得多緊。以下是大家最常貼表格的幾個地方。

平台直線表格冒號對齊說明
GitHub支援支援README、議題、留言原生支援 GFM
GitLab支援支援以 GFM 為基礎,語法和 GitHub 相同
Reddit支援支援現行編輯器的貼文與留言都能渲染
Discord不支援不支援訊息只會原樣顯示那些直線符號
Notion貼上時轉換部分貼上的 Markdown 會變成 Notion 原生表格
Obsidian支援支援即時預覽,另有內建表格編輯器
VS Code 預覽支援支援內建預覽即可渲染 GFM 表格

遇到新工具時的判準

工具只要標榜支援 GitHub 風格 Markdown,表格就沒問題。如果是只有輕量格式的聊天軟體,就先假設不支援。那裡的備案是圍欄式程式碼區塊,至少欄位會以等寬字保持對齊。GFM 指南還列出了其他和表格一起出現的功能。

弄壞表格的三個錯誤

幾乎所有壞掉的表格都逃不出這三種原因。

一、忘了分隔列

少了它,整段會渲染成一段滿是直線符號的文字,而且事前沒有任何警告。

錯誤                  正確
| 姓名 | 職務 |       | 姓名 | 職務 |
| 小安 | 主管 |       | ---- | ---- |
                      | 小安 | 主管 |

二、表格中間有空白行

Markdown 把空白行視為一個區塊的結束。表格會在那裡中斷,下面的列全部變成一般文字。把空白行刪掉,所有的列就會重新連在一起。

三、儲存格裡的直線沒跳脫

儲存格裡的原樣 | 會把那一列硬生生切出多餘的欄。

錯誤                        正確
| 指令   | 意義   |         | 指令    | 意義   |
| ------ | ------ |         | ------- | ------ |
| a | b  | 直線   |         | a \| b  | 直線   |

還有一個比較安靜的問題值得知道。某一列的儲存格比標題列少時完全不會報錯。渲染器會直接補上空白,於是表格不是明顯壞掉,而是隱隱約約怪怪的。編輯器的即時預覽在你打字的當下就會把這四種情況照出來。

大型表格的快速做法

用手把二十列的表格對齊會浪費掉一個下午。改用這套流程吧。

  1. 先不管留白直接把每一列打完,原始檔的欄寬對輸出毫無影響。
  2. 資料本來就在試算表裡的話,把儲存格複製起來丟進表格轉 Markdown 工具,它會替你把定位字元換成直線符號。
  3. 從零開始?直接在 Markdown 表格產生器裡把格子填好,再把成品複製走。
  4. 欄數盡量少。九欄的表格在手機上根本讀不了,存成 PDF 時也會被裁掉。

Markdown 表格的天花板

合併儲存格、指定欄寬、表格標題,全都不在語法範圍內。一旦需要其中之一,正確答案就是直接寫一段原生 HTML <table>,GitHub 和本站都會照常渲染。Markdown 表格指南詳細示範了這種備案。

再往下就是取捨問題,而不是語法問題了。Markdown 與 HTML 的比較衡量了兩種寫法,語法速查表則讓你一眼查到分隔列的寫法。

相關問題

立即使用編輯器

開啟編輯器