Markdown火了貌似好一阵子了,但一直以来都没有时间好好学习下它的语法。这是我用Markdown写的第一篇文章,是对Markdown: Syntax的概要翻译,希望对大家和自己都有帮助。
1、写在前面
1.1 段和行
Markdown中一段(Pragraph)是一行或多行连续的文本。段与段之间由一个或多个空行隔开。空行就是看起来没有内容的行,只包含空格或者tab的行都叫做空行。Markdown中一般的不包含特殊格式的文本,不应该用空格或者tab缩进。
1.2 "Hard wraped" text paragraph
A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines.
The implication of "one or more consecutive lines of text" rule is that Markdown supports "hard wraped" text paragraphs. This differs significantly from most other text to html formatters(including Movable Type's "Convert Line Breaks" option) which translate every line break character in a paragraph into a
tag.
1.3 如何产生<br/>
在一行的末尾加两个或两个以上的空格,Markdown就会插入一个<br/>
标签。尽管这样做不如其它text to html工具方便,但是这样便于后面的列表和引用块排版。
1.4 HTML实体
Markdown会自动将&、>、<等转化为HTML实体,这一特点极大地提高了网络写作的方便性。
2、块元素(block elements)
2.1 标题
- Setext风格
一级标题下面用等号“=”。
二级标题下面用连字符“-”。 - Atx风格
开头使用1-6个“#”,对应1-6级标题。为了美观,标题的结尾也可以加上相应的“#”,但是其数量没有要求。
2.2 引用块
“>”后面跟至多四个空格,产生引用块。可以在引用块中的每行都添加引用块标识,也可以只在第一行添加。
引用块可以嵌套,如下:
> This is quote item1, level1.
> > This is quote item1, level2.
> > This is quote item2, level2.
引用块中也可以有其它元素,如:
> Headline as following:
> ## Headline Level2
2.3 列表
列表标识后面必须要跟一个或者多个空格或一个tab。
- 有序列表
数字后面跟英文句号开头会产生一个有序列表项,注意,数字的值并不会影响最终生成的文档。 - 无序列表
“*”、“+”和“-”开头会产生一个无序列表项。
说明:
为了美观,可以将所有列表行悬挂缩进。
如果列表项之间有空行,在HTML输出中,Markdown会将该列表项用<p>包裹。
如果一个列表项由多个段落组成(注意这里不是指多行,而是空行隔开的多个段落。),每段开头必须缩进一个tab或者四个空格。为了美观,也可以在段落的每行都缩进。
在列表中使用引用,引用定界符“>”必须缩进(一个tab或者四个空格)。
在列表项中使用代码块,要缩进两次(8个空格或者两个tab)。
-
为了避免意外触发列表,可以用“\”对数字后面的句号进行转义。
1990\. 一个值得纪念的年份。
2.4 代码块
开头缩进4个空格或一个tab,会产生一个代码块。Markdown用<pre>
和<code>
标签来包裹其中的内容。
说明:
- 代码块中的内容会被减掉一级缩进(4个空格或者1个tab)。
- 遇到不缩进的行或者文档末尾,代码块终止。
- 代码块中的&、<、>等会自动被转化为HTML实体。
- 代码块中的“*”、“#”等Markdown标识符不会被解释,所以Markdown可以很方便地写Markdown的教程。
2.5 水平线
三个或者三个以上的“*”、“_”或“-”占一行会产生一条水平线,对应HTML中的<hr/>
标签。
3、Span elements
3.1 链接
Markdown的链接有两种类型:inline和reference。
-
Inline根据有无title可以有两种格式:
[an example](http://example.com "optional title") [an example](http://example.com)
如果引用的资源在同一服务器,可以采用相对路径。
-
Reference格式:
[an example][id]
然后,在文档的任意位置,用下面的格式定义:
[id]:http://example.com/ "Optional title here" [id]:http://example.com/ 'Optional title here' [id]:http://example.com/ (Optional title here) 以上三种方式等价。当url过长时,也可以把title放在相邻的下一行。
说明:
- 链接的定义只用来被Markdown处理,而不会出现在最后的HTML输出中。
- 链接定义的名称可以包含字母、数字、空格和标点,但是不区分大小写。
- 如果省略了链接名称,Markdown会将link text作为缺省值。如
[Google][]
会匹配id为Google的链接。
3.2 强调
-
斜体
“*”和“_”包裹都能够产生斜体格式的文本,对应HTML的<em>
标签。*这部分是斜体* _这部分也是斜体_
粗体
用两个“*”或两个“_”包裹都可以产生粗体格式的文本,对应HTML的<strong>
标签。
强调可以在单词中使用,如:
un**frigging**believable
如果用空格包裹了“*”或“_”,它们就会被当成纯文本。同样,也可以用“\”对“*”或“_”进行转义。
3.3 Code span
反引号包裹可以产生一段code span。和code block不同,code span可以出现在一个段落中,如:
Use `printf()` to say hello world.
为了可以在code span中包含一个反引号,可以使用双反引号来产生code span,如:
``There is a backtick(`) here.``
包裹code span的反引号,开始后和结束前可以紧跟一个空格,这使得可以在code span开头和结尾放一个反引号,如:
` ` `
`` `foo` ``
code span中的“&”、“>”等会自动转义为HTML实体。
3.4 图片
类似于链接,图片也有两种格式:inline和reference。
-
Inline:
![Alt text](/path/to/img.jpg) ![Alt text](/path/to/img.jpg "Optional title here")
可以看出,和链接非常类似。
-
Reference:
![Alt text][id] 然后,在文档的任意位置,用下面的格式定义: [id]:url/to/img "Optional title here"
4、其它
4.1 链接和邮箱地址的简捷方式
-
链接
<http://example.com/>会生成<a href="http://example.com/">http://example.com/<a/>
-
邮箱地址
<address@example.com>
不但会将其转化为相应的链接,而且为了防止邮箱被恶意爬取,Markdown还会将其中的每个字符都用HTML实体表示。
4.2 转义
为了显示Markdown的标识字符,可以用“\”对它们进行转义。需要转义的字符如下:
- “\” backslash
- “`” backtick
- “*” asterisk
- “_” underscore
- “{}” curly braces
- “[]” square brackets
- “()” parentheses
- “#” hash mark
- “+” plus sign
- “-” minus sign
- “.” dot
- “!” exclamation mark
4.3 表格
其实,表格不是Markdown标准支持的,但是因为常用,这里说下Github Favored Offline风格的表格写法:
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
说明:用|
来做表格边框和分割列,:
指定表格内容的对齐方式。表头行和内容行之间,要加一个格式行来分割并指定各列内容的对齐方式。
生成的被表格结构如下:
Tables | Are | Cool |
---|---|---|
col 3 is | right-aligned | $1600 |
col 2 is | centered | $12 |
zebra stripes | are neat | $1 |