不得不说,短短接触Markdown的这一两周,我既体会到了它的魅力,但也被它玩的体无完肤,从我前面博客的排版就可以看出来了。遇到这种桀骜不驯的“汗血宝马”,我一贯的做法就是集中火力,驯服它。我觉得,关于Markdown语法说明最好的中文文档就是wowubuntu的“Markdown语法说明《简体中文版》”了。我的这篇文章也基本是我从中挑出我认为的重点(以语法为主,其他的就不啰嗦了),然后再加上一些其他内容。最主要的是,想通过这篇文章,更好的掌握Markdown。

一,概述

1,兼容HTML——区块元素和区段元素

基本上,在Markdown里面写HTML是没有问题的,大多数都可以正常解析。只有一些例外,就是HTML的区块元素——比如<div><table><pre><p>等标签。要想这些标签正常被解析,必须在前后加上空行与其他内容区隔开,还要求他们的开始标签与结尾标签不能用制表符或空格来缩进。另外,在HTML区块标签间的Markdown格式语法将不会被处理

HTML的区段标签(行内)标签如<span><cite><del>可以在Markdown的段落、列表或是标题里随意使用。甚至可以不适用Markdown格式,而直接使用HTML标签。和处在HTML区块标签间不同,Markdown语法在HTML区段标签间是有效的

2,特殊字符自动转换

关于Markdown的这个功能,我真心觉得特别实用。因为特殊字符在HTML里面真的是一个痛,特别容易出错,尤其是&字符。在Markdown里面,你基本可以把这些字符当做普通字符来用,绝大多数情况下Markdown的自动转换都很完美。

需要注意的是,code范围内,不论是行内还是区块,<&两个符号都一定会被转换成HTML实体。,

二,区块元素

1,段落和换行

一个Markdown段落指一个或多个连续的文本行。关于这个主题,我只想说以下几点:

  1. 段落与段落。Markdown的段落与段落之间要有一个以上的空行。
  2. 缩进。普通段落不能用空格或制表符来缩进。英文本身不需要缩进,而中文目前为止,我发现解决首行缩进最好的方法就是将中文输入法的标点符号调为全角, 然后打两个空格。正好缩进两个汉字的距离。
  3. 换行。在Markdown的一个段落里面,如果想换行,有两种方式:一是打两个以上的回车。二是在上一行结束后按入两个以上空格,然后回车即可。推荐第二种方法。

2,标题

Markdown的标题语法的确是很方便。虽然有好几种,我一直都喜欢用#。注意:#和标题之间至少要有一个空格。

3,区块引用

区块引用也很简单。就是使用>来进行引用,多个>可以嵌套引用。在引用内可以使用Markdown的其他语法,比如标题、列表、代码区块等。

4,列表

Markdown的列表也非常的简单好用。

  • 无序列表使用星号、加号、或是减号作为列表标记。
  • 有序列表使用数字加一个英文句点来表示。要注意:使用的数字是没有具体意义的。换句话说,不管你使用那个数字,结果都会是1,2,3,...这样的排下去。

要注意:

1)列表项目标记通常放在最左边,但是其实也可以缩进,最多3个空格。
2)项目标记后面一定要接至少一个空格或制表符。
3)列表项整体和前面算是两个不同的段落,所以之间要有至少一个空行。比如我这里的有序列表要和前面的“要注意”那一行之间要留至少一个空行。(这个问题是我在我的vim里面发现的,不知道其他人有没有。而且,还有一个问题就是,在我的vim里面,有序列表的第一行不能写太长的字符,写一些以后就要换行,但换行后就可以写满一行了。好在显示出来和全部写在一行也没有什么区别。)
4)列表项目可以包含多个段落,每个项目下的段落都必须缩进4个空格或一个制表符。这句话的意思如下表所示:
Markdown的目标是实现易读易写。可读性,无论如何都是最重要的。一份使用Markdown格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。
总之,Markdown的语法全由一些符号所组成。这些符号经过精挑细选,其作用一目了然。Markdown的语法目标是:成为一种适用于网络的书写语言。
5)如果要在列表项里面放进引用,那>就要缩进。
6)如果要在列表项里面放入代码区块的话,该区块就要缩进两次,也就是8个空格或是2个制表符。

5,代码区块

  • 在Markdown中建立代码区块很简单,只要简单的缩进4个空格或是一个制表符就可以了。Markdown会用precode标签把代码区块包起来。而一个代码区块会一直持续到没有缩进的那一行(或是文件结尾)。
  • 在代码区块里面,&<>会自动转成HTML实体。
  • 代码区块中,一般的Markdown语法不会被转换。比如星号就只是星号。

