Markdown

轻量级标记语言,常用于书写自述(README)文件

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

Markdown
互联网媒体类型text/markdown[1]
统一类型标识net.daringfireball.markdown
开发者约翰·格鲁伯(与亚伦·斯沃茨在语法上合作)
首次发布2004年3月19日​(20年前)​(2004-03-19[2][3]
最新版本
1.0.1
2004年12月17日​(19年前)​(2004-12-17[4]
格式类型标记语言
扩展为MultiMarkdown, Markdown Extra, CommonMark[5]
免费格式?[6]
网站daringfireball.net/projects/markdown

由于Markdown的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,目前许多网站都广泛使用Markdown来撰写帮助文档或是用于论坛上发表消息。如GitHubRedditDiscordDiasporaStack ExchangeOpenStreetMapSourceForge简书等,甚至还能被用来撰写电子书

历史

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

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

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

标准化

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

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

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

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

GFM

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

Markdown Extra

Markdown Extra是一种轻量级标记语言,基于在PHP(最初)、Python和Ruby[24]中实现的Markdown。它添加了普通Markdown语法不具备的功能。内容管理系统支持Markdown Extra,例如Drupal[25],TYPO3[26]和MediaWiki[27]

它为Markdown添加了以下功能:

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

示例

Markdown语法 由Markdown处理器产生的HTML 浏览器显示效果
# 一级標題

## 二级標題

段落以空白行分隔。

行末兩個空格  産生斷行。

文本屬性:*斜體*、
**粗體**`等寬字型Monospace`。

水平線:

---

列表:

  * 張三
  * 李四
  * 王二

編號列表:

  1. 不論
  2. 三七
  3. 二十一

[連結](http://example.com)

![](Icon-pictures.png "icon")

> Markdown使用電郵用字元「>」來引用。

行間<abbr title="Hypertext Markup Language">HTML</abbr>亦受支援。
<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>
一级标题
二级标题

段落以空白行分隔。

行末两个空格
产生断行。

文本属性:斜体粗体等寬字型Monospace

水平线:


列表:

  • 张三
  • 李四
  • 王二

编号列表:

  1. 不论
  2. 三七
  3. 二十一

链接

 

Markdown使用电邮用字符“>”来引用。

行间HTML亦受支持。

实现

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

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

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

参考文献

  1. ^ 1.0 1.1 RFC 7763页面存档备份,存于互联网档案馆) - The text/markdown Media Type
  2. ^ Swartz, Aaron. Markdown. Aaron Swartz: The Weblog. 2004-03-19 [2016-02-04]. (原始内容存档于2017-12-24). 
  3. ^ Gruber, John. Daring Fireball: Markdown. Daring Fireball. [2014-04-25]. (原始内容存档于2004-04-02). 
  4. ^ 4.0 4.1 4.2 Markdown 1.0.1 readme source code Daring Fireball - Markdown. 2004-12-17 [2012-03-19]. (原始内容存档于2004-04-02). 
  5. ^ RFC7764页面存档备份,存于互联网档案馆) – Guidance on Markdown: Design Philosophies, Stability Strategies, and Select Registrations
  6. ^ Markdown: License. Daring Fireball. [2014-04-25]. (原始内容存档于2020-02-18). 
  7. ^ Daring Fireball statement页面存档备份,存于互联网档案馆) by creator John Gruber
  8. ^ MarsEdit 2.3 ties the knot with Tumblr support - Ars Technica. [2009-08-11]. (原始内容存档于2011-08-21). 
  9. ^ Review: Practical Django Projects - Ars Technica. [2009-08-11]. (原始内容存档于2011-06-07). 
  10. ^ 存档副本. [2019-02-18]. (原始内容存档于2019-09-09). 
  11. ^ GitHub Flavored Markdown Spec. github.github.com. [2017-10-01]. (原始内容存档于2020-02-03). 
  12. ^ Babelmark 2 - Compare markdown implementations. Johnmacfarlane.net. [2014-04-25]. (原始内容存档于2017-07-18). 
  13. ^ Babelmark 3 - Compare Markdown Implementations. github.io. [2017-12-10]. (原始内容存档于2020-11-12). 
  14. ^ Babelmark 2 - FAQ. Johnmacfarlane.net. [2014-04-25]. (原始内容存档于2017-07-28). 
  15. ^ Gruber, John [@gruber]. @tobie @espadrine @comex @wycats Because different sites (and people) have different needs. No one syntax would make all happy. (推文). 4 September 2014 –通过Twitter. 
  16. ^ Markdown Variants. IANA. 2016-03-28 [2016-07-06]. (原始内容存档于2020-10-27). 
  17. ^ Atwood, Jeff. The Future of Markdown. CodingHorror.com. 2012-10-25 [2014-04-25]. (原始内容存档于2014-02-11). 
  18. ^ Markdown Community Page. GitHub. [2014-04-25]. (原始内容存档于2020-10-26). 
  19. ^ Standard Markdown is now Common Markdown. Jeff Atwood. [2014-10-07]. (原始内容存档于2014-10-09). 
  20. ^ Standard Markdown Becomes Common Markdown then CommonMark. InfoQ. [2014-10-07]. (原始内容存档于2020-09-30). 
  21. ^ CommonMark. [20 Jun 2018]. (原始内容存档于2016-04-12) (英语). The current version of the CommonMark spec is complete, and quite robust after a year of public feedback … but not quite final. With your help, we plan to announce a finalized 1.0 spec and test suite in 2018. 
  22. ^ GitHub Flavored Markdown Spec. [2017-10-01]. (原始内容存档于2020-02-03). 
  23. ^ A formal spec for GitHub Flavored Markdown. GitHub Engineering. [16 Mar 2017]. (原始内容存档于2020-02-03). 
  24. ^ Fortin, Michel. PHP Markdown Extra. Michel Fortin website. 2018 [2018-12-26]. (原始内容存档于2021-01-17). 
  25. ^ Markdown editor for BUEditor. 4 December 2008 [2019-02-18]. (原始内容存档于2020-09-17). 
  26. ^ Markdown for TYPO3 (markdown_content). extensions.typo3.org. [2019-02-18]. (原始内容存档于2021-02-01). 
  27. ^ Extension:MarkdownExtraParser - MediaWiki. www.mediawiki.org. [2019-02-18]. (原始内容存档于2020-10-29). 
  28. ^ PHP Markdown Extra. Michel Fortin. [2019-02-18]. (原始内容存档于2021-01-17). 
  29. ^ W3C Community Page of Markdown Implementations. W3C Markdown Wiki. [24 March 2016]. (原始内容存档于2020-09-17). 
  30. ^ Markdown THrowdown – What happens when FOSS software gets corporate backing. Ars Technica. 2014-10-05 [2019-02-18]. (原始内容存档于2020-11-14). 
  31. ^ Doxygen Manual: Markdown support. Stack.nl. 2014-04-21 [2014-04-25]. (原始内容存档于2017-07-18). 
  32. ^ jjallaire; e.a. Markdown.cpp. GitHub project RStudio. 2015-06-30 [2016-07-07]. (原始内容存档于2017-07-26). 
  33. ^ Writing on GitHub. help.github.com. GitHub, Inc. [9 July 2014]. (原始内容存档于2018-06-04). 
  34. ^ GitHub Flavored Markdown. github.com. [29 March 2013]. (原始内容存档于2019-02-05). 
  35. ^ Discount - a C implementation of the Markdown markup language. [2014-11-01]. (原始内容存档于2019-10-18). 
  36. ^ David Parsons. DISCOUNT. GitHub. 2016-05-28 [2016-07-07]. (原始内容存档于2021-01-16). 位于Open Hubdiscount 
  37. ^ Markdown converter written in Dyalog APL.. [2019-02-18]. (原始内容存档于2020-12-05). 
  38. ^ PHP Markdown. [2016-03-01]. (原始内容存档于2021-01-20). 
  39. ^ Markdown Editor. [2018-12-15]. (原始内容存档于2020-12-13). 
  40. ^ Markdown and Visual Studio Code. [2019-09-10]. (原始内容存档于2019-02-08). 

外部链接