Markdown 标记语言

关于 Markdown:

  • Markdown 是一种轻量级标记语言。2004年由John Gruber创建。
  • Markdown 编写的文档可以导出 HTML、Word、图像、PDF、Epub 等多种格式的文档。
  • Markdown 编写的文档后缀为.md.markdown

一、Markdown 标题

Markdown 标题有两种格式。

1、类 Setext 式:

底线形式,使用任意数量连续=-

  • 虽然可以用任意数量,但是如果小于等于 2 个,部分编译器可能会无法触发语法高亮。
  • 部分编译器渲染标题时,会加上一条分隔线。
  • =- 必须 连续 (中间不能有空格),必须 独占一行 (后面不能出现非空格字符,但可以有空格字符)。
任意数量连续的 = 标记上面一行为一级标题
===
任意数量连续的 - 标记上面一行为二级标题
---

上述代码显示效果如下:

任意数量连续的 = 标记上面一行为一级标题

任意数量连续的 - 标记上面一行为二级标题

2、类 atx 式:

在行首加 1 到 6 个 # (后加一个空格,然后写标题内容)分别表示 1 到 6 级标题。(可以在标题之后再加一个空格,写任意数量的 # 闭合该样式)

# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
### 可以用等量 # 闭合 ###
### 也可以用不等量 # 闭合 #

上述代码显示效果如下:

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

可以用等量 # 闭合

也可以用不等量 # 闭合

二、Markdown 段落格式

  • Markdown 语言的段落由前后空行分割。 有的语法样式虽然不需要严格的空行分割也能被识别,但是强烈建议在所有的段落前后空行,以减少语法特例的记忆量,保证输出样式和预计一致。(这个思路就和编程时,使用括号来减轻运算符优先级记忆)。
  • 在段落中换行不会显示为换行,会显示为一个空格。
  • 段落内的换行是使用 两个以上空格加上回车 (仍属于同一段落,表示在段落内换行)。
一、源文件中直接输入回车
会显示为一行。(回车会显示为 1 个空格)属于同一段落

二、源文件中空一行

会显示为两行,且中间有一个空行。(其实变成两个段落了)

三、源文件中给,第一行后有 2 个 Space  
然后换行会显示为中间无空行的两行。(但仍属于同一个段落)

显示为:

一、源文件中直接输入回车
会显示为一行。(回车会显示为 1 个空格)属于同一段落

二、源文件中空一行

会显示为两行,且中间有一个空行。(其实变成两个段落了)

三、源文件中给,第一行后有 2 个 Space
然后换行会显示为中间无空行的两行。(但仍属于同一个段落)

字体

  • 使用一对 *_ 包围的内容会显示为斜体。
  • 使用一对双星号 ** 或双下划线 __ 包围的内容会显示为加粗。
  • 注意, *_ 前后都有 Space 时,会被识别为普通符号,原样输出。
  • 加粗和斜体可以嵌套使用。
  • 注意,不同平台(如Sublime)使用下划线 _ 或 `` 时,如果 _紧跟 前面的文字或被文字紧紧包围,可能会出现原样输出的情况;如果紧跟着前面的 Space 或 其他符号,则正常输出样式。
`_` 前后都有空格 _ 原样输出 _  
`*` 前后都有空格 * 原样输出 * 

*斜体文字*  
_斜体文字_  
**粗体文字**  
__粗体文字__  

> 关于 `_` 的演示:
> 第一个是紧跟文字的_斜体_  
> 第二个是紧跟空格的 _斜体_  
> 第三个是紧跟非文字符号的=_斜体_

> 嵌套使用:
> ***粗斜体文字***  
> ___粗斜体文字___  
> *倾斜 __加粗__*  
> _倾斜**加粗**_

上述代码显示效果如下:

_ 前后都有空格 _ 原样输出 _
* 前后都有空格 * 原样输出 *

斜体文字
斜体文字
粗体文字
粗体文字

关于 _ 的演示:
第一个是紧跟文字的斜体
第二个是紧跟空格的 斜体
第三个是紧跟非文字符号的=斜体

嵌套使用:

粗斜体文字
粗斜体文字
倾斜 加粗
倾斜加粗

分隔线

  • 在一行中使用三个以上的 * - _ 来建立一个分隔线。注意,只能使用其中一个符号,中间可以有空格,但该行只能有选中的的符号,不能有其他符号。
  • Markdown 标题可知,--- 可表示上一行的内容是二级标题,为避免歧义,使用 --- 表示分隔线时要注意上一行为空行。
  • 分隔线前后不需要空行也可以把分隔线上下的内容分割成两个段落。
***
* * *

