概述
Pandoc中支持擴展修訂版本的Markdown語法
- 使用pandoc中支持的Markdown語法用
-f markdown
- 使用標准Markdown語法用
-f markdown_strict
Pandoc所支持的語法各種對標准Markdown語法的擴展可以通過在格式后以+EXTENSION
添加或-EXTENSION
去除,如:
-f markdown-footnotes
表示識別除了footnotes擴展之外的所有pandoc Markdown語法-f markdown_strict+footnotes+pipe_tables
表示識別標准Markdown語法加上footnotes和pipe_tables擴展語法
段落
段落是指一個或多個空行之后的多行文本,文本中的換行都被視作空格,
如若要輸出換行,則應在行末添加兩個或多個空格
注: 段落之后也應加一個空行,以區分段落和其他部分,如:列表
如下Markdown語法
這是一個段落 - 列表項1 - 列表項2
翻譯成HTML如下:
這是一個段落 - 列表項1 - 列表項2
若要正確的顯示列表應在段落后添加一個空行,如下:
這是一個段落 - 列表項1 - 列表項2
Extension: escaped_line_breaks
也可以通過在行末添加一個反斜線\
來換行,如:
這是第一行\
這是第二行
注: 這是在表格單元格中添加換行的唯一形式
標題
Pandoc中支持兩種標題語法:Setext和ATX
Setext風格語法
setext風格標題是一行文本下跟一行=
符號(表示一級標題)和-
符號(表示二級標題),
文本中可以包含如斜體、加粗等行內格式
一級標題
=======
二級標題
-------
ATX風格語法
ATX風格標題就是我們通常所用的Markdown標題語法,在行首添加一到六個#
符號表示不同級別的標題,編譯成對應的html標簽<hn>
,
如一個#
表示一級標題,會編譯成HTML標簽<h1>
,與setext風格相同,文本中可以包含如斜體、加粗等行內格式
Extension: blank_before_header
標准Markdown語法並不要求在標題前添加一個空行,但是Pandoc語法卻要求標題前添加一個空行(除了文檔開頭)
標題標識符(Header identifiers)
可以通過在標題行末添加如下形式的標識符來為標題添加屬性:
{#identifier .class .class key=value key=value}
identifier
會被編譯成html文檔中的id
屬性,
class
會被合並成html文檔中的class
屬性
Extension: auto_identifiers
沒有顯示指定identifier
的標題會根據標題內容自動分配一個唯一標識,
標題文本生成identifier
的順序如下:
- 移除格式、連接等
- 移除腳注(footnotes)
- 移除除了下划線
_
和連接符-
之外的標點符號 - 用連接符
-
替換所有空格和換行符 - 將所有字母轉換成小寫
identifier
不能以數字和標點符號開頭- 如果文本此時為空,則取
section
做標識符
如果自動生成的標識符相同則根據順序在標識符后添加
-1
、-2
等
Extension: implicit_header_references
Pandoc默認每個標題都定義了引用鏈接,故對於標題# 標題1
,
可以使用[標題1]
或者[標題1][]
引用,注意,引用鏈接是區分大小寫的
塊引用
塊引用是指一個或多個段落或其他塊元素(如列表或標題),每一行以一個>
符號和一個可選的空格開頭
(>
符號並不需要在行首,但是不可縮進超過三個空格)
> 塊引用
> 段落
>
> 1. 列表1
> 2. 列表2
塊引用並不是每一行都需要以>
符號開頭,只需在每一個區域的首行添加>
即可,
如下文本和上述的文本有相同的效果
> 塊引用
段落
> 1. 列表1
2. 列表2
注
- 塊引用可以嵌套使用
>
后的空格作為塊引用標識的一部分,若是在塊引用中添加代碼,
則需在>
后添加五個空格
Extension: blank_before_blockquote
標准Markdown語法並不要求在塊引用前添加一個空行,
但是Pandoc語法卻要求在塊引用前添加一個空行(除了文檔開頭外)
代碼塊
縮進式代碼塊
由四個空格或一個tab縮進的文本取做代碼塊,區塊中的特殊字符、空格和換行都會被保留,
而縮進的空格和tab會在輸出中移除,但在代碼塊中的空行不必縮進
using System;
public class Program
{
public static void Main()
{
Console.Write('Hello World!');
}
}
圍欄式代碼塊
Extension: fenced_code_blocks
除了標准的縮進式代碼塊之外,Pandoc還支持圍欄式代碼塊,
代碼塊以三個或三個以上的~
符號行開始,以等於或多於開始行~
個數符號行結束,
若是代碼塊中含有~
,只需使開始行和結束行中的~
符號個數多於代碼塊中的即可
~~~~~
~~~~
code here
~~~~
~~~~~~
Extension: backtick_code_blocks
與fenced_code_blocks
相同,只不過使用反引號`
替換波浪線~
而已
Extension: fenced_code_attributes
與標題標識符相同,在波浪線或反引號代碼塊的首行添加屬性即可,如下:
~~~ { #id .cs .numberLines }
using System;
public class Program
{
public static void Main()
{
Console.Write('Hello World!');
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如上代碼中添加的cs
類可以用於代碼HTML和LaTex輸出的代碼高亮,
pandoc所支持高亮的語言可以通過在命令行中輸入pandoc --version
查看,
除了上述方式設置代碼塊的高亮語言,也可通過如下方式設置
```cs
using System;
public class Program
{
public static void Main()
{
Console.Write('Hello World!');
}
}
```
行文本塊
Extension: line_blocks
行文本塊是指一系列由|
和一個空格開頭的行,在輸出中可以保留空格和換行,
不會像段落那樣將換行符轉換成空格,可用於詩文和地址的排版
| 詠梅
| 啊!梅花
| 紅
|
| 霜
列表
無序列表
列表項以星號*
、加號+
或減號-
開頭,如下:
* 列表項1
* 列表項2
* 列表項3
這樣輸出的列表是“緊湊”型的列表,若是要輸出“寬松”型列表,
可在列表項之間添加空行即可
* 列表項1
* 列表項2
* 列表項3
四空格原則
一個列表項里可以包含多個段落或其他塊級別內容,
但是其次的段落都應該以一個空行和四個空格縮進開始
* 列表項1 第一段落
列表項1 第二段落
* 列表項2 第一段落
{ code }
列表中可以嵌套列表,每一層嵌套列表都需要添加四個空格或一個tab縮進,
並且每一層應該使用不同的起始符
* 1.1
+ 1.1.1
- 1.1.1.1
- 1.1.1.2
+ 1.1.2
* 1.2
有序列表
有序列表項以數字、一個點.
和一個空格開頭,
並且取第一個列表項數字為基准,依次向下排,故下面兩個列表是一樣的
**列表1**
1. 一
2. 二
3. 三
---
**列表2**
1. 一
5. 二
9. 三
Extension: fancy_lists
不像標准Markdown語法只能使用阿拉伯數字作為有序列表標識,
Pandoc中還支持大小寫字母、羅馬數字,或用括號、右括號標識列表項,
但其后的文本需與列表標識隔開至少一個空格,
若是一個大寫字母和一個點做標識,則需在其后跟兩個空格
fancy_lists
擴展還支持使用#
來代替數字
#. 列表項1
#. 列表項2
Extension: startnum
Pandoc支持自定義的列表起始數字,而且會在每次使用不同的列表標識便重新開始一個新列表,
如下會創建三個列表
(3) 列表1項1
(7) 列表1項2
1. 列表2項1
* 列表2項1
定義列表
Extension: definition_lists
名詞1
: 解釋1
一個名詞
名詞
: 解釋2
定義列表形式如上,術語獨占一行,其后可以跟一個空行,然后是一個或多個定義,
每一個定義以:
和~
開頭,可以縮進一到兩個空格
一個術語可以包含多個定義,一個定義可以包含多個區塊(段落、代碼塊、列表等),
而每一個區塊都應以四個空格或一個tab縮進
編號列表
Extension: example_lists
特殊的列表標識符@
用於連續編號列表,整個文檔中的@
符號從1
開始編號,
依次類推,如下的前三個@
會分別替換為1
, 2
, 3
(@) My first example will be numbered (1).
(@) My second example will be numbered (2).
Explanation of examples.
(@) My third example will be numbered (3).
(@good) This is a good example.
As (@good) illustrates, ...
@
后可以加上一個字符串來表示一個標簽,用於在其他地方引用這個序號,
如上例中的@good
會被4
來替換
緊湊和寬松列表
若列表項前插入一個空行,則會將當前列表項作為段落處理(用<p>
標簽包裹),
從而輸出“寬松”的列表,反之則會輸出“緊湊”的列表
截斷列表
1. 列表1項1
2. 列表1項2
1. 列表2項1
2. 列表2項2
如上想要輸出兩個列表,卻會輸出一個有四項的列表,
要想“截斷”列表1,則可在兩個列表之間插入一行沒有縮進的行,如HTML注釋
1. 列表1項1
2. 列表1項2
<!-- -->
1. 列表2項1
2. 列表2項2
水平線
一行由三個或三個以上*
、-
或_
組成的會輸出一個水平線
表格
Pandoc中支持simple_tables
, multiline_tables
, grid_tables
和pipe_tables
四種表格
Extension: table_captions
四種表格都可以通過在表格前或后添加一個以Table:
(或:
)開頭的段落表示表格的表頭
Extension: simple_tables
簡單的表格形如下
Right Left Center Default
------- ------ ---------- -------
12 12 12 12
123 123 123 123
1 1 1 1
Table: 簡單表格實例
列首行和表格中的每一行都應獨占一行,
列對齊方式由列頭和其下虛線行的相對位置決定:
- 右對齊: 虛線行與列頭右對齊,而左端超過列頭
- 左對齊: 虛線行與列頭左對齊,而右端超過列頭
- 居中: 虛線行超出列頭兩端
- 默認: 虛線行與列頭兩端對齊(一般情況下默認是左對齊)
表格必須以一個空行或一行虛線行加一個空行結束,
而且有時可以忽略列頭行
注: 中文環境不推薦使用這種方式選擇對齊方式,反正小生是玩不好>_<
Extension: multiline_tables
跨行表格允許列首行和表格中的行可以分多行撰寫,但是不支持單元格的跨行和跨列,
跨行表格必須以一行虛線行開始,以一行虛線行和一個空行結束,行與行之間應有一個空行
-------------------------------------------------------------
Centered Default Right Left
Header Aligned Aligned Aligned
----------- ------- --------------- -------------------------
First row 12.0 一個行跨
多行的例子
Second row 5.0 這是另一行
注意表格行與行
之間的空行哦~~
-------------------------------------------------------------
Table: 這個是標題
也能跨行的啦~~
跨行表格的列首行也可以被忽略,
也可以只包含一行,但是這一行后必須跟着一個空行
Extension: grid_tables
網格表格中列首行與其他行需要使用一行=
隔開,但是在沒有列首行的表格中可以忽略,
網格表格中的單元格可以包含任意區塊(段落、代碼塊、列表等),
但對其方式和單元格的跨行跨列都是不支持滴~
: 網格表格樣例
+---------------+---------------+--------------------+
| Fruit | Price | Advantages |
+===============+===============+====================+
| Bananas | $1.34 | - built-in wrapper |
| | | - bright color |
+---------------+---------------+--------------------+
| Oranges | $2.10 | - cures scurvy |
| | | - tasty |
+---------------+---------------+--------------------+
Extension: pipe_tables
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
: `pipe_tables`表格樣例
pipe_tables
每一列之間用豎線|
隔開,列首行和其余行之間用虛線行隔開,
虛線行中用冒號:
來決定列的對其方式,
表格中兩端的|
豎線列可以忽略,而且|
只是用來隔開列,而不必對齊,
但是pipe_tables
的列首行不能忽略,要是想要生成沒有列首的表格,
只要在列首行的單元格置空便可
|
-----|-----:
蘋果|2.05
梨 |1.37
橘子 |3.09
注:
pipe_tables
中的單元格不可包含如段落、列表等區塊元素
反斜線轉義符
Extension: all_symbols_escapable
除了在代碼塊和行內代碼中,反斜線后的任何字符和空格都會按照字面輸出,
Markdown語法中能被轉義的字符如下
\`*_{}[]()>#+-.!
行內格式
強調
用一對*
或_
包裹起來的文本會被輸出為斜體,
而用一對**
或__
包裹起來的文本會被輸出為加粗
強調文本:這里是*斜體*,這里是**加粗**
若是*
或_
符號前后有空格,或用\
轉義,
則不會輸出為斜體或加粗
這里 * 不會被翻譯成斜體 *, 而且 \*這里也不會\*.
Extension: intraword_underscores
文本中的成對_
不會被翻譯成斜體,
若是想強調文本中部分的文本,可以使用*
刪除線
Extension: strikeout
一對~~
所包裹的文本會添加一條刪除線
~~這個文本被刪除了~~
上標和下標
Extension: superscript
, subscript
上標可以通過一對^
標識,而下標可以通過一對~
標識,
若上下標中包含空格,可以通過\
轉義空格
H~2~O
2^10^ = 1024
P~a\ cat~
行內代碼塊
小段的行內代碼塊可以使用一對`
包裹,
而行內代碼塊中含有反引號`
,可以用雙反引號包裹代碼塊,
但是行內代碼塊中的轉義符\
沒有轉義的作用
這是一個`行內代碼塊`
這是一個行內代碼塊的反引號`` ` ``
這是一個行內代碼塊的反斜線`\`
Extension: inline_code_attributes
與代碼塊一樣,行內代碼塊后寫可以添加屬性,形式如下:
`行內代碼塊`{ #identifier .class key=value }
HTML代碼
Extension: raw_html
可以直接在文檔中插入HTML代碼(除了代碼塊等<
, >
和&
符不會被翻譯的地方之外)
Extension: markdown_in_html_blocks
使用markdown_strict
格式的時候,HTML代碼中的Markdown語法不會被翻譯,
但是使用Pandoc的Markdown格式markdown
格式時,HTML代碼中的Markdown語法也會被翻譯,
但是有一個例外,HTML代碼<script>
和<style>
標簽中的Markdown語法也不會被翻譯
鏈接
如果用尖括號包裹一個URL或email地址,就會輸出一個鏈接:
<http://google.com>
<sam@green.eggs.ham>
行內鏈接
行內鏈接文本由方括號[]
包裹,其后跟URL鏈接用圓括號()
包裹,
圓括號內的URL后可以用雙引號"
包裹一串字符串作為鏈接標題,
這是 [行內鏈接](鏈接地址), 並且這是 [一個
帶有標題的行內鏈接](http://fsf.org "鏈接標題,鼠標懸停時顯示")
Email的鏈接地址應該跟在mailto
后面
[給我郵件哦~~](mailto:sam@green.eggs.ham)
引用鏈接
顯示引用鏈接包含鏈接和鏈接定義兩部分,
鏈接定義可以出現在文檔其他部分,鏈接之前或之后皆可
鏈接由方括號[]
包裹的連接文本和由方括號[]
包裹的連接標簽組成
[鏈接文本1][Label1]
[鏈接文本2][Label2]
鏈接定義由方括號[]
包裹的鏈接標簽、冒號、空格和
鏈接地址(可以用尖括號<>
包裹)組成,
其后還可以跟空格+鏈接標題,由單引號'
, "
或圓括號()
包裹
[Label1]: http://www.baidu.com "百度一下"
[Label2]: http://www.google.com
"谷歌一下"
注: 鏈接標簽不區分大小寫
隱式引用連接鏈接中的連接標簽部分為空,
而鏈接定義中的鏈接標簽由鏈接文本替換
詳情見[官方網站][]
[官方網站]: http://guanfangwangzhan.com
Extension: shortcut_reference_links
隱式引用鏈接中的空方括號[]
可以忽略
內部鏈接
可以使用identifier來鏈接到文檔中的其他章節,
鏈接地址形如#identifier
見[標題](#標題)
見[標題]
[標題]: #標題
圖片
如果鏈接前添加!
,鏈接則會被作為圖片處理,
而鏈接文本則會被作為圖片的alt
屬性處理

Extension: implicit_figures
若是圖片作為一個獨自的段落存在,則圖片的連接文本會被當做標題處理

但若是想要將圖片作為一般的行內圖片處理,只需確保圖片不是當前行的唯一內容即可,
比如在行末添加一個反斜線
\
Extension: link_attributes
鏈接或圖片后可以像其他元素一樣添加屬性
{ #identifier .class key=value }
行內圖片 { #id .class width=20 }
和一個帶屬性的[引用鏈接]
[引用鏈接]: http://www.baidu.com "百度一下" { #id2 .class key=value }
腳注
Extension: footnotes
Here is a footnote reference,[^1] and another.[^longnote]
[^1]: Here is the footnote.
[^longnote]: Here's one with multiple blocks.
Subsequent paragraphs are indented to show that they
belong to the previous footnote.
{ some.code }
The whole paragraph can be indented, or just the first
line. In this way, multi-paragraph footnotes work like
multi-paragraph list items.
This paragraph won't be part of the note, because it
isn't indented.
腳注的identifier不可包含空格,tab或換行,
在輸出中腳注會按照順序編號,如上例中的[^longnote]
會被編號2
,
腳注雖不必一定放在文檔的末尾,但也不可以出現在其他的區塊中(如列表、塊引用、表格等)