轻松记录您
灵感和创意

markdown各个语法的不同点

原生Markdown

Markdown语法最早由John Gruber于2004年创立。为了区分于后来出现的各种衍生Markdown语法,故称为原生Markdown。

虽然现在使用的Markdown与原生Markdown有所不同,但是衍生的众多Markdown语法也沿袭了很多原生Markdown的语法,所以学习原生的Markdown对学习Markdown有很大的帮助,特别是理解Markdown的理念。

原生Markdown将语法分成区块元素和行内元素:

  • 区块元素:段落、标题、区块引用、列表(无序和有序)、区块代码、分割线
  • 行内元素:链接、强调(粗体和斜体)、行内代码、图片

可以看出,原生Markdown支持的元素并不多,甚至连表格都不支持,只支持一些基本的元素。

衍生Markdown

自从John Gruber在2004年发布Markdown之后,Markdown进入了自由生长的状态,因为创始人John Gruber自2004年之后就没有更新过Markdown。

由于原生Markdown只是一个轻量级的标记语言,很多功能不具备。为了扩充功能,很多Markdown拓展语法被开发出来。其中,着名的有GFM、PHP Markdown Extra、MultiMarkdown、Pandoc Markdown等等。

1. GFM

原生Markdown发布后,最早在程序员圈内流行。由于Markdown的易读易写,而且对程序员很友好(支持块代码和行内代码),全球最大的代码托管平台Github引入了Markdown,并且对原生Markdown语法进行了拓展,并称之为Github Flavored Markdown,简称GFM。

与原生Markdown的主要不同:

  • 采用围栏式(Fenced式)区块代码:在代码的上下一行用3个反引号,可选择性定义代码语种,并支持代码高亮。
  • 列表嵌套方式:改为每次嵌套缩进两个空格。
  • 支持列表任务:在每个项目列表加入[],完成任务使用[x],如- [x] 任务说明。
  • 支持简单表格:
First Header Second Header
Conter Cell Conter Cell
Conter Cell Conter Cell

注意:

① 两侧的竖线|可以省略。

② 第二行的每个单元格至少3个减号—。

③ 可以修改每列文字对齐方式:| :— | :—: | —: |。

  • 支持使用emoji表情:如:sad:,显示为:sad:。
  • 删除线(新增):用两个波浪号紧密包裹文字,如~~123。

2. PHP Markdown Extra

与原生Markdown的主要不同:

  • 内嵌HTML:块标签可以缩进不超过3个空格,且可以在块标签中选择性使用Markdown语法。
  • 文内跳转:可以为区块元素设置id和class属性,实现文章内部跳转。
  • 区块代码:与GFM相似,可以使用围栏式在代码上下行使用3个或以上波浪号~~~包裹,也支持代码高亮。
  • 表格:同GFM。
  • 支持自定义列表
  • 支持脚注:如[^1]:脚注内容,脚注名字必须唯一。
  • 支持缩略语
  • 强调:两字词中间的下划线不会被解释成强调。

3. MultiMarkdown

原生Markdown文档只能从纯文本转换为HTML。而MultiMarkdown则扩大了原生Markdown的转换范围,让其可以方便的转换成:

  • HTML/XHTML
  • LaTeX(which can be processed into a PDF)
  • OpenDocument Text document
  • OPML

为了更好的和其他格式兼容,MultiMarkdown借鉴了很多其他格式的语法功能。

与原生Markdown的主要不同:

  • 支持元数据:标题、作者、日期等信息,兼容部分YAML。
  • 支持交叉引用
  • 支持添加链接和图片的属性
  • 图片可以作为区块元素:如果一个图片语言独立成段,会被自动解释为区块元素,图片下会添加一行图片说明。
  • 支持部分复杂表格:兼容PHP Markdown Extra的表格,同时支持多行表头、单元格横向合并、表格分区、表格下行表格说明等。
  • 支持脚注:同PHP Markdown Extra。
  • 支持参考文献(Citations)
  • 支持定义列表:同PHP Markdown Extra。
  • 支持缩略语(Abbreviations):同PHP Markdown Extra。
  • 支持围栏式区块代码:上下行3到5个反引号包裹代码,可定义语法种类,选择性语法高亮。首尾行的反引号数量要一致。
  • 支持MathJax公式
  • 支持上标与下标
  • 支持术语表
  • 支持修订功能(CriticMarkup):可以显示修订痕迹
  • 删除:{–删除的文本–}
  • 添加:{++新增的文本++}
  • 替换:{~~删除的文本~>新增的文本~~}
  • 高亮:{==高亮的文本==}
  • 备注:{>>备注文本<<}
  • 支持内嵌HTML
  • **支持内嵌其他文件:**txt、tet、fodt、html等。
  • 换行方式改为行末使用\
  • 支持目录

4. Pandoc’s Markdown

Pandoc本身是一个多格式文档的转换工具,所以Pandoc Markdown与MultiMarkdown的设计目的相似,使Markdown可以转换成更多的不同格式。因为Pandoc支持的格式很多,这也就使得Pandoc’s Markdown非常的丰富。

与原生Markdown的主要不同:

  • 强制换行支持两种方式:行尾两个空格换行,反斜杠换行。
  • Atx式标题(即井号式标题)之前一定要预留空行
  • 区块引用之前一定要预留空行
  • 围栏式区块代码之前必须留空行
  • 支持行区块
  • 可生成不同形式的列表
  • 支持连续编号的范例清单
  • 支持定义列表
  • 支持简单表格、多行表格、格框表格和管线表格四种样式
  • 支持文件标题区块(类似元数据)
  • 支持删除线
  • 支持上标下标
  • 支持数学公式
  • 支持内嵌TeX

5. CommonMark

由于创始人自2004年之后就没有更新过Markdown语法,众多的遗留问题没有得到解决,加上扩展语法的自由发展和Markdown编辑器的涌现,导致了很严重的方言和兼容性问题。因此,有人希望对Markdown语法进行规整和同意,建立一套Markdown的语法规范。

CommonMark正是这样的产物。CommonMark与一般的衍生语法不同,它的目的不是扩展Markdown的标准。

可惜此举得到Markdown创世人John Gruber的强力反对,所以至今CommonMark并没有得到广泛的认可。但是就CommonMark本身而言,它规范了Markdown的各项语法,有许多可取之处。

与原生Markdown的主要不同:

  • 定义了优先级别:区块语法的优先级别大于行内语法。
  • 支持围栏式区块代码
  • 支持1)作为有序列表的项目标记
  • 支持\作为换行符
  • 列表嵌套采用行首内容对其,而非4个空格
  • Setext式标题(即底线式标题)支持多行

CommonMark基本没有新增内容,主要是对语法规范进行说明,对理解Markdown很有帮助。

未经允许不得转载:坚果之云 Markdown » markdown各个语法的不同点
分享到: 更多 (0)

坚果云Markdown轻松记录您 灵感和创意

坚果云Markdown下载坚果云Markdown介绍