前言:Markdown(简称MD)语言常用于编写开源代码的Readme说明。如今越来越多的人使用Mardown来写作,原因是它简单易用。
1.历史
1.1 发明
2004年,John Gruber创造了MD语言,部分和Aaron Swartz合作而成,Aaron Swartz是一位天才程序员。John Gruber的目的是期望推出“易于阅读、易于撰写的纯文字格式,并选择性的转换成有效的XHTML(或是HTML)”。MD语言最重要的设计理念是“可读性”,因为HTML和RTF这种复杂标记语言必须依赖浏览器,否则直接阅读的话会被众多标签影响。
1.2 流行
2008年,Github 使用 Markdown 作为默认的 Readme 文件编写规范,并提供了一套渲染规范。从此MD语言流行起来。
1.3 标准化
2004 年末,Markdown发布规范1.0.1,这也是目前流行版本。
2012年开始,包括Jeff Atwood和John MacFarlane在内的一群人启动了标准化工作。
2014年9月,Gruber反对在这一工作中继续使用“Markdown”这个名字,其被更名为CommonMark。
2016年,标准化组织IETF发布了RFC 7763和RFC 7764。RFC 7763 从原始变体引入了MIME类型 text/markdown。RFC 7764讨论并注册了MultiMarkdown、GitHub Flavored Markdown (GFM)、Pandoc、CommonMark及Markdown等变体。
2017年,GitHub发布了基于CommonMark的GitHub Flavored Markdown(GFM)的正式规范。
1.4 变种
除了上面提到的CommonMark外,另外一个变种是Markdown Extra,最初用于PHP,后来又被Python和Ruby引入,诸如Drupal等内容管理系统也在使用,Markdown Extra在PHP中具体引入时间,目前还不可考。
2.常用语法
MD语言的语法非常简单,这才让MD语言可以快速入门,甚至非程序员也能简单使用。
2.1 标题
支持两种风格:
2.1.1 SeText 风格
文章标题下一行使用三个等号。章节标题下一行使用三个减号。
例如:
2.1.2 Atx风格
可以使用多个井号来定义标题。井号放在标题前面,标题和井号之间使用空格隔开。一个井号表示一级标题,两个井号表示二级标题,以此类推到六级标题。
例如:
2.2 列表
2.2.1 有序列表
在列表项之前放置:数字+点符号。
例如:
2.2.2 无序列表
使用星号、加号或者减号。
例如:
2.3 正文、段落、换行和缩进
2.3.1 正文
没有任何标记的文字就是正文。
2.3.2 段落
段落前后使用空行来标识。
2.3.3 换行
在行尾加两个空格。
2.3.4 缩进
没有单独标签,其实英文一般不缩进。中文就用两个空格标识即可。
2.4 分割线、辅助线、强调和字体
2.4.1 分割线
有三种:三个星号,三个减号,或者三个下划线。效果相同。
例如:
2.4.2 辅助线
前后都使用两个波浪号可以加中划线效果。注意,下划线不直接支持,可以借用HTML的<ins>标签,但下划线实际上可以不用的,使用下一节的强调语法即可。
例如:
2.4.3 强调
使用一个星号或者下划线把内容括起来就可以实现斜体。
使用两个星号或者两个下划线把内容括起来就可以实现斜体。
例如:
2.4.4 字体
MD语言不直接支持字体修改,需要借用HTML的<font>标签。实际上,对于一般创作,我们可以不用关心字体的。
2.5 代码块、引用和行内代码
2.5.1 代码块
程序员一般最关注代码块语法:在行首使用连续四个空格。
例如:
2.5.2 引用
在行首加入大于号表示引用。引用支持嵌套,最大可以到7层。引用里面也可以使用加粗、代码块、列表等语法。
例如:
> 走自己的路,让别人说去吧。
2.5.3 行内引用
行内引用的用途之一是定义行内代码。使用反引号来把内容括起来,就能实现行内引用。
例如:
2.6 超级链接和图片
2.6.1 超级链接
使用中括号来实现,注意是成对的中括号,链接指向的地址使用小括号。语法为:
[超级链接文字](超级链接标签)
例如:
2.6.2 图片
图片语法如下:
![替换文字](图片路径 "标题(可选)")
例如:
3 注意事项和参考资料
3.1 关于空格
MD语言的版本比较多,不同浏览器/解释器处理不同。建议多使用空格隔开标签和写作的内容。
3.2 参考资料
中文版规范:http://www.markdown.cn/
英文版规范:https://daringfireball.net/projects/markdown/