---
- - -
___
_ _ _
*-_

上述代码显示效果如下:







*-_

删除线

使用一对双波浪线 ~~ 包围需要添加删除线的文字。

mdeditor.com  
~~mdeditor.com~~

上述代码显示效果如下:

mdeditor.com
mdeditor.com

下划线

通过 HTML 中的 <u></u> 标签来实现。

<u>需添加下划线的文字</u>

上述代码显示效果如下:

需添加下划线的文字

脚注

脚注是对文本的补充说明。

这句话最后是一个脚注[^脚注]。
[^脚注]:这是一个脚注,补充说明关于[^脚注]的相关信息。在文章最后显示。

上述代码显示效果如下:

这句话最后是一个脚注[^脚注]。
[^脚注]:这是一个脚注,补充说明关于[^脚注]的相关信息。在文章最后显示。

三、Markdown 区块引用

  • Markdown 区块引用是在段落开头使用 > 符号,然后后面紧跟一个空格符号。
  • 引用符号之后使用一次 Tab 和不使用的显示效果一样。(>之后最多三个 Space 不会影响显示效果)
  • 引用中可以使用其他样式,引用中也可以嵌套引用。
  • 区块可以嵌套,一个 > 是最外层(一级引用),两个 >> 是第一层嵌套(二级引用),以此类推。
  • 为了二级引用段落前后最好使用一级引用空行来标识二级引用的开始和结束。
> 区块引用,最外层
>
>> 二级引用 start  
>> 第一层嵌套
>> 
>>> 第二层嵌套  
>> 
>> 二级引用 end
>
> 开始回到一级引用

上述代码显示效果如下:

区块引用,最外层

二级引用 start
第一层嵌套

第二层嵌套

二级引用 end

开始回到一级引用

四、Markdown 代码

行内代码

  • 段落上的一个函数或代码片段可以用反引号 `包起来。
  • 如果代码中也含有反引号 `,可以使用双反引号来标识代码的开始和结束,以此类推。
`printf()`函数
``a = `string` ``

上述代码显示效果如下:

printf()函数
a = `string`

代码区块

代码区块会原样输出区块中的非空白符号 & 空白符号。

  1. 缩进式代码区块:
    使用4个空格或者一个制表符(Tab键)。

     <?php
     echo 'test';
     function test() {
         echo 'test.'
     }
  2. 围栏式代码区块:
    使用一对 ```(连续三个反引号)包裹一段代码并指定一种语言(也可以不指定)。(不能输出作为开始结束标志的```

    $(document).ready(function () {
     alert('RUNOOB');
    });

    上述代码显示效果如下:

    $(document).ready(function () {
        alert('RUNOOB');
    });

五、Markdown 链接

  • 行内式链接: [链接名称](链接地址 "title")
  • 自动链接: <链接地址>
  • 链接地址可以是 网络地址主机的相对地址
  • title表示鼠标悬停在连接名称上时能看到的内容,可省略不写。
