文章之前
最近想用简书写点东西,发现Markdown挺有意思的,于是结合朋友分享的,和自己查找的一些资料,把Markdown的一些简单的语法记录在此。
Markdown 和 Html 有些相近,但它的语法种类很少,只对应 HTML 标记的一小部分。
特殊符号
在HTML文件中,有两个字符需要特殊处理:&和<,但是在Markdown,你可以自然地书写,它会自动转换。如果你使用的 & 字符是 HTML 字符实体的一部分,它会保留原状,如版权符号 © (<code>©;</code>)否则它会被转换成<code> &;</code>。
类似的情况也会发生在 “<” 上,如果你写 “4<5",Markdown 会自动转换成 <code>4 <;5</code>。但是如果把 < 符号作为 HTML 标签的定界符使用,Markdown 不会对它做任何转换。
区块元素
段落和换行
一个 Markdown 段落前后要有一个以上的空行,若某一行只包含空格和制表符,则该行也会被视为空行,Markdown 会把每个换行符都转成<br />
标签。
普通段落不该用空格或制表符来缩进,如果你<u>确实</u>想要依赖 Markdown 插入 <br /> 标签的话,在插入处先按入两个以上的空格然后回车。
标题
Markdown 支持两种标题的语法
第一种是是用底线的形式,利用=
(最高阶标题)和 -
(第二阶标题),例如:
<pre>
这是一级标题 H1
=============
这是二级标题 H2
</pre>
任何数量的 = 和 - 都可以有效果。
另一种则是在行首插入 1 到 6 个 # ,对应到标题 1 到 6 阶,例如:
<pre>
这是 H1
这是 H2
这是 H6
</pre>
你可以选择性地「闭合」标题,这纯粹只是美观用的,而行尾的 # 数量也不用和开头一样(行首的井字符数量决定标题的阶数):
<pre>
这是 H1
这是 H2
这是 H3
</pre>
区块引用 Blockquotes
在 Markdown 文件中建立一个区块引用,只需在每行的最前面加上>
:
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
> 这纯粹只是美观用的,
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
>
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉,
> 只需在每行的最前面加上 ">"
当然你也可以只在整个段落的第一行最前面加上 > :
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
这纯粹只是美观用的,
巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
区块引用可以嵌套(例如:引用内的引用),只要根据层次加上不同数量的>
:
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
>>这纯粹只是美观用的,
> 巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉。
引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、代码区块等:
这是一个标题。
> ###### 这是一个标题。
- 这是第一行列表项。
- 这是第二行列表项。
>
> 给出一些例子代码:
>
> return shell_exec("echo $input | $markdown_script");
列表
Markdown 支持有序列表和无序列表。
无序列表使用星号、加号或是减号作为列表标记:
* RED
* GREEN
* BLUE
等同于:
+ RED
+ GREEN
+ BLUE
也等同于:
- RED
- GREEN
- BLUE
有序列表则使用数字接着一个英文句点:
1. RED
2. GREEN
3. BLUE
Ps:列表标记上使用的数字并不影响输出的HTML结果:
即可以写成
1. RED
3. GREEN
5. BLUE
也可以写成:
1. RED
1. GREEN
1. BLUE
如果列表项目间用空行分开,在输出 HTML 时 Markdown 就会将项目内容用< p > 标签包起来,举例来说:
* RED
* BLUE
会被转换为:
<ul>
<li><p>RED</p></li>
<li><p>BLUE</p></li>
</ul>
如果要在列表项目内放进引用,那>
就需要缩进:
* 一个列表包含一个引用区块
> 这是一个引用区块
> 在这个列表里
如果要放代码区块的话,该区块就需要缩进两次,也就是 8 个空格或是 2 个制表符:
* 一个列表包含一个代码区块
<代码写在这里>
有时候会不小心就产生了一个项目列表,像是下面这样的写法:
1986. What a great season.
即在行首出现<u>数字-句点-空白</u>,要避免这样的情况,可以在句点前面加上反斜杠。
1986\. What a great season.
代码区块
要在 Markdown 中建立代码区块很简单,只要简单地缩进 4 个空格或是 1 个制表符就可以,例如:
这是一个普通段落:
这是一个代码区块。
Markdown 会转换成:
<p>这是一个普通段落:</p>
<pre><code>这是一个代码区块。
</code></pre>
一个代码区块会一直持续到没有缩进的那一行(或是文件结尾)。
在代码区块里面, & 、 < 和 > 会自动转成 HTML 实体,只需要将HTML代码复制贴上,再加上缩进就可以了,Markdown 会自动转换,非常简便。
分隔线
你可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:
* * *
***
*****
- - -
---------------------------------------
区段元素
链接
Markdown 支持两种形式的链接语法: 行内式和参考式两种形式。不管是哪一种,链接文字都是用 [方括号] 来标记。
行内式的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,如果你还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可,例如:
这是 [一个有title的链接](http://example.com/ "Title") 例子.
[这个链接](http://example.net/) 没有标题属性.
Markdown 会自动转换为:
<p>这是 <a href="http://example.com/" title="Title">一个有title的链接</a>例子</p>
<p><a href="http://example.net/">这个链接</a> 没有title属性.</p>
也可以使用相对路径
这是 [相对路径](/about/) 链接。
参考式的链接是在链接文字的括号后面再接上另一个方括号,而在第二个方括号里面要填入用以辨识链接的标记(两个方括号中间可以加上一个空格或者不加,最多三个空格):
这是一个参考式的 [链接][id] 例子.
然后,你可以在文件的任意地方,把这个标记的链接内容定义出来:
[id]: http://example.com/ "Optional Title Here"
链接内容定义的形式为:
- 方括号,里面输入链接文字
- 接着一个冒号
- 接着一个以上的空格或制表符
- 接着链接的网址
- 选择性地接着 title 内容,可以用单引号、双引号或是圆括号包着
下面这三种链接的定义都是相同:
[foo]: http://example.com/ "Optional Title Here"
[foo]: http://example.com/ 'Optional Title Here'
[foo]: http://example.com/ (Optional Title Here)
注意:Markdown.pl 1.0.1 会忽略单引号包起来的链接 title。
链接网址也可以用方括号包起来:
[id]: http://example.com/ "Optional Title Here"
也可以把 title 属性放到下一行,也可以加一些缩进,若网址太长的话,这样会比较好看:
[id]:http://example.com/longish/path/to/resource/here
"Optional Title Here"
网址定义只有在产生链接的时候用到,并不会直接出现在文件之中。
链接辨别标签可以有字母、数字、空白和标点符号,但是并不区分大小写,因此下面两个链接是一样的:
[link text][a]
[link text][A]
隐式链接标记功能让你可以省略指定链接标记,这种情形下,链接标记会视为等同于链接文字,要用隐式链接标记只要在链接文字后面加上一个空的方括号,如果你要让 "Google" 链接到 google.com,你可以简化成:
[Google][]
然后定义链接内容:
[Google]: http://google.com/
强调
Markdown 使用星号(*
)和底线(_
)作为标记强调字词的符号,被*
或_
包围的字词会被转成用 <em>
标签包围,用两个*
或_
包起来的话,则会被转成 <strong>
,例如:
*single asterisks*
_single underscores_
**double asterisks**
__double underscores__
会转成:
<em>single asterisks</em>
<em>single underscores</em>
<strong>double asterisks</strong>
<strong>double underscores</strong>
但是如果*
和_
两边都有空白的话,它们就只会被当成普通的符号。
如果要在文字前后直接插入普通的星号或底线,你可以用反斜线:
\*this text is surrounded by literal asterisks\*
代码
如果要标记一小段行内代码,你可以用反引号把它包起来(`),例如:
Use the `printf()` function.
Markdown 会转换为:
<p>Use the <code>printf()</code> function.</p>
如果要在代码区段内插入反引号,你可以用多个反引号来开启和结束代码区段:
``There is a literal backtick (`) here.``
在代码区段内,& 和方括号都会被自动地转成 HTML 实体,这使得插入 HTML 原始码变得很容易,Markdown 会把下面这段:
Please don't use any `<blink>` tags.
转为:
<p>Please don't use any <code><blink> </code> tags.</p>
图片
Markdown 使用一种和链接很相似的语法来标记图片,同样也允许两种样式: 行内式和参考式。
行内式的图片语法:
![](/path/to/img.jpg)
![](/path/to/img.jpg "Optional title")
写法说明:
- 一个惊叹号 !
- 接着一个方括号,里面放上图片的替代文字
- 接着一个普通括号,里面放上图片的网址,最后还可以用引号包住并加上 选择性的 'title' 文字。
参考式的图片语法:
![Alt text][id]
「id」是图片参考的名称,图片参考的定义方式则和链接参考一样:
[id]: url/to/image "Optional title attribute"
到目前为止, Markdown 还没有办法指定图片的宽高,如果需要的话,可以使用普通的 <img>
标签。
反斜杠
Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号。
\*literal asterisks\*
Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:
\ 反斜线
` 反引号
* 星号
_ 底线
{} 花括号
[] 方括号
() 括弧
# 井字号
+ 加号
- 减号
. 英文句点
! 惊叹号