

























这篇文章属于专题的一部分,详见:Markdown知识贴
Markdown语法最早由John Gruber于2004年创立。为了与后来的衍生markdoon语言区别,这里将其称为原生Markdown。虽然现在使用的Markdown与原生Markdown有所不同,但是衍生的众多Markdown语法也沿袭了很多原生Markdown的语法,学习原生的Markdown对学习Markdown大有帮助,特别是理解Markdown的理念。John Gruber在其个人主页中公布了详细的Markdown语法说明,随着Markdown的推广和传播,这份说明也被广泛传播和翻译,下面提供了相关的网址:
英文原文:http://daringfireball.net/projects/markdown
简体中文版:http://www.markdown.cn或http://wowubuntu.com/markdown
繁体中文版:http://markdown.tw
原生Markdown将语法分成区块元素和行内元素:
可以看出,原生Markdown支持的元素并不多,连表格都不支持,只支持一些基本的元素。
原生Markdown兼容HTML:为了实现一些Markdown不具备的功能,Markdown中可以使用HTML标签。块级标签必须前后空行,且不能被空格或制表符缩进(即不可被嵌套)。另外,块级标签内不能使用markdown语法。行内标签直接使用。
下面是各部分语法说明的笔记:
段落:段落前后空行
注意:1)段落与文本行不是一个概念,一个段落中可以包含多个文本行,段落内部可以插入两个以上空格然后回车实现强制换行。2)非嵌套的段落不该用空格或制表符Tab缩进。
标题:
= (最高阶标题)或- (第二阶标题);# ,对应到标题 1 到 6 阶。 # 与标题文字间有空格。2)行末可选择性插入 # 闭合Atx式标题,不要求数量区块引用:每行行首插入 >。
注意:1)也可以只在段落首行插入 >。2)>后可不接空格。3)插入多个>可以实现区块引用多重嵌套。4)可以嵌套段落、标题、列表、区块代码。
列表:
* 、加号(pluses)+ 或是减号(hyphens)- 作为列表项目标记。注意:1)列表项目标记后接空格。2)作为列表标记的数字不影响最后输出结果。3)列表项目里的文本行可以用最多3个空格进行缩进对齐,但是不影响最后输出。4)如果两个列表项目间被空行分开,那么这两个列表项目会识别为段落,间隔变大。5)可以嵌套列表(文档没描述,实际可行)、段落、区块引用,方法为每行行首使用4个空格或1个制表符(Tab)进行缩进。6)嵌套的段落可以只在首行使用4个空格或1个制表符(Tab)缩进。7)如果不希望数字-英文句号-空格被识别为列表,可以再英文句号前加入反斜杆\。
区块代码:每行代码使用4个空格或1个制表符进行缩进。
分隔线:在新行中插入3个及以上入减号(hyphens)-,星号(asterisks)*或下划线(underscores)_。
链接:
[文字](URL "Tittle")。 [文字][id] ,然后在文章任意新行,[id]: URL "tittle"。 <链接或邮箱地址>强调:
*或下划线_包裹。*或下划线_包裹。 行内代码:用反引号(backtick quotes)包裹。
注意:1)起始的反引号之后与结束的反引号之前可放入空格。2)如果在代码中有反引号,需要多个反引号来包裹。
图片:
![Alt text][id],在任意新行添加[id]: scr "title" 如果希望键入被语法占用的特殊符号,可以在特殊符号前插入反斜线实现转义。
自从John Gruber2004年发布Markdown之后,Markdown进入了自由生长的状态,因为创始人John Gruber打自2004年之后就没有更新过Markdown。因为原生Markdown只是一个轻量级的标记语言,很多功能不具备。为了扩充Markdown的功能,很多Markdown拓展语法被开发出来,其中著名的有GFM、PHP Markdown Extra、MultiMarkdown、Pandoc Markdown等等
原生Markdown发布后,最早在程序员圈内流行。由于Markdown的易读易写,而且对程序员很友好(支持区块代码和行内代码),全球最大的代码托管平台Github引入了Markdown,并且对原生Markdown语法进行了拓展,这种衍生Markdown叫做Github Flavored Markdown,简称 GFM 。
与原生Markdown的主要不同:
采用围栏式(Fenced式)区块代码:在代码的上下一行用3个反引号```,可选择性定义代码语种,并支持代码高亮。
列表嵌套方法:改为每次嵌套缩进两个空格。
支持任务列表:在每个列表项目加入[ ],完成任务用 [x],如:- [x] 任务说明。
支持简单表格
|FirstHeader|SecondHeader||-------------|-------------||ContentCell|ContentCell||ContentCell|ContentCell|
注意:1)两侧的竖线|可以省略。2)第二行的每个单元格至少3个减号---。3)可以修改每列文字对齐方式,方法| :--- | :---: | ---: |。
支持使用emoji表情
删除线(新增):用两个波浪号~~紧密包裹文字。
还有部分语法专门为Github平台设计的,这里就省略了。详细的GFM说明见:https://help.github.com/categories/writing-on-github/
与原生Markdown的主要不同:
内嵌html:块标签可以缩进不超过3个空格,且可以在块标签中选择性使用markdown语法(方法略)。
可以为区块元素设置id和class属性,实现文章内部跳转,方法略。
区块代码:与GFM相似,可以使用栅栏方式,在代码上下行用3个或以上波浪号~或反引号`包裹,亦支持代码高亮。
表格:同GFM
支持定义列表:方法略
支持脚注:[^1],在新行[^1]: 脚注内容
注意:脚注名字必须唯一
支持缩略语:方法略
强调:两字词中间的下划线不会被解释成强调。
详细的语法说明见:https://michelf.ca/projects/php-markdown/extra/
简单中文说明:http://b.soont.com/md/php-markdown
原生markdown文档只能从纯文本转换HTML。而MultiMarkdown则是扩大了原生markdown的转换范围,让其可以方便的转换成:

