Markdown語法

1 簡介
Markdown是一種輕量級標記語言,語法簡單排版簡潔,高度自由,可移植性強且不必擔心版本兼容問題。它使用易讀易寫的純文本格式編寫文檔,可與HTML混編,可導出 HTML、PDF、Word以及本身的 .md 格式文件等等。由于John Gruber的原始設(shè)計文檔中概述的基本語法主要是為了應(yīng)付大多數(shù)情況下的日常所需,無法滿足一些專業(yè)領(lǐng)域的需求(圖表、公式、流程圖等),一些個人和組織開始通過添加其他元素(例如表,代碼塊,語法突出顯示,URL自動鏈接)來擴展基本語法,這類語法被稱為擴展語法。擴展語法因Markdown應(yīng)用程序的不同而各異,本章側(cè)重于 Typora 的擴展語法介紹。

2?基本規(guī)范
2.1 標題
在字段前面添加井號(
#
)來創(chuàng)建標題 。"#" 的數(shù)量代表了標題的級別,標題共有一到六級。
不同的Markdown應(yīng)用程序處理 "#" 與標題之間的空格方式并不一致。為兼容考慮,在 "#" 和標題之間應(yīng)插入一個空格。 ?
標題字段末尾空一格鍵入任意數(shù)量的 "#" 對標題無影響。
對于一、二級標題,除了用 "#" 標識外還可在標題字段下方添加至少三個等號(
=
)或減號(-
)以標識一級標題或二級標題。

2.2 段落
要創(chuàng)建段落,應(yīng)使用一行空白行將上下兩段進行分隔(<p>...</p>)。若不空行則生成換行(<br/>)。
段首開頭不建議進行縮進。Markdown的段落段首不能有超過一個空白字符(空格、制表符等)。若段落開頭有超過四個空格或制表符,該行文本會被生成代碼塊(<pre><code>...</code></pre>)而非段落(<p>...</p>)。(空格的具體后果因Markdown應(yīng)用程序的不同而各異)

2.3 換行
在行末添加兩個或多個空格,然后鍵入回車,即可在不產(chǎn)生新段落的情況下創(chuàng)建換行(
<br/>
)。在行末添加換行標簽(
<br/>
)亦可換行。還有兩種大多數(shù)編輯器都不支持的方案:第一,結(jié)尾用反斜杠(
\
)換行;第二,直接鍵入回車換行。
2.4 強調(diào)
2.4.1 粗體
在字段前后各添加兩個星號(
*
)或兩個下劃線(_
)以標識該字段被設(shè)為粗體。不同的Markdown 應(yīng)用程序在處理單詞或短語中間的下劃線上并不一致。為兼容考慮,請使用星號。

2.4.2 斜體
在字段前各后添加一個星號或一個下劃線以標識該字段被設(shè)為斜體。同樣,為兼容考慮,請使用星號。

2.4.3?粗體加斜體

盡管能夠任意組合,但仍然建議交替使用。
2.4.4 刪除線
在字段前各后添加兩個位取反運算符(~
)以標識該字段被添加刪除線(<s>...</s>
)。

2.4.5?下劃線
用HTML標簽(<u>...</u>
)設(shè)置字段的下劃線。

2.5 引用
在一行前添加一個右小于號(
>
)以標識此行內(nèi)容被設(shè)為引用(<blockquote>
)。
在段落的首行前添加 ">" 則無論該段其他行前是否有 ">" 這一整段均會被設(shè)為引用。
因此為避免后文也被引用,須空一行再寫后文(段落之間本來就有空行)。引用可以包含多個段落,在空行前面也加上小于號,將各段連起來即可。
嵌套塊引用
連續(xù) n 個 ">" 一塊寫代表 n-1 層嵌套引用
。

