MDViewer

Markdown 語法示範

2026-07-27 4305 字 約 9 分鐘

一頁涵蓋 MDViewer 支援的全部 Markdown 語法與視覺化能力:公式、表格、流程圖、語法標示、警示區塊、註腳等。

語法示範MermaidKaTeX

這一頁把 MDViewer 能算繪的東西全部示範一遍。你可以把它當作算繪能力自我檢查表——每個區塊都應該顯示為排版後的效果,而不是原始符號。

提示

把這個檔案下載到本機,用首頁的閱讀器開啟,會得到完全一致的算繪結果。

一、文字與行內格式

一般段落文字。粗體斜體粗斜體刪除線底線插入標示行內程式碼

數學下標與上標:H2O、E = mc2、第 42nd 項。

行內連結 CommonMark 規範 、自動連結 https://developer.mozilla.org/站內連結

縮寫會在停留時顯示全稱:HTML 與 CSS 都是前端基礎。

*[HTML]: HyperText Markup Language *[CSS]: Cascading Style Sheets

表情符號:🚀 ✨ 📚 ✅ ⚠️

強制換行在行尾加兩個空白: 這一行與上一行同屬一個段落。

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
一般段落文字。**粗體**、*斜體*、***粗斜體***、~~刪除線~~、++底線插入++、==標示==、`行內程式碼`
數學下標與上標:H~2~O、E = mc^2^、第 42^nd^ 項。

行內連結 [CommonMark 規範](https://commonmark.org/)、自動連結 <https://developer.mozilla.org/>、[站內連結](../quick-start/)。

縮寫會在停留時顯示全稱:HTML 與 CSS 都是前端基礎。

*[HTML]: HyperText Markup Language
*[CSS]: Cascading Style Sheets

表情符號::rocket: :sparkles: :books: :white_check_mark: :warning:

強制換行在行尾加兩個空白:
這一行與上一行同屬一個段落。

二、標題層級

標題會自動產生錨點,右側目錄可跳轉,滑鼠停留時標題末尾會出現 # 連結。

三級標題

四級標題

五級標題
六級標題

三、清單

項目符號清單

  • 第一項
  • 第二項
    • 巢狀第二層
      • 巢狀第三層
  • 第三項
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
- 第一項
- 第二項
  - 巢狀第二層
    - 巢狀第三層
- 第三項

編號清單

  1. 準備內容
  2. 用 Markdown 寫作
    1. 起草內文
    2. 邊寫邊預覽
  3. 發布出去
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
1. 準備內容
2. 用 Markdown 寫作
   1. 起草內文
   2. 邊寫邊預覽
3. 發布出去

待辦清單

  • 支援 GFM 待辦清單
  • 已完成項顯示刪除線
  • 未完成項
  • 支援巢狀
    • 子項也可勾選
    • 子項未完成
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
6
- [x] 支援 GFM 待辦清單
- [x] 已完成項顯示刪除線
- [ ] 未完成項
- [ ] 支援巢狀
  - [x] 子項也可勾選
  - [ ] 子項未完成

定義清單

Mermaid
用純文字描述圖表的語法,可算繪成流程圖、時序圖等。
Markdown
一種輕量級標記語言,用純文字表達排版結構。
KaTeX
在瀏覽器裡算繪 TeX 公式的排版函式庫,以速度見長。
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
6
7
8
Mermaid
: 用純文字描述圖表的語法,可算繪成流程圖、時序圖等。

Markdown
: 一種輕量級標記語言,用純文字表達排版結構。

KaTeX
: 在瀏覽器裡算繪 TeX 公式的排版函式庫,以速度見長。

四、引用與警示區塊

一般引用區塊。引用可以包含行內格式程式碼,以及多個段落。

這是引用中的第二段。

巢狀引用。

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
> 一般引用區塊。引用可以包含**行內格式**、`程式碼`,以及多個段落。
>
> 這是引用中的第二段。
>
> > 巢狀引用。

GitHub 風格的警示區塊會算繪成帶圖示的彩色卡片:

說明

用於補充說明的一般性資訊,不影響主流程。

提示

一條能讓你更省事的建議。例如:按 ? 可以查看全部快速鍵。

重要

完成任務所必需的關鍵資訊,略過會導致失敗。

注意

需要立即注意的內容,忽略可能帶來負面後果。

小心

有風險的操作,執行前請確認你清楚後果。

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> [!NOTE]
> 用於補充說明的一般性資訊,不影響主流程。

> [!TIP]
> 一條能讓你更省事的建議。例如:按 <kbd>?</kbd> 可以查看全部快速鍵。

> [!IMPORTANT]
> 完成任務所必需的關鍵資訊,略過會導致失敗。

> [!WARNING]
> 需要立即注意的內容,忽略可能帶來負面後果。

> [!CAUTION]
> 有風險的操作,執行前請確認你清楚後果。

五、程式碼

行內與圍籬程式碼

安裝指令是 npm install,設定檔是 package.json

1
2
3
4
5
# 找出目錄下所有 Markdown 檔案
find . -name "*.md" -not -path "./node_modules/*"

# 彙總總字數
wc -w $(find . -name "*.md") | tail -1

多語言標示

1
2
3
4
5
6
7
8
import MarkdownIt from 'markdown-it';

const md = new MarkdownIt({ html: true, linkify: true });

export function render(source) {
  const { data, content } = parseFrontMatter(source);
  return { meta: data, html: md.render(content) };
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from dataclasses import dataclass


@dataclass
class Document:
    path: str
    words: int

    @property
    def minutes(self) -> int:
        """按每分鐘 450 字估算中文閱讀時間。"""
        return max(1, round(self.words / 450))


docs = [Document("readme.md", 1280), Document("guide.md", 3400)]
print(sum(d.minutes for d in docs), "分鐘")
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import (
	"fmt"
	"strings"
)

func Slugify(title string) string {
	return strings.ToLower(strings.ReplaceAll(title, " ", "-"))
}

func main() {
	fmt.Println(Slugify("Hello Markdown World"))
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#[derive(Debug, Clone)]
pub struct Heading {
    pub level: u8,
    pub text: String,
}

impl Heading {
    pub fn anchor(&self) -> String {
        self.text.to_lowercase().replace(' ', "-")
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT d.path,
       COUNT(h.id) AS heading_count,
       SUM(d.words) AS total_words
FROM documents AS d
LEFT JOIN headings AS h ON h.doc_id = d.id
WHERE d.updated_at >= '2026-01-01'
GROUP BY d.path
HAVING COUNT(h.id) > 3
ORDER BY total_words DESC
LIMIT 20;
1
2
3
4
5
6
7
8
markup:
  goldmark:
    extensions:
      passthrough:
        enable: true
        delimiters:
          block: [["\\[", "\\]"], ["$$", "$$"]]
          inline: [["\\(", "\\)"], ["$", "$"]]
1
2
3
4
5
  function render(source) {
-   return marked(source);
+   const { data, content } = parseFrontMatter(source);
+   return md.render(content);
  }

程式碼區塊右上角提供複製行號開關自動換行按鈕;超過 24 行會自動摺疊。

六、表格

支援對齊語法,標題列可點擊排序,超寬時橫向捲動。

功能 引擎 體積 載入方式
Markdown 解析 markdown-it 505 KB 首屏載入
語法標示 highlight.js 含在主套件 首屏載入
數學公式 KaTeX 261 KB 按需載入
圖表 Mermaid 3.3 MB 按需載入
全文搜尋 Fuse.js 含在主套件 首屏載入
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
6
7
| 功能 | 引擎 | 體積 | 載入方式 |
|:-----|:----:|-----:|:---------|
| Markdown 解析 | markdown-it | 505 KB | 首屏載入 |
| 語法標示 | highlight.js | 含在主套件 | 首屏載入 |
| 數學公式 | KaTeX | 261 KB | 按需載入 |
| 圖表 | Mermaid | 3.3 MB | 按需載入 |
| 全文搜尋 | Fuse.js | 含在主套件 | 首屏載入 |

靠左 / 置中 / 靠右分別由 :---:---:---: 控制。

含複雜內容的表格

語法 寫法 效果
粗體 **文字** 文字
程式碼 `code` code
公式 $a^2+b^2$ $a^2+b^2$
連結 [名稱](url) 名稱
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
6
| 語法 | 寫法 | 效果 |
|------|------|------|
| 粗體 | `**文字**` | **文字** |
| 程式碼 | `` `code` `` | `code` |
| 公式 | `$a^2+b^2$` | $a^2+b^2$ |
| 連結 | `[名稱](url)` | [名稱](https://example.com) |

七、數學公式

行內公式

質能方程式 $E = mc^2$ 與尤拉恆等式 $e^{i\pi} + 1 = 0$ 都可以直接寫在句子裡。當 $n \to \infty$ 時,$\sum_{k=1}^{n} \frac{1}{k^2} \to \frac{\pi^2}{6}$。

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
質能方程式 $E = mc^2$ 與尤拉恆等式 $e^{i\pi} + 1 = 0$ 都可以直接寫在句子裡。當 $n \to \infty$ 時,$\sum_{k=1}^{n} \frac{1}{k^2} \to \frac{\pi^2}{6}$。

區塊公式

$$ \int_{-\infty}^{\infty} e^{-x^2} \, dx = \sqrt{\pi} $$

矩陣

$$ A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix} $$

多行對齊

$$ \begin{aligned} \nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \\ \nabla \cdot \mathbf{B} &= 0 \\ \nabla \times \mathbf{E} &= -\frac{\partial \mathbf{B}}{\partial t} \\ \nabla \times \mathbf{B} &= \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t} \end{aligned} $$

分段函數與積分

$$ f(x) = \begin{cases} x^2 & \text{if } x \geq 0 \\ -x^2 & \text{if } x < 0 \end{cases} \qquad \hat{f}(\xi) = \int_{-\infty}^{\infty} f(x)\, e^{-2\pi i x \xi}\, dx $$

八、圖表(Mermaid)

圖表會跟著明暗主題自動換色,停留時右上角可複製原始碼或下載 SVG。

流程圖

時序圖

類別圖

狀態圖

實體關聯圖

甘特圖

圓餅圖

使用者旅程圖

心智圖

Git 分支圖

九、摺疊區塊

點擊展開:為什麼圖表引擎要按需載入?

Mermaid 打包後約 3.3 MB,是整個專案裡最大的相依套件。如果放進首屏主套件,即使一篇文件裡沒有任何圖表,使用者也得先下載它。

因此 MDViewer 把 Mermaid 和 KaTeX 拆成獨立的 ES 模組,只有當頁面中真的出現 mermaid 程式碼區塊或數學公式時,才透過動態 import() 取得。對於純文字文件,首屏只需載入約 505 KB 的主套件。

點擊展開:支援哪些 Front Matter 格式?

三種都支援,閱讀器會自動辨識並在文件標題下方以摺疊卡片顯示:

  • YAML:以 --- 包住,最常用
  • TOML:以 +++ 包住
  • JSON:以 { } 包住

titledescriptiondateauthortags 等欄位會被擷取到文件頂部單獨呈現。

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<details>
<summary>點擊展開:為什麼圖表引擎要按需載入?</summary>

Mermaid 打包後約 3.3 MB,是整個專案裡最大的相依套件。如果放進首屏主套件,即使一篇文件裡沒有任何圖表,使用者也得先下載它。

因此 MDViewer 把 Mermaid 和 KaTeX 拆成獨立的 ES 模組,只有當頁面中真的出現 `mermaid` 程式碼區塊或數學公式時,才透過動態 `import()` 取得。對於純文字文件,首屏只需載入約 505 KB 的主套件。

</details>

<details>
<summary>點擊展開:支援哪些 Front Matter 格式?</summary>

三種都支援,閱讀器會自動辨識並在文件標題下方以摺疊卡片顯示:

- **YAML**:以 `---` 包住,最常用
- **TOML**:以 `+++` 包住
- **JSON**:以 `{ }` 包住

`title``description``date``author``tags` 等欄位會被擷取到文件頂部單獨呈現。

</details>

十、註腳

Markdown 誕生於 2004 年1,用來在純文字檔案裡寫帶格式的內容。如今大多數工具遵循 CommonMark 規範2,並在其上疊加 GitHub 風格擴充3


  1. 由 John Gruber 與 Aaron Swartz 共同設計,目標是讓文字在算繪之前就已經好讀。 ↩︎

  2. 2014 年發布的精確規範,消除了原始描述裡大量的歧義。 ↩︎

  3. 增加了表格、任務清單、刪除線與自動連結,也就是今天大多數人預設的那套語法。 ↩︎

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
Markdown 誕生於 2004 年[^origin],用來在純文字檔案裡寫帶格式的內容。如今大多數工具遵循 CommonMark 規範[^spec],並在其上疊加 GitHub 風格擴充[^gfm]。

[^origin]: 由 John Gruber 與 Aaron Swartz 共同設計,目標是讓文字在算繪之前就已經好讀。
[^spec]: 2014 年發布的精確規範,消除了原始描述裡大量的歧義。
[^gfm]: 增加了表格、任務清單、刪除線與自動連結,也就是今天大多數人預設的那套語法。

十一、圖片

圖片支援點擊放大、滾輪縮放與拖曳平移。帶標題的圖片會算繪為置中的圖說。

MDViewer 的三欄閱讀介面示意
三欄配置:左側檔案樹、中間內文、右側大綱

十二、原始 HTML

Markdown 中可以直接寫 HTML,會原樣算繪:

徽章元件 直接寫 HTML Ctrl + K
顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
6
<div style="display:flex;gap:.75rem;flex-wrap:wrap;align-items:center">
  <span class="badge">徽章元件</span>
  <span class="badge">直接寫 HTML</span>
  <kbd>Ctrl</kbd> + <kbd>K</kbd>
  <progress value="72" max="100" style="width:8rem"></progress>
</div>

十三、逸出與特殊字元

反斜線逸出:*不是斜體*、`不是程式碼`、# 不是標題。

HTML 實體:© — … → ≤ ≠

中文標點與西文混排:「引號」、《書名號》、破折號——以及刪節號……

顯示 Markdown 原始碼 隱藏 Markdown 原始碼
1
2
3
4
5
反斜線逸出:\*不是斜體\*、\`不是程式碼\`、\# 不是標題。

HTML 實體:&copy; &mdash; &hellip; &rarr; &le; &ne;

中文標點與西文混排:「引號」、《書名號》、破折號——以及刪節號……

算繪自我檢查清單

如果下面每一項都符合預期,表示算繪流程完全正常:

  • 標題帶錨點,右側目錄可跳轉並標示目前位置
  • 程式碼區塊有語法上色、語言標籤與複製按鈕
  • 表格有邊框與停留斑馬紋,標題列可點擊排序
  • 行內與區塊公式算繪為數學排版而非原始 LaTeX
  • 十種 Mermaid 圖表全部顯示為向量圖形
  • 警示區塊顯示為帶圖示的彩色卡片
  • 註腳可雙向跳轉
  • 圖片可點擊放大
  • 切換深色模式後圖表隨之換色