这是一个使用链接名称的链接[菜鸟教程](https://www.runoob.com "菜鸟教程")  
这是一个直接使用地址的链接<https://www.mdeditor.com>

上述代码显示效果如下:
这是一个使用链接名称的链接菜鸟教程
这是一个直接使用地址的链接https://www.mdeditor.com

高级链接

参考式链接: 使用 [] 包围一个变量,用该变量来代替链接地址,文档末尾再把实际链接地址赋值给该变量。

这个链接用1作为链接地址的变量,[百度][1]  
这个链接用runoob作为连接地址的变量,[Runoob][runoob]  
**变量的赋值并不会在文档中显示。并且变量的赋值和变量的引用一起放在同一个区块中时,会使链接中变量的引用失效。所以不能将变量的赋值放在区块中。**  
[1]:https://www.baidu.com  
[runoob]:https://www.runoob.com

上述代码显示效果如下:

这个链接用1作为链接地址的变量,[百度][1]
这个链接用runoob作为连接地址的变量,[Runoob][runoob]
有些情况,变量的赋值并不会在文档中显示。并且变量的赋值和变量的引用一起放在同一个区块中时,会使链接中变量的引用失效。所以不能将变量的赋值放在区块中。(如使用Sublime时)
[1]:https://www.baidu.com
[runoob]:https://www.runoob.com

六、Markdown 图片

Markdown 图片的格式如下:![alt 属性文本](图片地址 "可选标题")

  • alt 属性表示 Markdown 转化为 HTML 文档时,引入图片的 alt 属性的值。
  • 可选标题可以不写。
  • 图片地址可以使用变量(参考高级链接)。
  • Markdown 不能指定图片的宽高。如需指定宽高,可以使用标签。
这是百度的图标 ![baidu logo](https://uploadfiles.nowcoder.com/files/20200108/206222008_1578466371100_baidu_jgylogo3.gif)

上述代码显示效果如下:

这是百度的图标 baidu logo

七、Markdown 列表

  • Markdown 支持有序列表和无序列表。
  • 如果一行被标记为 列表项 ,那么不论这行之前有没有空行,本行和上一行都被视为两个 段落
  • 如果本行列表项的下一行不是 空行 或者 列表项 ,则本行与下一行仍属于同一段落。
  • 关于缩进的容忍度:
    • 行首如果由大于等于 4 个 Space ,本行被视为代码段落。代码段落会原样输出所有符号。
    • 标题标记、列表标记符号之后除了必须的那一个 Space ,如果还有大于等于 4 个 Space,那么标记的格式会失效,认为是后接了一个代码段落。

无序列表

*+- 在行首表示无序列表,在这些符号之后应该空一格然后输入内容。
无序列表嵌套时,建议对同一级别使用相同符号,便于理解。

* 第一项
* 第二项
* 第三项

+ 第一项
+ 第二项
+ 第三项

- 第一项
- 第二项
- 第三项

> 不推荐以下写法:  
> 
> * 第一项
> + 第二项
> - 第三项

上述代码显示效果如下:

  • 第一项

  • 第二项

  • 第三项

  • 第一项

  • 第二项

  • 第三项

  • 第一项

  • 第二项

  • 第三项

不推荐以下写法:

  • 第一项
  • 第二项
  • 第三项

有序列表

  • 有序列表使用数字加上 . 来表示,并且应该在 . 之后空一格再写内容。
  • 有序列表渲染时会自动纠正列表序号。
1. 第一项
2. 第二项
5. 第三项

上述代码显示效果如下:

  1. 第一项
  2. 第二项
  3. 第三项

列表嵌套

  • 列表嵌套只需要下级列表比上级列表多缩进四个空格(一个Tab键)即可。
  • 有序列表嵌套无序列表时,如果不缩进会被解释为有序列表项下的普通文本。
  • 两个列表不嵌套时,不能缩进,且空一行。
1. 第一项1:
    - 第一项嵌套的第一个元素1.1
        + 1.1.1
        + 1.1.2
    - 第一项嵌套的第二个元素1.2
2. 第二项2:
    - 第二项嵌套的第一个元素2.1
    - 第二项嵌套的第二个元素2.2

上述代码显示效果如下:

  1. 第一项1:
    • 第一项嵌套的第一个元素1.1
      • 1.1.1
      • 1.1.2
    • 第一项嵌套的第二个元素1.2
  2. 第二项2:
    • 第二项嵌套的第一个元素2.1
    • 第二项嵌套的第二个元素2.2

八、Markdown 表格

Markdown 制作表格使用 | 来分隔不同的单元格,使用 - 来分割表头和其他行。语法格式如下:

  • 同一张表格,一行的列数(单元格数)应该相同(没有内容也要用空单元格凑)。
  • 表格的第二行被用来分割表头和普通单元格,这一行每个单元格都需要填写大于等于 3 个 -
  • 不同行之间用 Enter 分隔(不需要双空格)。
|  表头   | 表头  |
|  ----  | ----  |
| 单元格  | 单元格 |
| 单元格  | 单元格 |

上述代码显示效果如下:

表头 表头
单元格 单元格
单元格 单元格

设置 Markdown 表格的对齐方式:

  • :- 设置内容和标题栏居左对齐(无 : 时,默认左对齐)
  • :-: 设置内容和标题栏居中对齐
  • -: 设置内容和标题栏居右对齐
| 左对齐 | 居中对齐 | 右对齐|
| :---- |  :----: |  ----: |
| 左单元格 | 中单元格  | 右单元格 |
| 单元格 | 单元格  | 单元格 |

上述代码显示效果如下:

左对齐 居中对齐 右对齐
左单元格 中单元格 右单元格
单元格 单元格 单元格

九、Markdown 高级技巧

支持 HTML 元素

不在 Markdown 涵盖范围之内的标签,都可以直接在文档中使用 HTML 撰写。
目前支持的 HTML 元素有: <kbd> <b> <i> <em> <sup> <sub> <br> 等。(使用
标签可以实现表格内容的换行
)

使用 <kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>Del</kbd> 重启电脑。

上述代码显示效果如下:

使用 <kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>Del</kbd> 重启电脑。

转义

Markdown 使用 反斜杠 转义特殊字符。

Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:
\   反斜线
`   反引号
*   星号
_   下划线
{}  花括号
[]  方括号
()  小括号
#   井字号
+   加号
-   减号
.   英文句点
!   感叹号
*转义前,一对单星号包围表示斜体字*  
\*转移后,显示出星号,字体正常\*

上述代码显示效果如下:

转义前,一对单星号包围表示斜体字
*转移后,显示出星号,字体正常*

公式

插入数学公式时,可以用两个美元符 $$ 包裹 TeX 或 LaTeX 格式的数学公式来实现。

其他

  1. 计算机文件:计算机中的文件都是以 二进制 保存。所有文件本质上都是二进制代码,只是由不同的 解释器 (一种翻译程序)打开,二进制代码会被赋予不同的含义。例如文本文档或者图片。由于文本文档可以没有复杂的文件头,每一个字符对应8位(一个字节)或者8的倍数位二进制数。所以从这个角度上任何文件都可以作为文本文档打开。文本文档是最基本的文件形式,我们可以在它的基础上写出图片、声音甚至可执行文件。

  2. 标记语言

    • 一般的书面信息有两个组成要素 —— 内容 & 格式。一般而言我们更看重内容,但其实格式内容同样携带有信息。所以一个富有格式的文档的信息量要比有同样内容但是没有格式的文档信息量大。
    • 为了统一 二进制数 & 常用字符 的对应关系,出现了ASCII编码之类的编码标准。
    • 如果为了表现新格式而约定额外的符号,那么键盘会因此变得越来越复杂,最后超出人所能控制的范围。
    • 标记语言仅用一套字符集,既表示实意也表示格式。它不会添加新的格式控制符号,而是使用一些预先定义好的约定,用一些特定字符串来标记格式。如:SGML、XML(Office中的docx、xlsx、pptx都基于XML)、HTML、Markdown等。
  3. 常见标记语言简述

    • SGML 是一种古老的标记语言,又大又复杂。
    • XML 是作为 SGML 的替代品而设计的。它力图使 SGML 更简单易用。本身被用于 GUI 描述、数据库等领域,还有大量基于它定义的标记语言。
    • HTML 本来是 SGML 的一个子集,主要用于描述网页内容和格式。
    • TeX 是一款又大又全的标记语言,是一款排版专用的标记语言,尤其擅长处理各种复杂格式的数学式。
  4. 空白符 & 段落

    • Markdown 中常用的空白符包括 Space 、 Tab 、 Enter 。

      • Space(空格)和 Tab(水平制表)都有对应的 ASCII 码。
      • Enter 的处理比较麻烦,不同系统会有不同的方法。具体到不同的系统 Enter 对应的 ASCII 码不同。
    • 一个 Tab 等于最多4个 Space 。

    • Markdown 中,不论多少个连续的 Space 或 Tab 或 Enter ,一般渲染后只显示一个空格(不会有换行效果)。

      a b  c   d    e
      f

      显示为:

      a b c d e
      f

    • 如果要显示换行需要在上一行的结尾处打 2 个 Space 加 1 个 Enter 。(仍属于同一段落)

      这句话的最后空了有个 2 个 Space 和 1 个 Enter。  
      这是下一句话。

      显示为:

      这句话的最后空了有个 2 个 Space 和 1 个 Enter。
      这是下一句话。

    • 如果两行文字之间存在一个或多个空行那么这些空行渲染后会显示(不论上一行末尾有没有双 Space)。

      • Maekdown 中的空行不仅有 Enter。 一行除了开头的 Enter ,仅有任意个 Space 或 Tab 也算空行。
    • 不论源代码两行文字之间有多少空行,最终只显示为一个空行。

      下一行有一个 Enter。 
      
      下一行**仅**有一个 Space。
      
      下一行**仅**有一个 Tab。
      
      endline

      显示为:

      下一行有三个 Enter。

      下一行有一个 Space。

      下一行有一个 Tab。

      endline

  5. 字符

    • ASCII 十六进制编码为 21 到 7E 的字符也可以直接用于 md 文档(ASCII码对照表)。
      &#65; &#66; &#67; &#68;
      显示为:

      A B C D

    • md 源代码本质上就是一个改了后缀名的文本文档。因此,如果使用 Unicode(UTF-16)或者 UTF-8 保存文本,那么非 ASCII 字符也可以用于 md 文档中。
  6. 页内跳转:
    直接嵌入 HTML 语法,设置锚点,通过链接跳转到本页的指定位置。

     文章开头的标题结构如下:
     <span id="锚点名称">Markdown 标记语言</span>
    
     则跳转代码如下:
     [点击跳转到标题](#锚点名称)    

    点击跳转到目录