Markdown

Markdown是一种轻量级标记语言，创始人为约翰·格鲁伯。它允许人们使用易读易写的纯文本格式编写文档，然后转换成有效的XHTML（或者HTML）文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。

由于Markdown的轻量化、易读易写特性，并且对于图片、图表都有支援，目前许多网站都广泛使用Markdown来撰写说明文件或是用于论坛上发表讯息。如GitHub、Reddit、Discord、Diaspora、Stack Exchange、OpenStreetMap、SourceForge、简书等，甚至还能被用来撰写电子书。许多大语言模型的输出也采用了Markdown的格式以支援简单的排版需求（如小节、粗体、数学公式等）。

## 历史

约翰·格鲁伯在2004年创造了Markdown语言，在语法上有很大一部分是跟亚伦·斯沃茨共同合作的。这个语言的目的是希望大家使用“易于阅读、易于撰写的纯文字格式，并选择性地转换成有效的XHTML（或是HTML）”。

其中最重要的设计是可读性，也就是说这个语言应该要能直接在字面上阅读，而不用记忆格式化指令标记（像是RTF与HTML）。

因此，它是现行电子邮件标记格式的惯例，虽然它也借鉴了几个早期的标记语言，如：、Textile (标记语言)、reStructuredText。格鲁伯也编写了的Perl脚本：Markdown.pl，用于把Markdown语法编写的内容转换成有效的、结构良好的XHTML或HTML内容，并将左尖括号`<`和`&`号替换成它们各自的字符实体引用。它可以用作单独的脚本，Blosxom和Movable Type的插件又或者BBEdit的文本过滤器。Markdown也已经被其他人用Perl和别的编程语言重新实现，其中一个Perl模块放在了CPAN(Text::Markdown)上。它基于一个BSD风格的许可证分发并可以作为几个内容管理系统的插件。

### 标准化

Markdown已经成为典型的转换为HTML的非正式规范和参考实现。随着时间的推移，出现了许多Markdown实现。人们开发这些主要是由于在基本语法之上需要额外的功能 - 例如表格，脚注，定义列表（技术上的HTML描述列表）和HTML块内的Markdown。其中一些行为偏离了最开始的参考实现。与此同时，非正式规范中的一些含糊不清引起了人们的注意。这些问题促使Markdown解析器的一些开发人员努力实现标准化。

Babelmark是一个可用于比较各种实现的输出的工具，以促进关于如何以及是否应该阐明Markdown规范的某些模糊方面的讨论。格鲁伯认为不应完全标准化：“不同的网站（和人们）有不同的需求。没有一种语法可以让所有人满意。”

2016年3月发布了RFC 7763和RFC 7764。RFC 7763 从原始变体引入了MIME类型 text/markdown。RFC 7764讨论并注册了MultiMarkdown、GitHub Flavored Markdown (GFM)、Pandoc、CommonMark及Markdown等变体。

从2012年开始，包括Jeff Atwood和John MacFarlane在内的一群人启动了标准化工作。一个社区网站现在旨在记录可用于文档作者和开发人员的各种工具和资源，以及各种Markdown实现的实现者。2014年9月，格鲁伯反对在这一工作中继续使用“Markdown”这个名字，其被更名为CommonMark。CommonMark.org发布了规范、参考实现和测试套件的几个版本，并计划在2018年宣布最终的1.0规范和测试套件。

### GFM

2017年，GitHub发布了基于CommonMark的GitHub Flavored Markdown（GFM）的正式规范。除了表格、删除线、自动链接和任务列表被GitHub规范作为扩展添加之外，它遵循CommonMark规范。GitHub还相应地更改了其站点上使用的解析器，这要求更改某些文档 - 例如，GFM现在要求创建标题的哈希符号由空格字符分隔。

### Markdown Extra

Markdown Extra是一种轻量级标记语言，基于在PHP（最初）、Python和Ruby中实现的Markdown。它添加了普通Markdown语法不具备的功能。内容管理系统支持Markdown Extra，例如Drupal和TYPO3。

它为Markdown添加了以下功能：

- HTML块内的Markdown标记
- 具有id / class属性的元素
- 围栏代码块
- 表格
- 定义清单
- 脚注
- 缩写

## 示例

Markdown语法｜由Markdown处理器产生的HTML｜浏览器显示效果