2.6 列表
2.6.1 有序列表
在每個列表項前添加數(shù)字并緊跟一個 英文句號(
.
) 或 ")
",并用一個空格與之間隔。
為兼容考慮,請使用英文句號。前綴的數(shù)字不必按順序排列,最終生成的列表的編號和數(shù)字沒有絕對關(guān)系,
無論怎樣編寫,結(jié)果總是從首項的數(shù)字開始向下依次增加。

2.6.2 無序列表
在每個列表項前面添加星號(
*
)或減號(-
)或加號(+
),并用一個空格與之間隔。 ?盡管 "*", "+", "-" 可以混合使用,但仍然建議一表只用一種,從一而終。

2.6.3 任務(wù)列表
在無序列表項的前綴與列表項之間插入 "[ ]
" or "[x]
" 標識該字段未被選中或已選,且與列表項的前綴和列表項之間都間隔一個空格。

2.6.4?在列表中嵌套元素
幾乎所有的元素都可用于嵌套,這里僅舉幾例。

2.7 代碼
行內(nèi)代碼:在代碼塊的兩端分別加上至少一個反引號(
`
),且前后數(shù)目須一致。
若代碼內(nèi)也包含了連續(xù) n 個反引號,則外層用 n+1 個反引號來框定,且代碼中的反引號與用于框定的反引號之間必須有字符相隔。 ?將文本的每一行縮進至少四個空格或一個制表符,這些文本會變成代碼塊。 ?
圍欄代碼:在代碼塊的首尾兩端分別加上至少三個反引號或波浪號(
~
),且前后數(shù)目須一致,首端符號末還應(yīng)加上代碼塊的編程語言。
其也支持嵌套:"`" or "~" 個數(shù)多的在外層,最內(nèi)層為個數(shù)3。(此項因Markdown應(yīng)用程序的不同而各異)

2.8 分隔線
一行只存在連續(xù)三個或以上星號(
*
)或減號(-
)或下劃線(_
)會被生成分隔線(<hr/>
)。 ?"*", "+", "-" 不能混合使用。
在使用分隔線時應(yīng)分別與上下文空一行空行(避免減號與上文形成二級標題,亦使代碼更簡潔)。

2.9 鏈接
構(gòu)成:
[顯示名](鏈接地址 "鏈接標簽")
,標簽可選(可放在雙引號或單引號或括號中)。
對應(yīng)的HTML代碼:<a href="鏈接地址" title="鏈接標簽">顯示名</a>
。無標簽鏈接:
<鏈接地址>
?鏈接的格式化
鏈接地址可為 URL or 郵箱地址 or 文件地址等等。
即使單獨寫出鏈接地址,一些Markdown應(yīng)用程序仍會自動解析代碼中的鏈接并生成無標簽鏈接。
如果不希望自動轉(zhuǎn)換可將其寫成行內(nèi)代碼的形式。

內(nèi)部鏈接:將
href
設(shè)置為文檔內(nèi)的某一個標題,這將創(chuàng)建一個書簽,允許您在單擊后跳轉(zhuǎn)到該部分。Html格式:
<a href=#標題>顯示名</a>
(標題里的空格要替換為減號)
Markdown:[顯示名](#標題)
參考鏈接:
[標識符][id]
(兩個中擴號間可有一個空格)在任意位置寫[id]: 地址 or 標簽
(冒號后有空格)隱式鏈接名稱的快捷方式:在鏈接處寫標識符后跟一個空的方括號,此時鏈接本身將用為標識
[標識符][]
然后再任意位置寫[標識符]: 標簽或地址
(冒號后有空格)(注:因為錨點的定義為
#?名字
,顯然與標題沖突,因而書簽只能用于跳轉(zhuǎn)到標題。
或者用<a name="target"></a>
來定義錨點來錨定圖片段落等,但一些Markdown應(yīng)用程序不兼容非標題元素的錨點。)
2.10 插入圖片
在鏈接的格式前加上感嘆號(!
)然后將鏈接地址換成圖片地址即可,亦可帶上標簽。

2.11 轉(zhuǎn)義字符
要顯示原本用于格式化 Markdown 文檔的字符,請在字符前面添加反斜杠(
\
)進行轉(zhuǎn)義。 ?若文本中有HTML代碼,還應(yīng)考慮HTML的特殊字符的轉(zhuǎn)義。

2.12 內(nèi)嵌 HTML 標簽
對于 Markdown 涵蓋范圍之外的標簽,可以直接在文件里面用HTML標簽進行處理且無需要額外聲明。關(guān)于HTML的語法本章不做介紹。
2.13 注釋
因為Markdown支持內(nèi)嵌HTML,自然也就可以用<!--注釋內(nèi)容-->
的形式進行注釋。一些Markdown應(yīng)用程序還支持<?注釋內(nèi)容>
形式的注釋。
2.14 表格
使用豎線(
|
)來分隔不同的單元格,使用至少三個減號(-
)來分隔表頭和其他行,減號的多少依據(jù)單元格長度而定。 ?在減號兩端添加冒號(
:
)可控制內(nèi)容和標題對齊方式: ?:---:
?居中對齊:---
? 向左對齊---:
? 向右對齊

2.15 腳注
在需要腳注的地方添加腳注參考:
[^標識符]
(標識符可以是數(shù)字或單詞,但不能包含空格或制表符,標識符將腳注參考與腳注本身相關(guān)聯(lián))。在文中任意位置(建議于文末)添加腳注本身:
[^標識符]: 腳注內(nèi)容
。在導出為其他格式時,無論腳注本身是否在文末,都會被移至文末,并按腳注在文中出現(xiàn)的順序排序。

3 擴展語法
3.1 定義列表
一些Markdown應(yīng)用程序允許創(chuàng)建術(shù)語及其對應(yīng)定義的定義列表。要創(chuàng)建定義列表,則在第一行上鍵入術(shù)語。在下一行,鍵入一個冒號(:
),后跟一個空格和定義。

由于? Typora 不支持定義列表,此處展示的是在 Pycharm 中的渲染結(jié)果:

3.2 標題ID
許多Markdown處理器支持標題的自定義ID一些Markdown處理器會自動添加它們。
添加自定義ID允許您直接鏈接到標題(可使用CSS對其進行修改)。
格式:# Heading ?level n {#ID}
(花括號內(nèi)不應(yīng)有空格或制表符),對應(yīng)的HTML為<hn id="ID"> Heading level n</hn> n∈N,n∈[1,6]
不是所有的Markdown應(yīng)用程序都能以ID做錨點關(guān)聯(lián)書簽。
3.3 上標、下標與高亮
用三角號(
^
)需要上標的字段兩端包圍用波浪號(
~
)將需要下標的字段兩端包圍用等號(
=
)將需要高亮的字段兩端包圍

3.4 LaTeX公式
對于行內(nèi)公式(內(nèi)連輸出),只需用美元符號(
$
)將字段兩端包圍對于行間公式(塊狀輸出),則用連續(xù)兩個美元符號(
$$
)將字段首尾包圍公式用LaTeX書寫, 數(shù)學公式轉(zhuǎn)LaTeX:https://www.latexlive.com/ ?
本章不進行LaTeX語法介紹。

3.5 圖表
在圍欄代碼的格式上,將編程語言聲明為?mermaid?
即可得到一張空圖,在其中寫入Mermaid語言即可生成相應(yīng)的流程圖、甘特圖、時序圖、餅圖等。

3.6 Emoji表情
在Markdown里使用Emoji表情有兩種方法,一種是直接輸入Emoji表情,另一種是使用Emoji表情短碼(網(wǎng)上自查)。

4 附錄
筆者不建議將本章作為首次學習 Markdown 的教材,推薦各位按照本文章的結(jié)構(gòu)對知識進行梳理,以期溫故而知新。筆者水平有限,行文若有謬誤者歡迎指出交流。
2023/08/27 20:45:45