Pandoc中的Markdown語法


概述

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的順序如下:

  1. 移除格式、連接等
  2. 移除腳注(footnotes)
  3. 移除除了下划線_和連接符-之外的標點符號
  4. 用連接符-替換所有空格和換行符
  5. 將所有字母轉換成小寫
  6. identifier不能以數字和標點符號開頭
  7. 如果文本此時為空,則取section做標識符

如果自動生成的標識符相同則根據順序在標識符后添加-1-2

Extension: implicit_header_references

Pandoc默認每個標題都定義了引用鏈接,故對於標題# 標題1
可以使用[標題1]或者[標題1][]引用,注意,引用鏈接是區分大小寫的

塊引用

塊引用是指一個或多個段落或其他塊元素(如列表或標題),每一行以一個>符號和一個可選的空格開頭
>符號並不需要在行首,但是不可縮進超過三個空格)

> 塊引用
> 段落
> 
> 1. 列表1
> 2. 列表2 

塊引用並不是每一行都需要以> 符號開頭,只需在每一個區域的首行添加> 即可,
如下文本和上述的文本有相同的效果

> 塊引用
段落

> 1. 列表1
2. 列表2 

  1. 塊引用可以嵌套使用
  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_tablespipe_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

隱式引用鏈接中的空方括號[]可以忽略

內部鏈接

可以使用identifier來鏈接到文檔中的其他章節,
鏈接地址形如#identifier

見[標題](#標題)

見[標題]
[標題]: #標題

圖片

如果鏈接前添加!,鏈接則會被作為圖片處理,
而鏈接文本則會被作為圖片的alt屬性處理

![月亮](月亮.jpg "十五的月亮")

Extension: implicit_figures

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

![這是標題](圖片地址.png)

但若是想要將圖片作為一般的行內圖片處理,只需確保圖片不是當前行的唯一內容即可,
比如在行末添加一個反斜線

![這個就不是標題了~~](圖片地址.png)\

鏈接或圖片后可以像其他元素一樣添加屬性
{ #identifier .class key=value }

行內圖片 ![圖片](地址.png){ #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
腳注雖不必一定放在文檔的末尾,但也不可以出現在其他的區塊中(如列表、塊引用、表格等)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM