Markdown 語法

Markdown 的易讀易寫特性讓它在這幾年成為很熱門的文件編寫格式,Markdown TW 有很詳盡的說明,以下節錄常用的語法。

區塊元素

標題

# H1

## H2

### H3

#### H4

##### H5

###### H6

H1

H2

H3

H4

H5
H6

區塊引言

> 有 2 個段落的區塊引言。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.

有 2 個段落的區塊引言。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.

階層引言(引言內的引言):

> 第一層的引言。
>
> > 階層的引言。
>
> 回到第一層。

第一層的引言。

階層的引言。

回到第一層。

引言的區塊內也可以使用其他的 Markdown 語法,包括標題、清單、程式碼區塊等:

> ## 標題
>
> 1. 第一個清單項目
> 2. 第二個清單項目
>
> 以下是程式碼區塊
>
>     return shell_exec("echo $input | $markdown_script");

標題

  1. 第一個清單項目
  2. 第二個清單項目

以下是程式碼區塊

return shell_exec("echo $input | $markdown_script");

清單

無序清單

無序清單使用星號、加號或是減號作為清單標記:

* 黃
* 綠
* 紅

+ 黃
+ 綠
+ 紅

- 黃
- 綠
- 紅

都會輸出成

有序清單

有序清單則使用數字接著一個英文句點,你在清單標記上使用的數字並不會影響輸出的 HTML 結果:

1.  牛排
2.  火鍋
3.  串燒

1.  牛排
1.  火鍋
1.  串燒

都會輸出成

  1. 牛排
  2. 火鍋
  3. 串燒

清單項目可以包含多個段落,每個項目下的段落都必須縮排 4 個空白或是一個 tab:

1.  有 2 個段落的清單項目。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.
  1. 有 2 個段落的清單項目。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.

如果要在清單項目內放進引言,那>就需要縮排:

*   有引言的清單項目:

    > 在清單項目
    > 內的引言。
  • 有引言的清單項目:

    在清單項目
    內的引言。

如果要放程式碼區塊的話,該區塊就需要縮排兩次,也就是8個空白或是兩個tab:

*   包含程式碼區塊的項目清單:

        <程式碼>
  • 包含程式碼區塊的項目清單:

    <程式碼>
    

當然,項目清單很可能會不小心產生,像是下面這樣的寫法:

1986. 多美好的年代
  1. 多美好的年代

換句話說,也就是在行首出現數字-句點-空白,要避免這樣的狀況,你可以在句點前面加上反斜線。

1986\. 多美好的年代

1986. 多美好的年代


程式碼區塊

要在 Markdown 中建立程式碼區塊很簡單,只要簡單地縮排 4 個空白或是 1 個 tab 就可以,例如,下面的輸入:

一般的段落:

    程式碼區塊。

會轉換成

一般的段落:

程式碼區塊。

分隔線

* * *

***

*****

- - -

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

都可以建立分割線


區段元素

連結

Markdown 支援兩種形式的連結語法:行內和參考兩種形式。

不管是哪一種,連結的文字都是用 [方括號] 來標記。

行內形式:

行內連結的 [範例](https://blog.36web.rocks "title")

沒有 title 的 [連結](https://blog.36web.rocks)

行內連結的 範例

沒有 title 的 連結

也可以使用相對路徑:

查看本站的 [Sitemap](/sitemap.xml)

查看本站的 Sitemap

參考形式:

參考形式連結的 [範例][id]

[id]: https://blog.36web.rocks "選擇性的 title"

參考形式連結的 範例

連結定義的形式為:

  • 方括號,裡面輸入連結的辨識用標籤
  • 接著一個冒號
  • 接著一個以上的空白或 tab
  • 接著連結的網址
  • 選擇性地接著 title 內容,可以用單引號、雙引號或是括弧包著

連結辨識標籤可以有字母、數字、空白和標點符號,但是並不區分大小寫

預設的連結標籤功能讓你可以省略指定連結標籤:

[Google][]

[Google]: http://google.com/

Google


強調

*一個星號*

_一個下底線_

**兩個星號**

__兩個下底線__

一個星號

一個下底線

兩個星號

兩個下底線

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

\*這段文字被星號包圍\*

*這段文字被星號包圍*


程式碼

如果要標記一小段行內程式碼,你可以用反引號把它包起來(`):

使用 `printf()` 函式。

使用 printf() 函式。

如果要在程式碼區段內插入反引號,你可以用多個反引號來開啟和結束程式碼區段:

``這 (`) 有個反引號。``

這 (`) 有個反引號。

程式碼區段的起始和結束端都可以放入一個空白,起始端後面一個,結束端前面一個,這樣你就可以在區段的一開始就插入反引號:

程式碼內的反引號:`` ` ``

被反引號包圍的字串:`` `foo` ``

程式碼內的反引號:`

被反引號包圍的字串:`foo`


圖片

行內式的圖片:

![Alt 文字](https://blog.36web.rocks/2015/12/23/markdown-syntax/doraemon.jpg)

![Alt 文字](https://blog.36web.rocks/2015/12/23/markdown-syntax/doraemon.jpg "選擇性的 title")

Alt 文字

Alt 文字

參考式的圖片:

![Alt 文字][image ID]

[image ID]: https://blog.36web.rocks/2015/12/23/markdown-syntax/doraemon.jpg  "選擇性的 title"

Alt 文字


GFM

GitHub Flavored Markdown 特有的語法:

刪除線

~~刪除線~~

刪除線

表格

|  表頭 | 置左 |  置中 | 置右 |
| ---- |:---- |:----:| ----:|
|  格子 | 格子 |  格子 | 格子 |
|  格子 | 格子 |  格子 | 格子 |
|  格子 | 格子 |  格子 | 格子 |
表頭 置左 置中 置右
格子 格子 格子 格子
格子 格子 格子 格子
格子 格子 格子 格子

程式碼標示

```js
// 數到 10
for (var i = 1; i <= 10; i++) {
console.log(i);
}
```

1
2
3
4
// 數到 10
for (var i = 1; i <= 10; i++) {
console.log(i);
}