写博客的时候总是被排版问题搞的比较头疼,写着写着就得设置字体或者添加链接,今天打算学习markdown这种轻量级标记语言。花了一下午时间,参考了三篇文章,然后边学边用,用markdown写了这篇笔记。

markdown是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)和亚伦·斯沃茨(Aaron Swartz)。

段落与换行

Markdown的一个段落是由一个或多个连续的行构成,段落间靠一个或以上视觉上的空行划分。也就是说想要换行直接按两下(或多下)空格键就行了。一般的段落不应该用空格或制表符缩进,如果真的想缩进的话也不是不可以,markdown和html是兼容的,可以直接使用html中的一些标签,并且不用声明哪个是哪个的。所以,缩进可以使用:  即可实现。

标题

markdown的标题支持两种形式的语法。

Setext形式

Setext形式的标题是以=或者-的形式实现的。
比如我们写:

一级标题  
=============  
二级标题  
-------------

最终的效果如下:

一级标题

二级标题
————

这里=或者-的数量没有限制。

Atx形式

Atx形式的标题是以在一行的开始插入1或者6个#来实现的,为了对称也可以在行尾插入#,行首插入的和行尾插入的个数可以不相等。
比如我们写:

# 一级标题  
## 二级标题  
### 三级标题  
#### 四级标题  
##### 五级标题  
###### 六级标题  

效果如下:

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

引用

markdown的引用使用>来实现的,引用一行内容的时候只需要在行首加上>即可,如果是多行引用的话,可以再每行的行首加上>,也可以只在第一行加上>,后面相邻的行可以省略。markdown也可以在引用中引用,即使用嵌套的引用。另外,在引用中也可以使用其他的语法元素,比如标题等。
比如我们写:

>#### 一级引用  
>>##### 一级引用嵌套  

>##### 二级引用  
>###### 三级引用  

效果如下:

一级引用

一级引用嵌套
二级引用
三级引用

列表

markdown支持无序列表(没有编号的列表)和有序列表(有编号的,已经排好顺序的列表)。

无序列表

无序列表使用*,+,-作为列表标记。
格式为:符号+空格+内容。(这里要有一个或者一个以上的空格,多个将视为一个。)
比如我们写:

* 动物  
* 植物  
* 微生物  

或者:

+ 动物  
+ 植物  
+ 微生物  

或者:

- 动物  
- 植物  
- 微生物  

效果如下:

  • 动物
  • 植物
  • 微生物

如果无序列表的一个项里面有子项,那么在下一行以一个制表符或者4个空格进行缩进即可。
比如我们写:

+ 动物  
    + 大象  
    + 老虎  
+ 植物  
    + 百合  
    + 玫瑰  
+ 微生物  
    + 真菌  
    + 细菌  

效果如下:

  • 动物
    • 大象
    • 老虎
  • 植物
    • 百合
    • 玫瑰
  • 微生物
    • 真菌
    • 细菌

有序列表

有序列表以数字和.开始。
格式为:第一行:数字+\.+空格+内容,接下来的行里可以使用:-+空格+内容。(空格和无序列表的要求相同。)
比如我们写:

1. 动物  
- 植物  
- 微生物  

效果如下:

  1. 动物
    • 植物
    • 微生物

如果仅仅需要在行前显示数字和.,可以使用:数字+.+内容来取消显示为列表。
同样的,如果有序列表也有子项的话,那么在下一行以一个制表符或者4个空格进行缩进即可。
比如我们写:

1. 动物  
    1. 大象  
    - 大象  
- 植物  
    1. 百合  
    - 玫瑰  
- 微生物  
    1. 真菌  
    - 细菌  

效果如下:

  1. 动物
    1. 大象
      • 大象
      • 植物
    2. 百合
      • 玫瑰
      • 微生物
    3. 真菌
      • 细菌

代码区块

markdown有两种插入代码的方式。一种是把代码用反引号(``)(键盘上Esc键下面的键)包起来,这个一般用于行内插入字符或者代码。另一种是使用制表符或者四个空格缩进,这个一般用于大量代码,贴完代码之后直接全部选中然后按下Tab键即可。 效果如下:

#include <iostream>

using namespace std; 
int main(void)
{  
	cout<<"hello world"<<endl;

	return 0;
}

代码插入这块我看了半天,只是这样的话不是怎么没关,要是能实现高亮就好了。

水平分割线

markdown可以在一行中使用三个或者更多的*,-或者_来产生水平分割线,并且多个字符之间可以有空格,但是不能有其他的字符。

比如我们写:

***  
___

---

效果如下:




其实这三个符号是有细微区别的,具体还请读者自己试试。

链接

