markdown语法总结

简介

Markdown 的目标是实现「易读易写」。Markdown 的语法全由一些符号所组成,这些符号经过精挑
细选,其作用一目了然。比如:在文字两旁加上星号,看起来就像*强调*。Markdown的列表看起来,
就是列表。Markdown 的区块引用看起来就真的像是引用一段文字。并且兼容 HTML 语法标签,可以
在markdown文件里直接使用HTML标签如: <div><table><pre><p><span><cite>
<del>。并且现在有很多工具可以把markdown文件转换为pdf、html等格式,非常便于阅读,
分享。

基本语法

区块元素

段落和换行

一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定
义是显示上看起来像是空的,便会被视为空行。比方说,若某一行只包含空格和制表符,则该行也会
被视为空行)。普通段落不该用空格或制表符来缩进。

如果你确实想要依赖 Markdown 来插入 <br/> 标签的话,在插入处先按入两个以上的空格然后回车。

标题

在行首插入 1 到 6 个 # ,对应到标题 1 到 6 阶,例如:

1
2
3
4
5
# 这是 H1 #

## 这是 H2 ##

### 这是 H3 ######

区块引用

Markdown 文件中建立一个区块引用,那会看起来像是你自己先断好行,然后在每行的最前面加上 > :

1
2
3
> 这是一个引用
> 这是上一个引用的接着部分
> 这是这个引用的最后部分

这是一个引用
这是上一个引用的接着部分
这是这个引用的最后部分

Markdown 也允许你偷懒只在整个段落的第一行最前面加上 > :

1
2
3
> 这是一个引用
这是上一个引用的接着部分
这是这个引用的最后部分

这是一个引用
这是上一个引用的接着部分
这是这个引用的最后部分

区块引用可以嵌套(例如:引用内的引用),只要根据层次加上不同数量的 > :

1
2
3
> 这是一个引用
> > 这是一个引用里的引用
> 这是这个引用的最后部分

这是一个引用

这是一个引用里的引用
这是这个引用的最后部分

引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、代码区块等:

1
2
3
4
> #### 这是一个标题
> - 这是一个引用
> - 这是上一个引用的接着部分
> - 这是这个引用的最后部分

这是一个标题

  • 这是一个引用
  • 这是上一个引用的接着部分
  • 这是这个引用的最后部分
列表

Markdown 支持有序列表和无序列表。
无序列表使用星号、加号或是减号作为列表标记:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*   Red
* Green
* Blue

+ Red
+ Green
+ Blue

- Red
- Green
- Blue

1. Bird
2. McHale
3. Parish

  • Red
  • Green
  • Blue
  • Red
  • Green
  • Blue
  • Red
  • Green
  • Blue
  1. Bird
  2. McHale
  3. Parish

内容用固定的缩进整理:

1
2
3
4
5
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing

  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
    viverra nec, fringilla in, laoreet vitae, risus.
  • Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
    Suspendisse id sem consectetuer libero luctus adipiscing

偷懒的做法

1
2
3
4
5
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.

  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
    viverra nec, fringilla in, laoreet vitae, risus.
  • Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
    Suspendisse id sem consectetuer libero luctus adipiscing.

列表项目可以包含多个段落,每个项目下的段落都必须缩进 4 个空格或是 1 个制表符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.  This is a list item with two paragraphs. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit. Aliquam hendrerit
mi posuere lectus.

Vestibulum enim wisi, viverra nec, fringilla in, laoreet
vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
sit amet velit.

2. Suspendisse id sem consectetuer libero luctus adipiscing.



* This is a list item with two paragraphs.

This is the second paragraph in the list item. You're
only required to indent the first line. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.

* Another item in the same list.

  1. This is a list item with two paragraphs. Lorem ipsum dolor
    sit amet, consectetuer adipiscing elit. Aliquam hendrerit
    mi posuere lectus.

    Vestibulum enim wisi, viverra nec, fringilla in, laoreet
    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
    sit amet velit.

  2. Suspendisse id sem consectetuer libero luctus adipiscing.

  • This is a list item with two paragraphs.

    This is the second paragraph in the list item. You’re
    only required to indent the first line. Lorem ipsum dolor
    sit amet, consectetuer adipiscing elit.

  • Another item in the same list.

如果要在列表项目内放进引用,那 > 就需要缩进:

1
2
3
4
*   A list item with a blockquote:

> This is a blockquote
> inside a list item.

  • A list item with a blockquote:

    This is a blockquote
    inside a list item.

如果要放代码区块的话,该区块就需要缩进两次,也就是 8 个空格或是 2 个制表符:

1
2
3
*   一列表项包含一个列表区块:

<代码写在这>

  • 一列表项包含一个列表区块:

    <代码写在这>
    
代码区块

要在 Markdown 中建立代码区块很简单,只要简单地缩进 4 个空格或是 1 个制表符就可以,例如,下面的输入:

1
2
3
这是一个普通段落:

这是一个代码区块。

这是一个普通段落:

这是一个代码区块。

代码也可以使用3个连续的反引号,后面还可以指明代码语言(部分编辑器支持,非官方语法):

1
echo hello
1
echo hello
表格支持
1
2
3
4
5
| 项目        | 价格   |  数量  |
| -------- | -----: | :----: |
| 计算机 | \$1600 | 5 |
| 手机 | \$12 | 12 |
| 管线 | \$1 | 234 |
项目 价格 数量
计算机 \$1600 5
手机 \$12 12
管线 \$1 234
分隔线

你可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以
在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:

1
2
3
4
5
6
7
8
9
* * *

***

*****

- - -

---------------------------------------






区段元素

链接

要建立一个行内式的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,如果你还想要加
上链接的 title 文字(鼠标放在链接上时显示的文件),只要在网址后面,用双引号把 title
文字包起来即可,例如:

1
2
3
This is [an example](http://example.com/ "Title") inline link.

[This link](http://example.net/) has no title attribute.

This is an example inline link.

This link has no title attribute.

一个参考式链接的范例:

1
2
3
4
5
6
I get 10 times more traffic from [Google] [1] than from
[Yahoo] [2] or [MSN] [3].

[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"

I get 10 times more traffic from Google than from
Yahoo or MSN.

改成用链接名称的方式写:

1
2
3
4
5
6
I get 10 times more traffic from [Google][] than from
[Yahoo][] or [MSN][].

[google]: http://google.com/ "Google"
[yahoo]: http://search.yahoo.com/ "Yahoo Search"
[msn]: http://search.msn.com/ "MSN Search"

I get 10 times more traffic from Google than from
Yahoo or MSN.

强调

Markdown 使用星号()和底线(_)作为标记强调字词的符号,被 或 _ 包围的字词会被转成
<em> 斜体标签包围,用两个 * 或 _ 包起来的话,则会被转成 <strong>加粗,例如:

1
2
3
4
5
6
7
*single asterisks*

_single underscores_

**double asterisks**

__double underscores__

single asterisks

single underscores

double asterisks

double underscores

如果你的 * 和 _ 两边都有空白的话,它们就只会被当成普通的符号。

如果要在文字前后直接插入普通的星号或底线,你可以用反斜线:

1
\*this text is surrounded by literal asterisks\*

*this text is surrounded by literal asterisks*

部分编辑器支持删除线

~~这是一段错误的文本。~~

这是一段错误的文本。

代码

如果要标记一小段行内代码,你可以用反引号把它包起来(`),例如:

1
Use the `printf()` function.

Use the printf() function.

如果要在代码区段内插入反引号,你可以用多个反引号来开启和结束代码区段:

1
``There is a literal backtick (`) here.``

代码区段的起始和结束端都可以放入一个空白,起始端后面一个,结束端前面一个,这样你就可以在
区段的一开始就插入反引号:

1
2
3
A single backtick in a code span: `` ` ``

A backtick-delimited string in a code span: `` `foo` ``

A single backtick in a code span: `

A backtick-delimited string in a code span: `foo`

图片

Markdown 使用一种和链接很相似的语法来标记图片,同样也允许两种样式: 行内式和参考式。

行内式的图片语法看起来像是:

1
2
3
![Alt text](http://ojz1mcltu.bkt.clouddn.com/animals-august2015.jpg)

![Alt text](http://ojz1mcltu.bkt.clouddn.com/animals-august2015.jpg "docker stack")

参考式的图片语法则长得像这样:

1
2
![Alt text][id]
[id]: http://ojz1mcltu.bkt.clouddn.com/animals-august2015.jpg "docker stack"

![Alt text][id]
[id]: http://ojz1mcltu.bkt.clouddn.com/animals-august2015.jpg “docker stack”

Markdown 还没有办法指定图片的宽高,如果你需要的话,你可以使用普通的 <img> 标签。

其它

自动链接

Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来,
Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样,例如:

1
2
<http://example.com/>
<address@example.com>

http://example.com/
address@example.com

反斜杠

Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,例如:如果你想要用星号加在文
字旁边的方式来做出强调效果(但不用 标签),你可以在星号的前面加上反斜杠:

1
\*literal asterisks\*

Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:

\   反斜线
`   反引号
*   星号
_   底线
{}  花括号
[]  方括号
()  括弧
#   井字号
+   加号
-   减号
.   英文句点
!   惊叹号
待办事宜 Todo 列表

使用带有[ ][x](未完成或已完成)项的列表语法撰写一个待办事宜列表,并且支持子列表
嵌套以及混用Markdown语法,此语法非标准语法,不是所有markdown编辑器都支持。

- [ ] **Cmd Markdown 开发**
    - [ ] 改进 Cmd 渲染算法,使用局部渲染技术提高渲染效率
    - [ ] 支持以 PDF 格式导出文稿
    - [x] 新增Todo列表功能 [语法参考](https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments)
    - [x] 改进 LaTex 功能
        - [x] 修复 LaTex 公式渲染问题
        - [x] 新增 LaTex 公式编号功能
  • [ ] Cmd Markdown 开发
    • [ ] 改进 Cmd 渲染算法,使用局部渲染技术提高渲染效率
    • [ ] 支持以 PDF 格式导出文稿
    • [x] 新增Todo列表功能 语法参考
    • [x] 改进 LaTex 功能
      • [x] 修复 LaTex 公式渲染问题
      • [x] 新增 LaTex 公式编号功能 语法参考

参考文档