Markdown學習筆記(7)

Markdown學習筆記(7)

來自專欄 田宇軒編程的地方

Warning:本文章是使用知乎的導入功能由Markdown文檔導入到知乎的,因此排版有一些問題。我們建議你先去這裡查看本篇文章內容

本章目標

在上一篇文章里,我們已經全面地了解了Markdown容器文本塊的標記。我們將用兩篇文章討論Markdown中一些內聯結構的寫法。


1. 內聯解析順序

Markdown文本的內聯解析的順序是從左到右的,即從字元流的開始到結尾,順序進行分析。因此,下面的例子:

`hi`lo`

效果是這樣的:hilo`

在這裡,hi被解析為代碼文本。

2. 轉義

Markdown的轉義符號是,和主流編程語言不同的是,這個符號可以被加在任何ASCII符號文本的前面,代表一種轉義。如果被加在非Markdown特殊符號的前面,效果和沒加這個符號是一致的。

例子:

!"#$\%&\()*+,-./:;<=>?@[\]^\_`{|}~

效果:

!"#$%&()*+,-./:;<=>?@[]^_`{|}~

上述例子外的其他字元前加,只表示一個。你也可以在一行的行尾加來表示換行:

fooar

效果:

foo

bar

不過,反斜杠轉義在代碼塊、自動鏈接或原始HTML這些文本中不起作用。

3. 實體和數符引用

實體引用由&符號機上任何有效的HTML5實體名稱再加;符號組成。這個文檔里定義了這些實體。

Markdown支持直接在文本中寫這些實體引用,效果會正像你期待的一樣被顯示出來。

只要實體引用的位置不在URL、鏈接、標題和圍欄代碼塊中,這些實體就可以發揮作用。

Markdown還有把一些8進位或者16進位數字轉換成對應的Unicode碼點字元的功能。對於8進位數字,可以這麼使用:&#數字;。對於16進位數字,可以這麼使用:&#X數字;。X也可以小寫。

例子:&#XD06;

效果:?

4. 內聯代碼塊

內聯代碼塊是指一行內,一個字元串前後都有一個或多個`標識。這個字元串的內容就被視為內聯代碼塊。在內聯代碼塊里,換行符將會被視為空格。內聯代碼塊里的轉義符號是無效的。

一個內聯代碼塊里可以用多個`標識開始,也可以用多個反引號結束,但開始和結束所用的符號數量必須是相同的。

例子:``abc``

效果:abc

5. 強調和斜體

John Gruber在Markdown語法描述中提到:Markdown將星號*和下劃線_作為重點指標。如果Markdown文本前後出現一個*_,這段文本將會被HTML的<em>標籤包裝 ;如果Markdown文本前後出現兩個*_, 這段文本將會被HTML的<strong>標籤包裝。

這裡有幾點需要注意:

1. 開頭的*或者_符號後面的第一個字元不能為空格。

2. 當開頭的*或者_符號前有字母/數字,後有符號的時候,這段文本不被視為強調或者斜體。

3. 強調或者斜體標記符包括的文本可以包括空白,但多個連續的空白只將會被視為一個。

4. 開頭和結尾的標記必須一致。

5. 關閉標識前一個字元不得為空格。

6. 強調和斜體符號不能嵌套。

CommonMark對於強調和斜體上規定了很多很嚴格而且繁瑣的規則,以致於CommonMark.NET和CommonMark.js都沒有很嚴格的支持這些內容。因此我們建議大家可以在這裡忽略CommonMark的規則。

6. 鏈接概述

在markdown中,鏈接是一個複雜的話題,因為它有許多種類。因此我們按照類型把它分為內聯鏈接、完整參考鏈接、摺疊參考鏈接、快速參考鏈接和自動鏈接五個部分進行討論。

鏈接包含鏈接文本(可見的文本),鏈接目標 (鏈接目標的URL)以及可選的鏈接標題。Markdown中有兩種基本類型的鏈接。一種通過內嵌的方式在鏈接文本後立即給出URL;另一種是參考鏈接,其鏈接目標和鏈接標題在文檔的其他地方定義。

鏈接文本內容由[]包括起來,鏈接文本有幾個要求:

1. 鏈接文本不能包含其他鏈接,在任何層次上的嵌套。如果多個有效的鏈接定義相互嵌套,則使用最內層的定義。

2. 內聯代碼,自動鏈接和HTML標籤的解釋優先順序高於鏈接文本。

3. 鏈接文本解釋上的優先順序高於強調和斜體標記。

鏈接目標有幾個要求:

1. 鏈接目標可以是<>符號之間的一系列(0個或者多個字元)的非空白字元(字元也不能包含換行符或者<>)。

2. 鏈接目標也可以是一個非空字元序列(不能包含空白或者ASCII控制字元或者括弧)。括弧只能出現在轉義字元後面。

鏈接標題有幾個要求:

1. 標題內容可以用或者"包括起來。

2. 標題內容文本可以包括多行內容,但中間不能有空行。

7. 內聯鏈接

內聯的鏈接由剛才我們說的鏈接文本開頭,後面需要緊跟著一個左小括弧((也就是說它們之間不允許有空格),小括弧後面有可選的空白,空白後面需要接鏈接目標(也就是URL,其中不得包含空白。鏈接目標文本也是可選的),再接一個由空白使其與鏈接目標分開的、被雙引號包括起來的鏈接標題(可選),再接一個可選的空白,最後是一個右小括弧)。

7.1 阻止轉義標記

如果鏈接文本(URL)被<>包括起來,那麼文本中的反斜杠符號是有效的,<>里的所有文本都將不會被轉義(所以如果你不想要鏈接文本中的某些括弧被當作內聯鏈接中的一部分被匹配,你可以使用<>把URL內容包括起來)。

7.2 鏈接標題的不同寫法

鏈接標題可以被上述的雙引號包括起來,還可以被單引號和括弧包括起來,那仍是合法的標題。

例子:[link](www.baidu.com (title text))

效果:link

當你的滑鼠指針移至link上的時候,你會看到title text,這就是鏈接標題。

7.3 鏈接目標文本的限制

對於一個鏈接目標文本,它可以被當作是URL的一部分的小括弧而存在,前提是文本里的小括弧必須是成對的——通俗一點說,就是有幾個(,URL里就要有幾個)(對應。否則URL將被小括弧截斷匹配。如果你想要填寫的URL確實含有不成對的小括弧,建議你使用<>。另外,鏈接文本也不能嵌套使用。

7.4 鏈接文本中可以包含樣式

在最前面的,被[]包括起來的部分里,可以加入Markdown樣式。

例子:[**A**_B_](www.zhihu.com)

效果:AB

可以看到,A變成了粗體而B變成了斜體。

Have A Break

至此,我們只剩下Markdown中的三種參考式鏈接、自動鏈接、插入圖片、原始HTML內容、硬軟換行和一些簡單的內容和規範沒有梳理了。如果你從Markdown Tutorial的第一部分看到這裡,你幾乎已經是半個手拿CommonMark法典的語言律師了!恭喜你,同時,這也意味著很快我們對Markdown語法各種細節和規定的討論也要到尾聲了。很快我們就會補全Markdown拼圖的最後一塊了,敬請期待吧。

稍作休息,我們在下篇文章再見。


推薦閱讀:

我用 Markdown,所以顯得很酷嗎?
Markdown 小白入門實用指南
Markdown,一款不用排版寫文工具
Markdown 完全入門(下)

TAG:Markdown | Markdown語法 |