MDViewer

Markdown 语法演示

2026-07-27 4230 字 约 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 图表全部显示为矢量图形
  • 警示块显示为带图标的彩色卡片
  • 脚注可双向跳转
  • 图片可点击放大
  • 切换深色模式后图表随之换色