Markdown 方言对比:CommonMark / GFM / 微信 / 飞书 / 语雀的语法差异

· 约 6 分钟 ✍️ Markdown 编辑器

Markdown 看起来”通用”——但跨平台分享时 80% 的人都遇到过排版异常。根因是 Markdown 没有统一规范:John Gruber 2004 年的”参考实现 + 示例”留下大量歧义,各平台为了修复歧义和加扩展形成了不同方言。理解这些差异能避免”GitHub 上正常发布到微信全乱”的痛苦。

主流 Markdown 方言一览

方言出处特点适用
原始 MarkdownJohn Gruber 2004模糊规范历史参考
CommonMark2014 标准化严格规范跨平台基线
GFMGitHubCommonMark + 表格 / 任务列表 / 自动链接GitHub / 通用
Markdown ExtraPHP Markdown加表格 / 脚注 / 属性部分博客系统
MultiMarkdownFletcher Penney学术写作扩展学术 / 出版
Pandoc MarkdownPandoc最强大、最复杂文档转换
微信富文本微信公众号不支持 Markdown 直接渲染需转换工具
飞书 / 语雀平台专属部分兼容 GFM + 自有扩展团队协作

共同语法(所有方言都支持)

# 一级标题
## 二级标题
### 三级标题

**粗体** *斜体* `行内代码`

> 引用文本

- 无序列表
- 项目 2

1. 有序列表
2. 项目 2