`md # 一级标题 ## 二级标题 段落以空白行分隔。行末两个空格 产生断行。文本属性：*斜体*、 **粗体**、`等宽字体Monospace`。水平线： --- 列表： * 张三 * 李四 * 王二 编号列表： 1. 不论 2. 三七 3. 二十一 [链接](http://example.com)。｜[图](Icon-pictures.png "icon") > Markdown使用“>”字符来引用。行间<abbr title="Hypertext Markup Language">HTML</abbr>亦受支持。 ｜ ｜一级標題 二级標題 段落以空白行分隔。行末兩個空格 產生斷行。文本屬性：斜體、粗體、`等宽字型Monospace`。水平线：列表：、张三、李四、王二 编号列表： # 不论 # 三七 # 二十一 http://example.com。

<image>

Markdown使用“>”字元来引用。行间HTML亦受支持。

```html
<h1>一級標題</h1>

<h2>二級標題</h2>

<p>段落以空白行分隔。</p>

<p>行末兩個空格<br />
產生斷行。</p>

<p>文本屬性：<em>斜體</em>。
<strong>粗體</strong>、<code>等寬字型Monospace</code>。</p>

<p>水平線：</p>

<hr />

<p>列表：</p>

<ul>
<li>張三</li>
<li>李四</li>
<li>王二</li>
</ul>

<p>編號列表：</p>

<ol>
<li>不論</li>
<li>三七</li>
<li>二十一</li>
</ol>

<p><a href="http://example.com">連結</a>。</p>

<p><img alt="圖" title="icon" src="Icon-pictures.png" /></p>

<blockquote>
<p>Markdown使用「&gt;」字元來引用。</p>
</blockquote>

<p>行間<abbr title="Hypertext Markup Language">HTML</abbr>亦受支援。</p>
```

```html
<h1>一级标题</h1>

<h2>二级标题</h2>

<p>段落以空白行分隔。</p>

<p>行末两个空格<br />
产生断行。</p>

<p>文本属性：<em>斜体</em>。
<strong>粗体</strong>、<code>等宽字体Monospace</code>。</p>

<p>水平线：</p>

<hr />

<p>列表：</p>

<ul>
<li>张三</li>
<li>李四</li>
<li>王二</li>
</ul>

<p>编号列表：</p>

<ol>
<li>不论</li>
<li>三七</li>
<li>二十一</li>
</ol>

<p><a href="http://example.com">链接</a>。</p>

<p><img alt="图" title="icon" src="Icon-pictures.png" /></p>

<blockquote>
<p>Markdown使用“&gt;”字符来引用。</p>
</blockquote>

<p>行间<abbr title="Hypertext Markup Language">HTML</abbr>亦受支持。</p>
```

## 实现

Markdown的实现可用于十几种编程语言；此外，许多平台和框架都支持Markdown。例如，Markdown插件适用于每个主要的博客平台。

虽然Markdown是一种最小标记语言，并且使用普通文本编辑器进行读取和编辑，但是有专门设计的编辑器可以预览具有样式的文件，这些样式可用于所有主要平台。许多通用文本和代码编辑器都具有内置于其中的Markdown的语法高亮插件，或者可用作可选下载。编辑器可以具有并排预览窗口或直接以所见即所得的方式呈现代码。

- 源代码文档生成器Doxygen支持Markdown的额外功能。
- RStudio是一个用于R的IDE，为称为sundown的Markdown变体提供了C++包装函数。
- GitHub Flavored Markdown（GFM）忽略单词中的下划线，并添加语法高亮显示、任务列表和表格。
- Discount – 一个C语言实现。
- MarkAPL是一个用Dyalog APL编写的转换器。它支持隔离块，智能排版，链接引用和特殊属性，并可以生成目录。
- PHP Markdown - 一个库包，包含PHP Markdown解析器及其有额外功能的兄弟PHP Markdown Extra。
- Markdig - 遵循CommonMark规范的.NET库，包括一组扩展和用户创建自己扩展的能力。
- WP Githuber MD - 一个WordPress 插件，实现了所见即所得的 Markdown 编辑器及增强语法。
- Visual Studio Code 对 Markdown 的支援度极高。
- MarkItDown - 一个Python库，用于将各种文件转换为Markdown，如PDF、PPT、Word等

## 外部链接

- https://daringfireball.net/projects/markdown/ for original John Gruber markup
- Markdown Guide: Tools – an independent source review of software that support Markdown

## 基本资料

- 扩展名：on
- 扩展名：`.md`, `.markdown`
- _nomimecode：on
- mime：`text/markdown`
- 统一类型标识：`net.daringfireball.markdown`
- 所有者：约翰·格鲁伯（与亚伦·斯沃茨在语法上合作）
- 发行日期：2004年3月19日
- 最新版本：1.0.1
- 最新版本：2004年12月17日
- 类型：标记语言
- 扩展为：MultiMarkdown, Markdown Extra, CommonMark
- 免费在线档案：是