6,分隔线

你可以在一行中用三个以上的星号、减号、或下划线来建立一个分隔线,行内不能有其他东西。可以在星号或减号之间插入空格。

三,区段元素

1,链接

Markdown的链接语法相对来说也比较简单。主要分

行内式

参考式

两种。但不管是哪一种,链接文字都是用[方括号]来标记。

行内式链接

要建立一个行内式链接,只要在方括号后面紧跟这圆括号并插入网址链接即可。如果你还想加上链接的title文字,只要在网址后面,用双引号吧title文字包起来即可。比如下面的这种格式:

If you want to visit my blog web, just click [Technology
Zone](http://example.com "Title") inline link.

将产生这句话: If you want to visit my blog web, just click Technology
Zone
inline link.

如果要链接同样主机的资源,在圆括号中使用相对路径即可。

参考式链接

参考式链接是在链接文字的括号后面再加上另一个方括号,而在第二个方括号里面填入用以标识链接的标记:
Tis is [an example][id] reference-style link.
当然你可以选择在两个方括号中间加上一个空格。

接着,在文件的任意处,你可以把这个标记的链接内容按如下格式定义出来:
[id]: http://example.com/ "Optional Title here"

链接内容定义的形式为:

  • 方括号(前面可以选择性的加上至多3个空格来缩进),里面输入链接文字
  • 接着一个冒号
  • 接着一个以上的空格或制表符
  • 接着链接的网址
  • 选择性的接着title内容,可以用单引号、双引号或者括弧包着
  • 链接网址也可以用尖括号包起来

链接辨别标签可以有字母、数字、空白和标点符号。但并不区分大小写。因此下面两个链接是一样的。

[link text][a]
[link text][A]

还有一种隐式链接标记——该功能可以省略指定链接标记。这种情况下,链接标记会视为等同于链接文字。要用隐式链接标记只要在链接文字后面加上一个空的方括号。比如你想要让“Google”链接到google.com,你可以简化成:[Google][]
然后定义链接内容:[Google]: http://google.com

2,强调

Markdown使用星号*和底线_作为标记强调字词的符号。被*_包围的字词会被转成用<em>标签包围,用两个*_包起来的话,则会被转成<strong>。需要注意的是:

用那个标签开启,就要用那个标签结束。

强调也可以直接插在文字中间。但是如果*_两边都有空白的话,他们就只会被当成普通的符号。* 如果要在文字前后直接插入普通的星号或底线,可以用(反斜杠)转义。

3,代码(区段)

注意此处的代码指段内代码,和前面的区块代码区分。

  • 如果要标记一小段行内代码,你可以用反引号把它包起来
  • 如果要在代码区段内插入反引号,你可以用多个反引号来开启和结束代码区段
  • 代码区段的起始和结束端都可以放入一个空白,起始端一个,结束端一个,这样你就可以在区段的一开始就插入反引号。(这条没明白)
  • 代码区段内&<>都会被自动的转成HTML实体。

4,图片

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

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

![Alt text](/path/to/img.jpg)
![Alt text](/path/to/img.jpg "Optional title")

详细叙述如下:

  • 一个惊叹号
  • 接着一个方括号,里面放上图片的替代文字
  • 接着一个普通括号,里面放上图片的网址,最后还可以用引号包住并加上选择性的'title'文字

参考式的图片语法则像这样:![Alt text][id]
[id]是图片参考的名称,图片参考的定义方式和链接参考一样:
[id]: url/to/image "Optional title attribute"

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

四,其他

1,自动链接

这个特性非常的简单,但却带来了很多方便。自动链接就是说,你遇到网址或者邮箱时,只要用尖括号括起来,便会将其变为链接。

2,反斜杠

反斜杠在这里的作用有点像C语言中转义字符的作用。就是在特殊字符前面加,就可以将特殊字符转变为普通字符。反斜杠可以转义的特殊符号有:

反斜杠
` 反引号(但是我在两个反引号之间转义一个反引号,好像不太好使)
* 星号
_ 底线(下划线)
{} 花括号
[] 方括号
() 圆括号
# 井字号
+ 加号
- 减号
. 英文句点
! 感叹号

五,写在最后

其实正如Markdown自己的哲学,它的目标就是更加读写。所以它没有很复杂的语法,只是文本格式的加强版。所以,我们要从它的定位去评判它,不应该拿它和HTML之类的语言去作比较,因为他们的定位是不一样的。即所谓的尺有所短寸有所长。对我而言,Markdown基本可以完成大多数功能,但是再配合HTML,就可以满足我的所有需求了。