Markdown 是一种纯文本格式的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。一份 Markdown 文档可以很方便的导出为 HTML 、Word、图像、PDF、Epub 等多种格式的文档,非常便于文章的发布。
Markdown 具有一系列衍生版本,不同版本之间基本兼容,但在一些语法和渲染效果上略有差别,另外不同的编辑器显示效果也会有区别。
本篇文章尽量全的介绍 Markdown 的各个语法,但有些编辑器可能不支持其中某些语法。本文内容是根据 Markdown 的语法文档和一些其它资料整理得到,内容也会不断的更新。
标题
Markdown标题有几种写法 ("atx", "atx_closed", "setext") :
第一种 ("atx") 是在想要设置为标题的文字前面加 #,这种写法支持六级标题,注意要在 # 和文字之间加至少一个空格:
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
第二种 ("setext") 是在想要设置为标题的文字下面用多个 = 和 - 分隔,这种写法只能写到二级标题,= 和 - 的个数没有限制,只要大于一个就可以:
一级标题
==========
二级标题
----------
第三种 ("atx_closed") 是在想要设置为标题的文字前后都加 #,这种写法也支持六级标题,注意要在文字和前后的 # 之间加至少一个空格:
# 一级标题 #
## 二级标题 ##
### 三级标题 ###
#### 四级标题 ####
##### 五级标题 #####
###### 六级标题 #######
标题的三种写法可以混用,但为了保持统一性,不建议混用,但用第二种写法写到二级标题后,还可以使用第一种或第三种写法继续写后面的标题。
段落和换行
Markdown 中用一个或多个空行划分不同的段落(空行的含义就只要是看起来是空行就行了,即使包含了空格或者水平制表符等空白符也是空行),普通段落不应该使用缩进。
关于换行,Markdown 并不会将段落的每个换行都转换为 <br /> 标签,如果确实需要在行尾输入 <br /> 标签,只需要在行尾加两个及以上的空格,然后换行。
强调
倾斜
倾斜是在文字左右用一个 *(星号)或 _(下划线)包起来,文字与星号或下划线之间没有空格:
*倾斜* _倾斜_
会得到:
倾斜 倾斜
加粗
加粗是在文字左右用两个 *(星号)或 _(下划线)包起来,文字与星号或下划线之间没有空格:
**加粗** __加粗__
会得到:
加粗 加粗
加粗倾斜
加粗倾斜是在文字左右用三个 *(星号)或 _(下划线)包起来,文字与星号或下划线之间没有空格:
***加粗倾斜*** ___加粗倾斜___
会得到:
加粗倾斜 加粗倾斜
删除线
删除线是在文字左右用两个 ~~ 包起来,文字与 ~~ 之间没有空格:
~~删除线~~
会得到:
删除线
脚注
脚注是对文本的补充说明,格式如下:
面朝大海,春暖花开[^脚注]
[^脚注]: 海子
会得到:
面朝大海,春暖花开[1]
注意:
- 这里有些编辑器会自动给脚注进行编号,整篇文档从 1 开始编号,但有的编辑器会直接显示脚注的名字;
- 脚注的定义与脚注的内容至少隔一行,也可以将整篇文档的脚注统一写在文档结尾处,编辑器会自动把脚注的内容放到文档的最后。
引用
用法是在文字前面加一个 >,注意 > 是英文格式下的右尖括号,括号和文字之间至少有一个空格:
> 面朝大海,春暖花开。
会得到:
面朝大海,春暖花开。
引用是一个区块,可以放很多东西,如标题、列表、代码块等等:
> ## 二级标题
> * 无序列表
会得到:
二级标题
- 无序列表
引用可以多层嵌套,多层嵌套时,多个 > 是不需要连在一起的,只需要在同一行就可以:
> 引用一
>> 引用二
>>> 引用三
会得到:
引用一
引用二
引用三
列表
列表分为 有序列表 和 无序列表。
无序列表
无序列表可以用 *、+、- 创建,三个符号可以混用,但建议上下文统一,符号和文字之间加至少一个空格或水平制表符:
* 无
- 序
+ 列
* 表
会得到:
- 无
- 序
- 列
- 表
有序列表
有序列表用数字和点来创建,需要注意的是数字后面只能是英文的点,且点和文字之间至少加一个空格,另外有序列表的序号是根据第一行的数字确定的,后面的数字序号对于最终生成 HTML 是没有影响的. 比如下面的列表创建时序号是乱的,但创建后序号会显示为 2. 3. 4. 5. (这一点很多编辑器会自动更正或填充),点和文字之间加至少一个空格或水平制表符:
2. 有
2. 序
3. 列
3. 表
会得到:
- 有
- 序
- 列
- 表
列表嵌套
列表可以嵌套使用,只需要在上一级和下一级之间打两个空格即可(或者一个水平制表符)(有的语法需要三个空格或四个空格),有序列表和无序列表可以互相嵌套:
* 1
* a
* b
* 2
1. a
2. B
会得到:
- 1
- a
- b
- 2
- a
- B
如果列表项中包含引用,引用标记 > 需要缩进,如果列表项中有代码块,代码块需要双倍缩进,例如:
* 孔子说过:
> 毋意,毋必,毋固,毋我。
会得到:
- 孔子说过:
毋意,毋必,毋固,毋我。
另外,如果一个列表项里包含多个段落,那么每个段落都需要缩进,缩进量与第一段一致(用空格或制表符):
* 段落一
段落二
会得到:
-
段落一
段落二
任务列表
任务列表通过无序列表和中括号 [] 来定义,中括号中间加 x 表示完成:
* [ ] 任务1
* [ ] 任务2
* [x] 任务3已完成
会得到:
- 任务1
- 任务2
- 任务3已完成
代码块
单行代码用一个 `(反引号)包起来,或者行前加四个空格或一个水平制表符:
`a=1`
用反引号可以在行内显示代码,如:
如果`a=1`,`b=2`,那么`a+b=3`
会得到:
如果a=1
,b=2
,那么a+b=3
多行代码用三个 `(反引号)包起来,反引号单独一行,或者在每行代码前加四个空格或一个水平制表符:
```
a=1
b=2
```
会得到:
a=1
b=2
反引号后面可以写注释,这样可以给代码块添加相应语言的代码高亮,例如:
```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```
会得到:
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
水平线
水平线可以由 *、 - 、_(星号,减号,下划线)这三个符号的至少三个表示,注意至少要三个,且不需要连续,中间有空格也可以,但生成水平线的符号必须独占一行:
***
- - -
_ _ _
会得到:
链接
Markdown 支持两种链接形式: 内联 和 引用 。
内联:
[链接名](链接地址 “链接title” )
链接title 是可选的内容,是当指针停留在链接处时显示的内容;
引用:
[链接名][链接id]
[链接id]: 链接地址 “链接title”
[链接id]: 链接地址 '链接title'
[链接id]: 链接地址 (链接title)
链接id 有三种定义方式(如上),定义时冒号后面加一个以上的空格或水平制表符;
链接id 可以包含字母, 数字, 空格, 和标点符号,字母不是大小写敏感的,链接id 的定义可以在文章的任意位置,一般直接放在引用位置的下面;
链接名也可以包含字母, 数字, 空格, 和标点符号,链接名 和 链接id 的中括号间可以有空格;
引用的链接形式中可以隐含链接名称,可以忽略 链接id,这时 链接名 本身被用于 链接id。引用 链接id 时只用一对空的中括号就可以了,
例如, 要链接 "Google" 这个词到 google.com 网站, 只用这样写:
[Google][]
同时这样定义 链接id:
[Google]: http://google.com/
另外,也可以将网址直接用 <>(尖括号)包起来,也可以显示为链接,甚至直接写出网址也显示为链接:
<http://www.baidu.com>
图片
图片跟链接格式类似,也有 内联 和 引用 两种形式,只不过在图片名前要加 !(英文叹号)。
内联:
![图片名](图片地址 "图片title")
引用:
![图片名][图片id]
[图片id]:图片地址 “图片title”
图片名 是指显示在图片下方的描述文字,可选;图片title 是当指针停留在图片上时显示的内容,可选。
Markdown 没有语法指定图片尺寸,如果需要指定图片尺寸, 可以使用 HTML <img> 标签。
反斜杠转义
Markdown 中可以使用反斜杠转义 Markdown 语法符号为字面量。Markdown 为以下字符提供反斜杠转义:
\\ backslash(反斜杠)
\` backtick(反引号)
\* asterisk(星号)
\_ underscore(下划线)
\{\} curly braces(花括号)
\[\] square brackets(方括号)
\(\) parentheses(圆括号)
\# hash mark(井号)
\+ plus sign(加号)
\- minus sign (hyphen)(减号)
\. dot(点)
\! exclamation mark(惊叹号)
以上这些符号在前面加反斜杠后就会显示本身的字面形式,而不会作为 Markdown 的语法符号。
表格
| 表头 | 表头 | 表头 |
| :---- | :---: | ---: |
| 靠左 | 居中 | 靠右 |
| 内容 | 内容 | 内容 |
会得到:
表头 | 表头 | 表头 |
---|---|---|
靠左 | 居中 | 靠右 |
内容 | 内容 | 内容 |
第二行分割表头和内容,-(减号) 有一个就行,也可以多加几个使其对齐,文字默认居左,- 两边加 :(冒号)表示文字居中,- 右边加 : 表示文字居右,原生语法两边的 | 必须加,但目前大多数语法两边的 | 不加也可以,不同的解释器显示的表格会有所区别。
应用 HTML 标签
可以直接在 Markdown 文档里应用 HTML 标签,以达到更好的表现效果,但不同的编辑器可能支持的标签会有区别。
上、下标
上、下标可以通过 HTML 的 <sup>
和 <sub>
标签实现:
这是<sup>上标</sup>文本
这是<sub>下标</sub>文本
会得到:
这是上标文本
这是下标文本
倾斜、加粗、下划线
倾斜、加粗、下划线可以通过 HTML 的 <i>
、<b>
、<u>
标签实现:
<i>倾斜</i>
<b>加粗</b>
<i><b>倾斜加粗</b></i>
<u>下划线</u>
高亮标记
高亮标记可以通过 HTML 的 <mark>
标签实现:
<mark>高亮标记</mark>
键盘文本
键盘文本可以通过 HTML 的 <kbd>
标签实现:
<kbd>键盘文本</kbd>
按钮
按钮可以通过 HTML 的 <button>
标签实现:
<button type="button">按钮</button>
注意需要指明 type
属性。
一些规范
- MarkDown 文件均使用 .md 作为后缀
- 标题与紧贴的上下正文使用空行隔开,# 号和文字之间一个空格连接
- 整篇文章标题格式要统一
- 普通文本换行,使用行末尾两个空格触发
- 定义列表时上下文使用一致的符号,缩进也要统一
- 列表块前后整行隔开
- 代码块前后整行隔开
本文介绍的 Markdown 语法不同的衍生版本或不同的解释器会有所区别,有些会不支持,有些可能需要一些扩展工具才能实现。
参考
-
海子 ↩