Markdown语法大全

Markdown基础语法,高级语法以及速记

Markdown 是一种轻量级的标记语言,可用于在纯文本文档中添加格式化元素。其设计宗旨是易于编写,更重要的是,易于阅读。该篇涵盖了从基础文本格式化到高级表格、数学公式及速记技巧,旨在帮助您快速掌握这种轻量级标记语言

1. Markdown背景

1.1 Markdown的发展历史

Markdown 是由 John Gruber 于 2004 年创建的一种轻量级标记语言,如今已成为世界上最流行的标记语言之一。到了2008年的时候,Stack Overflow的联合创始人 Jeff Atwood 推其成为 Stack Overflow的编辑方式,并且非常认同其设计;Github也在2009年左右开始使用Markdown

注记

Stack Overflow是一个全球最大的程序设计领域问答网站,由Jeff Atwood和Joel Spolsky于2008年创立。它采用问答(Q&A)形式,供程序员提出、解答编程问题,是工程师解决代码难题和分享技术知识的社群核心平台

  • 2012年公司组织一起制定出 Markdown的标准规范和其实现的标准测试用例

  • 2014年标准化项目最初被命名为 Standard Markdown,旨在创建一个包含 600 多个测试用例的严格规范,以确保所有兼容的实现都能产生完全相同的输出。然而,这一举动遭到了 Markdown 创始人 John Gruber 的强烈反对。他认为这个新标准偏离了他最初的哲学,为了规避冲突并继续推进标准化进程,项目在 2014 年 正式更名为 CommonMark。

  • 2016 年,互联网工程任务组(IETF)发布了 RFC 7763。这份文件正式为 Markdown 定义了媒体类型 text/markdown。这意味着 Markdown 文件在互联网上拥有了正式的“身份证”,操作系统和浏览器可以更准确地识别和处理它。

  • 2017年,在 CommonMark 的基础上,GitHub 增加了一些非常实用的扩展功能,如表格、任务列表、删除线等,这些功能深受开发者喜爱,被称为 GitHub Flavored Markdown (GFM)。

Markdown 已经形成了一个以 CommonMark 为核心,各种扩展(Flavors)为分支的健康生态

核心:CommonMark 保证了基础语法的稳定与统一

扩展: - GFM:成为技术文档和开发者社区的事实标准 - Microsoft Learn Markdown:增加了你提到的 > [!NOTE] 警报框等扩展,服务于其庞大的文档平台 - 其他:还有许多其他扩展,如支持数学公式的 LaTeX、支持脚注的 Pandoc Markdown 等

在AI时代,markdown语法以及类markdown语法已经成为了金标准

1.2 Markdown原理

Markdown 的底层其实并不神秘,它的核心本质可以概括为三个关键词:纯文本、解析规则和抽象语法树(AST)

markdown

  1. 物理底层:纯文本

Markdown 文件在硬盘上存储时,和你写的 .txt 文件没有任何区别

  • 编码:它通常使用 UTF-8 编码,这意味着它可以在任何操作系统(Windows, Mac, Linux)上被打开和读取,不会出现乱码
  • 内容:它只包含人类可读的字符。比如你想加粗,你实际上是在文本里输入了两个星号 **。计算机在底层看到的只是字符 * 的 ASCII 或 Unicode 码,而不是“加粗”这个指令
  • 跨平台性:因为它只是纯文本,所以它极其轻量,且永远不会因为软件版本更新而打不开
  1. 逻辑底层:解析与转换
  1. 解析器会逐行扫描你的文本,利用正则表达式或状态机来识别特定的符号模式
  2. 这是 Markdown 最核心的底层技术。解析器不会直接把文本变成 HTML,而是先把它转换成一种树状的数据结构,叫做 抽象语法树 (Abstract Syntax Tree, AST)
  3. 渲染 (Rendering),渲染器会遍历这棵 AST 树,根据规则把每个节点“翻译”成目标格式(通常是 HTML)

设计哲学

  • 内容:通过纯文本编写,永久保存,用不过时
  • 样式:由渲染器(如浏览器、Typora、VS Code)通过 CSS 动态决定。这意味着同一份 Markdown 文件,在 GitHub 上显示一种风格,在你的笔记软件里显示另一种风格,但内容永远不变

1.2 Markdown解析引擎的发展历史

随着 Markdown 语法的不断扩展(从纯文本到支持表格、数学公式、流程图等),解析器不得不从简单的字符串替换升级为复杂的抽象语法树(AST)构建

  1. 早期阶段:正则表达式与“蛮力”替换 (2004 - 2010)