[链接文字](https://example.com)
![图片描述](image.jpg)

`​``
代码块
`​``

这些是 Markdown 的”基础公约”——任何平台都能渲染。

GFM 独有(GitHub / 通用扩展)

表格

| 列 1 | 列 2 | 列 3 |
|------|------|------|
| A    | B    | C    |
| 居中 | 右对齐 | 左对齐 |

对齐

| 左 | 中 | 右 |
|:---|:---:|---:|
| A  | B  | C  |

注意:CommonMark 不支持表格——所以纯 CommonMark 渲染器看不到表格。

任务列表

- [x] 已完成
- [ ] 待办
- [ ] 子任务
  - [x] 子项 1
  - [ ] 子项 2

删除线

~~删除文字~~

自动链接

https://example.com   ← 自动转为可点链接
@username             ← GitHub 内自动转用户链接
#123                  ← GitHub 内自动转 issue 链接

代码语言高亮

```javascript
function hello() {
  console.log("Hi");
}
```

支持的语言(PrismJS / highlight.js / Shiki 大致一样):

  • 主流:js, ts, py, go, rust, java, c, cpp, csharp
  • 数据:json, yaml, toml, xml, csv
  • 命令行:bash, sh, shell, powershell
  • 数据库:sql
  • 标记:html, css, markdown
  • 特殊:diff, mermaid

平台特殊语法

GitHub 独有

[!NOTE]   ← Alert (2023+)
[!TIP]
[!IMPORTANT]
[!WARNING]
[!CAUTION]

> [!WARNING]
> 这是一个警告框

GitLab 独有

{++ 添加文字 ++}    ← CriticMarkup
{-- 删除文字 --}
{== 高亮文字 ==}
{>> 评论 <<}

Notion 独有

  • / 命令插入元素(不是纯 Markdown)
  • 数据库块、嵌入、callout 等

语雀独有

:::tip
提示信息
:::

:::warning
警告
:::

:::danger
危险
:::

Hexo / Hugo / Jekyll(静态博客)

各自的 frontmatter(YAML / TOML):

---
title: 文章标题
date: 2026-04-26
tags: [markdown, web]
---

正文...

数学公式:哪些支持 LaTeX

行内公式:$E = mc^2$
块级公式:
$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$

支持平台

  • ✅ Typora, Obsidian, Logseq, HackMD
  • ✅ GitHub(issue/PR/discussion 直接支持,2024 年起 .md 文件需启用)
  • ✅ GitLab
  • ✅ Notion(/equation
  • ✅ 语雀
  • ✅ Jupyter / Quarto / R Markdown
  • ✅ MkDocs(配插件)

不支持

  • ❌ 微信公众号(必须截图)
  • ❌ 知乎(用自己的 [公式] 标签)
  • ❌ CSDN
  • ❌ 多数普通博客(看主题是否装 MathJax / KaTeX)

兜底方案

  1. 公式渲染成 PNG / SVG,作为图片嵌入
  2. 用 LaTeX → 图片转换工具(CodeCogs / texit)
  3. 用 Unicode 字符替代(α β π Σ ∫)

微信公众号工作流

核心:微信公众号不支持 Markdown 直接渲染,需要转 HTML。

1. 用 Markdown 编辑器写文章(Typora / VS Code / 在线工具)

2. 用转换工具转 HTML(含内联样式)
   - md2wechat
   - Mdnice (mdnice.com)
   - wechat-md
   - Markdown Here

3. 选择 / 复制 HTML 渲染结果

4. 粘贴到微信公众号编辑器

5. 公众号编辑器保留 HTML 内联样式

6. 预览 + 调整 + 发布

为什么必须内联样式

  • 公众号编辑器去除外部 CSS / <style> 标签
  • 只保留每个元素的 style="..." 属性
  • 转换工具会把 CSS 规则全部”展平”到 style 属性

陷阱

  • 复制纯 Markdown 文本到公众号 → 显示 ** # 等原始符号
  • 复制带 CSS 类的 HTML → 样式丢失
  • 必须复制渲染后的 HTML 带内联样式

飞书 / 语雀的 Markdown 支持

功能飞书语雀钉钉文档
标题 / 列表 / 强调
表格✅(语法)✅(语法)⚠(需用按钮)
代码块 + 高亮⚠(语言少)
任务列表
LaTeX 公式
自定义 callout
直接粘贴 .md✅(多数语法保留)⚠(部分丢失)
导出为 .md❌(部分支持)

实务

  • 语雀:Markdown 支持最完整,可作为协作 + Markdown 真理源
  • 飞书:富文本为主,Markdown 是”输入便利”
  • 钉钉文档:Markdown 支持最弱,建议用富文本编辑

CommonMark 与 GFM 的歧义点

历史上各 Markdown 实现处理不一致的点(CommonMark 给出明确规范):

歧义CommonMark 规范GitHub OldGitHub New (CMARK)
列表项内嵌段落需要 4 空格缩进2 空格2 或 4 空格
段落起始的 >引用引用引用
强调嵌套复杂规则简化标准化
HTML 内嵌严格分块宽松严格
链接定义文档级段级文档级

陷阱:从老 GitHub 迁移到 CommonMark 实现时,少数老文档渲染会变化。

中文排版的常见坑

中英混排

错误:Hello世界 React组件
正确:Hello 世界 React 组件     ← 中英文之间空格

自动化方案

  • pangu.js:浏览器 / Node.js 自动加空格
  • VS Code 插件 “Pangu-Markdown”
  • CSS text-spacing: ideograph-alpha(部分浏览器支持)

全角 vs 半角标点

全角:你好,世界!这是 (test)。
半角:你好,世界! 这是(test).
  • 出版 / 文学:全角(视觉舒适)
  • 程序员 / 文档:半角(与代码协调)
  • 不要混用:选一种风格贯穿全文

引号

"双引号"   ← Markdown 里仍显示直引号 "..."
"中文引号"  ← 必须手动输入全角

可以用 SmartyPants 自动转换:
"hello" → "hello"  (部分平台支持)

行末标点掉行

中文标点(。!?)跑到下行行首很难看。

CSS 方案

p { word-break: keep-all; line-break: strict; }

Markdown 层面:用零宽空格 或非断空格   控制(不优雅)。

跨平台兼容性最佳实践

"最大公约数"原则:

基础语法(所有平台):标题 / 段落 / 列表 / 强调 / 链接 / 图片 / 代码

GFM(多数平台):表格 / 任务列表 / 删除线 / 代码高亮

方言扩展(部分平台):LaTeX / Mermaid / Callout / 脚注

写文章时按"最低支持平台"选择语法

实务

  • 跨平台 .md 文件 → CommonMark + GFM 表格 + 代码高亮
  • GitHub 内部 → 全 GFM + GitHub Alert
  • 微信公众号 → 写 Markdown + 工具转 HTML
  • 学术 / 数学 → Quarto / R Markdown(最强 LaTeX 支持)

转换工具速查

用途工具
Markdown ↔ HTMLPandoc, marked, markdown-it
Markdown ↔ WordPandoc
Markdown ↔ PDFPandoc + LaTeX, marp(slides)
Markdown → 公众号md2wechat, Mdnice, Markdown Here
Markdown → 知乎直接粘贴(知乎支持基础语法)
Markdown → 飞书 / 语雀直接粘贴
Markdown → 幻灯片Marp, reveal-md, Slidev
静态站点生成MkDocs, Hugo, Hexo, Astro, Docusaurus

实战清单

必做

  1. 写文章前先确认目标平台方言
  2. 跨平台分享用 GFM 基础(不依赖方言扩展)
  3. 表格 / 公式 / 高亮等扩展确认平台支持
  4. 微信公众号必经转换工具
  5. 中英混排自动加空格(pangu.js)
  6. 代码块始终指定语言(text 兜底)

避免

  1. GitHub 用 GFM 写完直接粘贴到微信
  2. 依赖单平台专属语法(飞书 callout)跨平台
  3. 数学公式用 LaTeX 不确认平台支持
  4. 不指定代码语言(无高亮)
  5. 中英混排不加空格(拥挤难读)
  6. 平台间互导期望 100% 保真

Markdown 的”通用性”是个温柔的谎言——理解方言差异、按目标平台选语法、必要时用转换工具,才能让一份文档真的”跨平台”。

❓ 常见问题

Markdown 不是有标准吗?为什么各平台显示不一样?

Markdown 创始人 John Gruber 2004 年发明时没写正式规范——只有"参考实现"和示例文档,留下大量歧义。后续不同平台为修复歧义和加扩展,分化成多种方言。主流方言:(1) CommonMark(2014)——最严格的标准化版本,规范 600+ 条;(2) GFM(GitHub Flavored Markdown)——CommonMark + 表格 / 删除线 / 任务列表 / 自动链接;(3) Markdown Extra —— 加表格、脚注、属性;(4) 微信公众号 —— 不直接支持 Markdown,需要用第三方工具转 HTML;(5) 飞书 / 语雀 / 钉钉 —— 自己的方言,与 GFM 部分兼容。典型分化:(1) 表格——CommonMark 不支持,GFM 支持;(2) 任务列表 - [ ] —— GFM 独有;(3) 数学公式 $$ —— 仅部分支持(Typora、HackMD、Obsidian);(4) Emoji 短代码 :smile: —— GitHub 支持,多数其他不支持。实务:写文章前先确认目标平台的方言,避免最后才发现不兼容。

表格语法到底有几种?为什么我的表格在微信里散了?

表格语法本身只有 GFM 一种主流形式,但渲染差异巨大。GFM 标准表格(GitHub / 飞书 / 语雀 / Obsidian / Typora 等支持):``\n| 列 1 | 列 2 |\n|------|------|\n| 内容 | 内容 |\n`微信公众号不直接渲染 Markdown 表格 —— 必须先转成 HTML 表格再粘贴:(1) 用 md2wechat 工具转 HTML;(2) 复制带样式的 HTML 到公众号编辑器;(3) 微信会保留 HTML 表格的视觉效果;(4) 直接粘贴 Markdown 文本会变成纯文本(管道符 / 横线都显示出来)。飞书 / 语雀 —— 富文本编辑器,把 Markdown 表格转成可视化表格 —— 但单元格内换行 / 复杂格式可能丢失陷阱:(1) 表格内含管道符 | —— 必须转义为 \\|`;(2) 表格行数过多在小屏移动端横向滚动;(3) 单元格内 Markdown 渲染(加粗 / [链接])——多数支持但少数纯文本平台不支持。实务:复杂表格 → 用 HTML 直接写而不是 Markdown;表格少 → Markdown 转换后效果可控。

GitHub 用的 GFM 和 CommonMark 有什么区别?

GFM 是 CommonMark 的超集,加了几个常用扩展。CommonMark(基础):(1) 标题 / 段落 / 列表 / 引用 / 代码;(2) 强调(粗体 / 斜体);(3) 链接 / 图片 / 内联代码;(4) 不支持表格、删除线、任务列表。GFM 在 CommonMark 上加:(1) 表格——| 列 |... 语法;(2) 删除线——~~文字~~;(3) 任务列表——- [ ] / - [x];(4) 自动链接——https://example.com 自动转为可点链接;(5) mention——@username 自动链接到用户主页(GitHub 内);(6) issue 链接——#123 自动链接到 issue(GitHub 内);(7) emoji 短代码——:smile: 自动转 emoji(GitHub / GitLab 内);(8) 代码块语言高亮—— `javascript 触发语法高亮。实务:(1) 写 README.md / GitHub Issue → 用 GFM;(2) 跨平台分享 → 退回 CommonMark;(3) 不确定平台支持 → 先试 GFM,发现失效改 CommonMark。

微信公众号支持 Markdown 吗?怎么把 Markdown 转成公众号样式?

微信公众号不直接支持 Markdown,必须用第三方工具转。典型工作流:(1) 用 Markdown 编辑器写文章;(2) 用 md2wechat / Typora / Mdnice / wechat-md / 365 工具箱的 md2wechat 工具转换;(3) 工具输出带内联样式的 HTML(公众号编辑器接受 HTML 但要内联样式);(4) 复制 HTML / 渲染结果到公众号编辑器;(5) 公众号编辑器保留排版。为什么必须内联样式:公众号编辑器去除外部 CSS,只保留 style="" 内联样式 —— 转换工具会把 CSS 全部展开到每个元素的 style 属性。典型转换工具的样式特点:(1) Mdnice / md2wechat ——主流工具,预设主题;(2) 用户可自定义 CSS 主题;(3) 代码块用图片替代以保留高亮(部分工具);(4) 表格转 HTML table。陷阱:(1) 转换后直接复制而不是"复制 HTML"——可能丢失样式;(2) 公众号编辑器粘贴后字体可能被强制覆盖——平台样式优先级最高;(3) 发布预览时再确认手机端效果——电脑端正常移动端可能错乱。

飞书 / 语雀 / 钉钉文档支持 Markdown 吗?

部分支持,且各有局限飞书文档 —— 支持 Markdown 输入(开始一行打 # 自动转标题),但内部存储是富文本:(1) 支持表格、任务列表、代码块;(2) 不支持 LaTeX 数学;(3) 复制 Markdown 文本粘贴 → 多数语法保留;(4) 复制富文本到 Markdown 文件 → 部分格式丢失。语雀 —— Markdown 支持最完整:(1) 支持 GFM 全部语法;(2) 支持 LaTeX;(3) 支持自定义 callout(:::tip 等);(4) 文档可导出为 Markdown 文件。钉钉文档 —— 只支持基础 Markdown:(1) 标题 / 列表 / 强调 / 链接 / 引用;(2) 不支持表格 Markdown 语法(要用富文本表格按钮);(3) 代码块支持但语言高亮少。陷阱:(1) 飞书 / 语雀 / 钉钉之间互导,格式损失大;(2) 要做"Markdown 真理源" 应该把 .md 文件存 Git,飞书 / 语雀只是消费方;(3) 部分专属语法(飞书的 callout、语雀的卡片)跨平台不兼容。

数学公式 LaTeX 在哪些平台支持?

支持的平台:(1) Typora / Obsidian / Logseq / HackMD —— 桌面 / 笔记类完整支持 $$...$$ 块级 + $...$ 行内;(2) GitHub ——2022 年起支持,仅 issue / PR / discussion 有效,README 仍不支持(2024 年新增 .md 文件支持但需开启);(3) GitLab ——支持;(4) Notion —— 支持(用 /equation 命令);(5) 语雀 ——支持;(6) Jupyter / Quarto / R Markdown ——完整支持(学术写作主力);(7) MkDocs / Hugo / Hexo —— 配插件支持。不支持的:(1) 微信公众号 —— 公式必须截图或转 SVG;(2) CSDN / 知乎 ——知乎自己的语法([公式] 标签包围)不是标准 LaTeX;(3) 多数博客平台 —— 看主题是否有 MathJax / KaTeX。实务:(1) 学术写作 → Quarto / R Markdown / Typst;(2) 个人笔记 → Obsidian / Logseq;(3) 跨平台分享 → 公式截图 PNG 嵌入图片;(4) 简单公式 → 用 Unicode 字符(α β π Σ)替代 LaTeX。

Markdown 写代码块怎么选语言?高亮怎么实现?

`language 指定语言支持范围:(1) 主流编程语言(js / python / go / rust / java 等 100+)—— 用 PrismJS / highlight.js / Shiki 渲染;(2) 配置文件(json / yaml / toml / xml / ini);(3) 命令行(bash / sh / shell / powershell);(4) 标记语言(html / css / sql);(5) 数据格式(csv / tsv);(6) 特殊(diff / mermaid / plantuml)。语言别名:(1) js = javascript;(2) py = python;(3) sh = bash;(4) c++ = cpp;(5) cs = csharp没指定语言:纯文本显示,无高亮。陷阱:(1) 错误语言名(pyt / js2)—— 多数渲染器静默无高亮;(2) 平台不支持的语言 —— 部分罕见语言(V / Crystal)支持差;(3) 行号显示 —— 不是 Markdown 标准,是渲染器扩展(部分平台支持,部分不支持)。最佳实践:(1) 始终指定语言(即使是纯文本用 text);(2) 命令行用 bashsh(最广泛识别);(3) JSON / YAML 等数据用 json / yaml;(4) 配置文件未明确格式 → text 兜底。

Markdown 中文排版有哪些坑?为什么我的中英文混排看起来挤?

核心问题:CJK 字符与 ASCII 字符的间距症状:(1) "Hello 世界" 中英文之间没有自动加空格 → 视觉上挤在一起;(2) 中文标点全角 + 英文紧贴 → 不美观;(3) 行末标点(。!?)跑到下行第一个位置 → 排版乱;(4) 引号 " 在 Markdown 里不会自动转中文引号 "解决方案:(1) 手动加空格 —— "Hello 世界" 改为 "Hello 世界"(中英文之间空格);(2) CSS 自动加空格 —— text-spacing: ideograph-alpha / auto-space(部分浏览器支持);(3) 专业排版工具 —— 用 pangu.js 自动加空格;(4) 避免行末标点掉行 —— 排版工具 / CSS 控制;(5) 半角全角 —— 不要混用,明确选半角(程序员风格)或全角(出版风格)。实务:(1) 公众号 / 简书 → pangu.js 处理后再发;(2) 个人博客 → CSS text-spacing 一劳永逸;(3) GitHub README → 手动加空格习惯;(4) 学术写作 → LaTeX 的 xeCJK 包专门处理。

✍️ 打开 Markdown 编辑器 实时分栏预览·工具栏·代码高亮·图片粘贴 Base64·导出 MD/HTML