为了更好地与其他格式的兼容,MultiMarkdown借鉴很多其他的格式的语法功能
与原生语法的主要不同:
支持元数据:标题、作者、日期等信息,兼容部分YAML。
支持交叉引用。
支持添加链接和图片的属性。
图片可以作为区块元素:如果一个图片语言独立成段,会被自动解释为区块元素,图片下会添加一行图片说明。
支持部分复杂表格:兼容PHP Markdown Extra的表格,同时可以——多行表头,单元格横向合并,表格分区,表格下行表格说明等。
支持脚注:同PHP Markdown Extra中的脚注。
支持参考文献(Citations)
支持定义列表:同PHP Markdown Extra。
支持缩略语(Abbreviations):同PHP Markdown Extra。
支持栅栏式区块代码:上下行3到5个反引号包裹代码,可定义语法种类,选择性语法高亮。
注意:首尾行的反引号数量要一致。
支持MathJax公式(区块与行内):区块公式在新行用\\[和\\]包裹,或首尾用两个dollar$$包裹。行内公式用\\(和\\)包裹,或首尾各用一个dollar$包裹。
支持上标与下标:上标为单个字符,前面加^,为多个字符,用^包裹。下标为单个字符,前面加~,为多个字符,用~包裹。
支持术语表
支持修订功能(CriticMarkup):可以显示修订痕迹
{--删除的文本 --}{++新增的文本 ++}{~~删除的文本~>新增文本~~}{==高亮的文本==}{>>备注文本<<}内嵌HTML,可在块级HTML中选择性地添加MultiMarkdown语法。
支持内嵌其他文件,txt、tet、fodt、html等
换行方式改为行末使用\换行。(原生Markdown使用2个空格换行)
支持目录:{{TOC}}添加目录
详细的语法说明见:http://fletcherpenney.net
这是语法快速查询表:https://rawgit.com/fletcher/human-markdown-reference/master/index.html
Pandoc本身是一个多格式文档的转换工具,所以Pandoc Markdown与MultiMarkdown的设计目的相似,使Markdown可以转换成更多的不同格式,因为Pandoc支持的格式很多,这也就使的Pandoc's Markdown非常的丰富,比如表格就有4种不同的书写方法。
放一张Pandoc官网首页格式转换图,见识一下黑科技的力量:

与原生Markdown的主要不同:
详细的语法说明见:http://pandoc.org/MANUAL.html#pandocs-markdown
翻译的中文版:http://pages.tzengyuxio.me/pandoc/
由于创始人自2004年Markdown诞生之后就没有更新过Markdown语法,众多的遗留问题没有得到解决,加上扩展语法的自由发展和Markdown编辑器的涌现,导致了很严重的方言和兼容性问题。因此有人希望对Markdown语法进行规整和统一,建立一套Markdown的语法规范,而CommonMark正是这样产物。CommonMark与一般的衍生语法不同,它的目的不是扩展Markdown的功能,而是解决原生markdown的遗留问题和方言问题,规范Markdown的书写,成为Markdown的标准。可惜此举得到Markdown创始人John Gruber的强力反对,所以至今CommonMark并没有得到广泛的认可。但是其实就CommonMark本身而言,它规范了Markdown的各项语法,有许多可取之处。CommonMark的语法说明是所有markdown语法说明中最长最详细的,优先问题、缩进问题、空行问题、嵌套问题等等容易出现语法冲突的地方都作了非常详细的说明。
与原生Markdown的主要不同:
1)作为有序列表的项目标记\作为换行符。CommonMark基本没有新增内容,主要式对语法规范进行说明,对理解Markdown很有帮助,就是需要一定的Markdown基础,而且英文文档有点长,不好啃动。
详细的语法说明:http://spec.commonmark.org/
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。