在 Markdown 诞生初期,解析器的核心逻辑非常简单直接:正则表达式(Regular Expression)

  • 鼻祖:Markdown.pl (2004)

John Gruber 发布的第一个 Markdown 解析器是用 Perl 编写的 Markdown.pl。它的逻辑非常直观:定义一系列正则规则,按顺序扫描文本并进行替换

  • 代表引擎:Showdown (2007)

这是最早的 JavaScript 版本解析器,它将 Markdown 带入了浏览器端。Showdown 沿用了正则替换的思路

  1. 转折阶段:标准化与 AST 的引入 (2011 - 2015)

随着 GitHub Flavored Markdown (GFM) 的兴起和 CommonMark 标准的制定,开发者意识到正则表达式已经无法满足需求,必须引入编译器技术中的抽象语法树(AST)

  • 过渡者:Marked (2011)

Marked 是 GitHub 上非常早期的 JS 解析器。早期版本主要依赖正则,性能极高但兼容性一般。后期为了支持 CommonMark 标准,它也不得不引入更复杂的解析逻辑,甚至重构底层

  • 革新者:CommonMark.js / cmark (2014)

John MacFarlane 2014年时候最早创建的,他同时也是标准制定人之一,还是 Pandoc的作者。将Markdown文档解析成 抽象语法树(AST),并通过渲染(AST)转换成 HTML 或者 XML

  1. 现代阶段:PEG 与插件化生态 (2015 - 至今)

在现代,解析引擎不仅要快,还要极度灵活,支持各种“方言”(如数学公式、流程图)。解析表达式文法(PEG)和高度模块化的 AST 处理器成为了主流。

  • 技术流派:PEG (Parsing Expression Grammar)
  • 生态霸主:markdown-it (2014+)(Remarkable 是2014年左右的开源项目,目前已更新很少了;Markdown-it 是 Remarkable 核心两个作者后面开的开源项目,同时借鉴参考了 MacFarlane 的 Commonmark 的一些实现,也是功能、扩展性都非常不错的 Markdown解析引擎)

当前趋势

  • 双向绑定:现代编辑器(如 Typora, Obsidian)不仅需要将 Markdown 转为 HTML,还需要将 HTML 操作(如光标定位)映射回 Markdown 源码,这对 AST 的精确度提出了更高要求

  • WYSIWYG(所见即所得):解析器不再只是生成 HTML 字符串,而是直接生成可编辑的 DOM 节点或虚拟 DOM

1.3 Markdown优势

  1. 专注于文字内容
  2. 纯文本,易读易写,可以方便地纳入版本控制;
  3. 语法简单,没有什么学习成本,能轻松在码字的同时做出美观大方的排版
  • Markdown 无处不在。StackOverflow、CSDN、掘金、简书、GitBook、有道云笔记、V2EX、光谷社区等。主流的代码托管平台,如 GitHub、GitLab、BitBucket、Coding、Gitee 等等,都支持 Markdown 语法,很多开源项目的 README、开发文档、帮助文档、Wiki 等都用 Markdown 写作

  • Markdown 是纯文本可移植的。几乎可以使用任何应用程序打开包含 Markdown 格式的文本文件。如果你不喜欢当前使用的 Markdown 应用程序了,则可以将 Markdown 文件导入另一个 Markdown 应用程序中。

  • Markdown 是独立于平台的。你可以在运行任何操作系统的任何设备上创建 Markdown 格式的文本

注记

Markdown 入门的最佳方式就是多使用它。由于有大量免费工具的存在,上手 Markdown 是很方便的。比较遗憾的一点是各平台可能采用不同语言实现的 Markdown 解析引擎,或采用同一解析引擎的不同版本,而且可能有不同程度的定制与扩展,这导致在不同平台上使用 Markdown 写作时体验并不完全一致

1.4 Markdown创作的工具

  • 现代编辑器 VSCode/Atom
  • 传统编辑器 Vim/Sublime Text/Notepad++/Emacs
  • Markdown 文档生成器 Typora/Mark Text
  • IDE 自带编辑器 IntelliJ IDEA / Android Studio / WebStorm
  • 专用编辑器 Ulysses / Mou / 妙言 / Markpad
  • 在线编辑器等

2. 基础语法

Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。

注记

轻量级标记语言(Lightweight Markup Language, LML)是一类通过简单的纯文本符号来定义文档格式的语言

它的核心理念是:让文档的源代码在未被渲染(即没有转换成漂亮排版)的情况下,依然易于阅读和编写