markdown支持两种形式的链接语法,一种是行内式,一种是参考式。

行内式

要建立一个行内式的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,如果你还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可。
比如我们写:

My name is Tom, this is [my blog](http://www.example.com).(没有title)  
My name is Tom, this is [my blog](http://www.example.com "click here to go to my blog").(有title)  

效果如下:

My name is Tom, this is my blog.(没有title)
My name is Tom, this is my blog.(有title)

如果你想链接到同样本机的页面或者资源的话,markdown同样允许使用相对路径。
比如我们写:

My name is Tom, if you don't know who i am, you can click [here](/about-me/).

效果如下:

My name is Tom, if you don’t know who i am, you can click here.

参考式

参考式的写法相当于行内式拆分成两部分,并通过一个识别符来连接两部分,这和书籍上的注解有点像。它的形式是在链接文字的括号后面再加上一个方括号,而在第二个方括号里面要填入用以辨识链接的标记,此标记可以是字母、数字、空白或标点符号。这里不区分大小写
比如我们写:

My name is Tom, this is [my blog][blog].

然后再文章的任意一个地方(一般是段尾或者文尾)把刚才标记的链接的内容定义出来。
链接定义的形式如下:

[标记]: 链接地址 title
title必须使用单引号,双引号或者圆括号包着。  

比如我们在结尾这样写:

[blog]:http://www.example.com "click here to go to my blog"  

效果如下:

My name is Tom, this is my blog.

为了增强的可读性和兼容性,一般建议以链接文本作为标记,使用双引号包着title。
需要说明的一点是,在markdown下还有隐式链接标记功能,它可以让你省略指定链接标记,这种情形下,链接标记会缺省为等同于链接文字,要用隐式链接标记只要在链接文字后面加上一个空的方括号。
比如我们写到:

My name is Tom, this is [my blog][].  

这是我们在定义链接的时候就必须这样写:

[my blog]:http://www.example.com "click here to go to my blog"

效果是等价的:

My name is Tom, this is [my blog][].
[my blog]:http://www.example.com “click here to go to my blog”

强调

markdown用*和_作为强调的标记符号。一般被 * 或 _ 包围的字词会被转成用<em>标签包围的效果(通常为斜体),用两个 * 或 _ 包起来的话,则会被转成<strong>效果(通常为加粗)。
比如我们写:

*强调*  
_强调_  
**强调**  
__强调__  

效果如下:

强调
强调
强调
强调

需要注意的是*或者_内侧不能有空白,否则不会出现强调效果,并且符号都必须成对使用,如果要输入字符本身,可以使用\进行转义。

图片

markdown里面插入图片的方式和插入链接的方式大同小异,插入图片同样也分为行内式和参考式。

行内式

行内式定义一个图片方式如下:

![图片的说明文字](地址)(没有title)
![图片的说明文字](地址 “title”)(有title) 比如我们写:

![](/private/80x80.jpg)  
![](/private/80x80.jpg "我的微博头像")  

效果如下:

我的微博头像
我的微博头像

参考式

参考式的语法如下:

![图片的说明文字][标记]

然后在文章的任意地方定义图片链接,格式如下:

[标记]:地址 "title"

比如上面的那个例子我们可以这样写:

![我的微博头像][image]

然后在某处这样定义:

[image]:/private/80x80.jpg "我的微博头像"

效果如下:

我的微博头像

Markdown目前还没有办法指定图片的宽高,不过可以使用html里的<img>标签。

其他

自动链接

markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来,Markdown就会自动把它转成链接。一般网址的链接文字就和链接地址一样,例如我们输入<http://www.example.com>,markdown中的效果如下:

http://www.example.com

邮件地址也一样,比如我们输入:<[email protected]>,在markdown中的效果如下:

[email protected]

不同的是,对于邮件地址,markdown会先做一个编码转换的过程,把文字字符转成16进位码的HTML实体,这样的格式可以糊弄一些不好的邮址收集机器人。

反斜杠

像其他语言一样,markdown支持使用反斜杠来插入一些在其语法中有其他含义的字符,这个功能一般称之为转义。比如对于强调符号,我们为了说明的含义,通常要把*以及它要强调的内容显示出来,我们可以这样输入:

\*强调\*

然后显示的效果如下:

*强调*

一般包括以下这些符号:

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

有关markdown的编辑器

  1. Windows:

其它:

还有许多其它的软件和平台都有相应的扩展或插件支持,如:

  1. Submline Text: MarkdownEditing
  2. gedit: gedit-markdown
  3. Eclipse: Markdown Editor plugin
  4. IntelliJ IDEA: idea-markdown
  5. Wordpress: WP-Markdown

参考资料: