Markdown快速入门——笔记、分享、教程

前言

大家好呀,最近因为工作太忙好长时间都没更新了,不过再忙也不能忘了更新咱们的笔记呀。谈到记笔记或者文档编写,自然少不了我们大名鼎鼎的Markdown语法,使用Markdown能让你编写文章的效率成倍提高,而且它也是如今互联网大部分IT相关文档编写(如技术文档、博客、GitHub README文件等)的首选语言,因此熟练掌握Markdown是一项非常重要的技能。本篇文章主要参考互联网上各大Markdown教程并结合博主自己的心得体会,既是入门教程,也是为我自己建立的笔记,记录我的成长。

了解Markdown

百度会告诉你Markdown是一种轻量级标记语言,在 2004 由约翰·格鲁伯(John Gruber)创建,其设计理念是"易读易写",让人们能够使用简单的纯文本格式来编写结构化文档。那么,Markdown到底好在哪里,又“易”在哪里,它和我们日常生活中另一个最常用到的Word文档相比又有何优缺点呢?

标记语言的概念

标记语言是一种用特定符号来描述文档结构和格式的编码方式,它使用特定的标记(标签)来标识文本中的不同部分或元素,并指示这些部分在渲染或处理时如何被解释或呈现。其底层原理是使用标记来告诉解析器(通常是浏览器或其他软件)如何处理文本内容,当解析器遇到标记时,它会根据标记的定义执行相应的动作。以最常见的标记语言HTML为例,使用<h4>标签表示4级标题,当浏览器解析遇到<h4>时,就会创建一个4级标题元素,并以适当格式显示对应文本:

1
<h4> 这是一个4级标题 </h4>

在Markdown中使用符号#来表示标题等级,使用多少个#就表示几级标题:

1
#### 这是一个4级标题

这是一个4级标题

上面两种语言的标记意义是相同的,在最终被解析后呈现为本段落的标题样式,当然,具体是什么格式与解析器有关,这也正是标记型语言的一大重要优点:内容与格式分离。

Markdown——轻量级标记语言

传统的标记语言如 HTML 功能虽然强大但语法复杂,而Markdown作为轻量级标记语言则简化了这一过程。也可以说Markdown就是HTML的简化版本,因为你甚至可以在Markdown中直接使用HTML语法,这也为其复杂格式提供了灵活性,当基础语法不满足要求时,你可以嵌入HTML代码来实现。

与HTML相比,Markdown的优势在于:

  • 学习成本低,几分钟就可以掌握基本语法
  • 编写效率高,无需复杂标签
  • 更专注内容,而非格式细节

Markdown对比Word

跳过繁文缛节,让我们来直戳最本质的问题,在文本编辑方面,Markdown能做到的,Word(Office、WPS)都可以实现同样的效果,并且后者还可以实现复杂的排版效果,设置边框边距、页眉页脚、段落字体等等,为什么还要使用Markdown呢?

其实,这个问题的答案就在于其问题本身,正是由于Word的功能太强大了,其繁多而复杂的格式排版反而制约了我们内容的创作,当功能太多时,我们在创作时的注意力就会分散,标题和正文的字体大小设置为多少合适?行间距是否要设置为1.5倍?页边距如何设置比较美观?

在Markdown中则不会有这样的烦恼,我不需要考虑字体颜色问题,因为Markdown中只有黑色字体,没有其他颜色字体,我也不需要关心字体大小和行间距等问题,因为 Markdown 中字体格式大小都与结构有关,无法手动设置,一级标题字体大一些,二级标题小一些。我们只需要关注哪些是一级标题,哪些是二级标题,而不需要去纠结标题字体到底要设置多大。

**Markdown 的本质是让我们回归内容本身。**其实在很多时候,我们在打字时,会进入一种心流状态,只希望专注内容创作,而不希望被其他的琐事烦扰,以博主本人来说,我希望自己在打字时无需频繁使用鼠标来进行格式调整,这样可以保持思路的连贯性,而不会被格式问题分散注意力。

一言以蔽之,Markdown实现了内容与排版分离。你在创作内容的时候不必关心具体的排版实现,只需要留下一些像是助记符一样的标记文本来标识文字的作用,而不需要具体关心这些格式的实现。

那么,这种分离带来了什么好处呢?答案很简单,这种分离是一种解耦。你可以用任意的文字编辑软件去编辑Markdown文件(.md文件),再使用任意的渲染器去将它渲染成你喜欢的排版,整个过程你不会被某个软件所捆绑。如果你了解一些编程语言和编程思想的话,你一定明白解耦的重要性,使用Markdown来进行文档编写也是同理。

当然,并不是说二者谁更好,这里只是简单讨论一下二者的区别,实际上二者各自有适合使用的场景,Word十分适合用来编写办公文档,而Markdown由于其流式化特点,先天更适合在电子设备上使用,更适合转换为HTML或用于网页化展示。

创建第一个Markdown文件

创建并编辑Markdown文件无需任何工具或软件,正如我们上节提到的,Markdown是的内容和渲染是分离的,这是它最大的优势之一,你只需要创建一个新文件,并命名为.md后缀的格式,然后就可以使用任意编辑器进行编辑了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 我的第一个 Markdown 文档

这是我学习 Markdown 的开始。

## 学习目标

- 掌握基本语法
- 了解应用场景
- 能够独立创作文档

## 今天的感受

学习 Markdown 比我想象的**简单**,我对接下来的学习充满*期待*

---
> 学习是一个持续的过程,每一小步都是进步。

当然,和大部分编程语言一样,使用一个合适的编辑环境会让你事半功倍,博主这边使用过的不太多,就只推荐两个比较主流的:

VS Code + Markdown插件

其实编写Markdown其实和写代码是有一定相似度的,因此使用免费开源的VSC不失为一种好方法,并且VSC还可以集成Git和其他代码调试功能,对于开发者是比较友好的,你也可以进一步安装其他插件获得更多高级功能,插件生态比较丰富。但是VSC的界面比较复杂,如果你不是开发者或者不熟悉VSC的话可能需要一定的入门成本,另外,VSC的Markdown插件虽然支持实时预览,但还是需要分屏查看的,如下图所示。

image-20250723164303394

Typora

Typora是一款简洁高效的Markdown编辑器,专注于提供舒适的写作环境,支持即时渲染,具有“所见即所得”的良好体验,写作过程中实时预览结果,无需分屏查看。这也是博主目前正在使用的编辑器,Typora使用起来最大的感受是界面非常简洁直观,比较耐看,实时渲染体验非常丝滑。但是需要说明的是Typora的免费版本目前已经停止更新了,最新版本需要付费,价格倒不是很贵,一百块左右一次性付费即可永久使用。如果你是一个经常需要编写Markdown文档的写作人员或者程序员的话,个人还是非常推荐的,旧的免费版使用体验也很不错,只是不支持一些最新功能。

image-20250723165626381

Markdown基本语法

标题

Atx风格

使用#,可以表示1-6级标题, 几个#就表示几级标题,一级标题字号最大,六级标题字号最小,注意井号后需要加一个空格。

1
2
3
4
5
6
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

效果如下:

image-20250726163554215

SeText风格

标题文字下方添加标记,连续的三个 “等号”(===) 代表一级标题,连续的三个 “减号”(—)代表二级标题。

1
2
3
4
5
这是整篇文章的题目
===

这是一个章节题目
---

效果如下:

image-20250726163626534

字体

Markdown不支持更改字体样式,这里的字体主要指粗体和斜体等特殊效果。

值得注意的是,Markdown原生语法也有一些不支持的格式,例如“下划线”,“高亮”等,想要使用这些格式,你需要借助HTML语法来实现,或者使用支持扩展语法的编辑器,也可以让你使用特定的标记来简单实现这些效果。

代码 效果
*这是斜体* 这是斜体
_这也是斜体_ 这也是斜体
**这是粗体** 这是粗体
__这也是粗体__ 这也是粗体
***这是粗斜体*** 这是粗斜体
___这也是粗斜体___ 这也是粗斜体
~~这是一条删除线~~ 这是一条删除线
<u>这是一条下划线</u> 这是一条下划线
<mark>这是高亮效果</mark> 这是高亮效果
==这是Typora支持的扩展语法高亮效果== 这是Typora支持的扩展语法高亮效果

大部分编辑器的快捷键:
加粗:Ctrl+B
斜体:Ctrl+I

列表

列表分为有序列表和无序列表。

  • 无序列表,使用*+-,再加一个空格作为列表的标记

  • 有序列表,使用数字并加上.号,再加一个空格作为列表的标记

1
2
3
4
5
6
7
* 无序列表 1
+ 无序列表 2
- 无序列表 3

1. 有序列表 1
2. 有序列表 2
3. 有序列表 3

效果如下:

  • 无序列表 1
  • 无序列表 2
  • 无序列表 3
  1. 有序列表1
  2. 有序列表2
  3. 有序列表3

你可以在列表符号前使用Tab来控制列表的层级:

1
2
3
4
5
6
7
8
9
+ 无序列表 1
+ 无序列表 2
+ 无序列表 2.1
+ 无序列表 2.2

1. 有序列表 1
1.1 有序列表 1.1
2. 有序列表 2
2.1 有序列表2.1

效果如下:

  • 无序列表 1
  • 无序列表 2
  • 无序列表 2.1
  • 无序列表 2.2
  1. 有序列表 1
    1.1 有序列表 1.1
  2. 有序列表 2
    2.1 有序列表2.1

引用

Markdown 的引用区块有十分丰富的使用场景,例如在邮件中可以使用块引用表示所回信件的内容,也可以用来表示他人的观点、原文、某个事件等信息,亦或者使用引用区块来表示文字注释也非常合适。Markdown中引用通过符号 > 来实现,> 后的空格可有可无。

在引用的区块内,允许换行存在,换行并不会终止引用的区块。如果要结束引用,需要一行空白行,来结束引用的区块。

此外,引用还可以嵌套使用:

1
2
3
4
5
>这是一个引用
直接换行不会终止引用的区块
>这是一个引用:
>>这是一个引用的引用
>>>这是一个引用的引用的引用

效果如下:

这是一个引用

直接换行不会终止引用的区块

这是一个引用:

这是一个引用的引用

这是一个引用的引用的引用

链接

你可以在Markdown中插入链接,使用方式如下:

1
2
3
4
5
6
[链接名称](链接地址)
或者: <链接地址>

[这是博主的主页](https://www.kianexus.com/)
或者
<https://www.kianexus.com/>

效果如下:

这是博主的主页

https://www.kianexus.com/

图片

你也可以在Markdown中插入图片,使用方式如下:

1
2
3
4
![图片描述,即时没有描述也必须要有中括号](图片地址,本地链接或者URL地址)

![萤火之约](https://img.kianexus.com/blog/%E8%90%A4%E7%81%AB%E4%B9%8B%E7%BA%A6.jpg)

效果如下:

萤火之约

分隔线

关于 Markdown 的分割线,官方给出了以下定义:

你可以通过输入三个或更多的「减号 -」、「星号 *」、「下划线 -」的方式创建一条相当于 HTML 语法中 hr一样的分隔线。

这三个符号之间可以包含空格,每种类型的分隔线,可以表现为如下形式: * * *, ***, *****, - - -, ---------

分隔线是用一条明显的横线,来划分文章的上下两个部分,从而使排版变得美观,保持页面的平衡,引导读者的注意力。

注意,分隔线符号一定要空一行之后写,否则会变成前面提到的SeText风格的标题表示符号。

1
2
3
4
5
6
7
8
9
10
11
12

使用「星号」作为分隔线

***

使用「减号」作为分隔线

---

使用「下划线」作为分隔线

___

效果如下:

使用「星号」作为分隔线


使用「减号」作为分隔线


使用「下划线」作为分隔线


代码

Markdown中的代码区块分为行内代码和代码块两种:

行内代码

如果在一行内需要引用代码,只需要用反引号``包裹就可以。

例如:
`Markdown`的实际效果为:Markdown

代码区块中的内容不会触发转义,也不会触发拼写检查,十分适合用来表示代码中的变量名,函数名或其他缩写名称等。

代码块

如果你需要写入长段代码,则建议使用代码块的形式。

使用连续三个反引号 ```符号定义行内代码:

```c

#include
int main(){
printf(“HelloWorld”);
}

```

在第一行的```后可以指明这段代码所使用的语言,这样支持该语法的渲染器就可以为其添加代码高亮,效果如下:

1
2
3
4
#include<iostream>
int main(){
printf("HelloWorld");
}

表格

Markdown也是支持使用表格的,不过使用符号来定义表格并不简便,推荐使用表格插件或者Typora等其他编辑器来快捷生成表格。

Markdown 表格由 「竖线 |」、「减号 -」、「冒号 :」三种符号组成。

  • 竖线 | 用来定义列,每两个竖线之间为一个单元格元素;
  • **减号 **- 用来定义分割线,也就是分割表头和数据体;
  • 冒号 : 配合减号使用,用于定义列数据的对齐属性。
    • :- 将表头及单元格内容左对齐
    • -: 将表头及单元格内容右对齐
    • :-: 将表头及单元格内容居中

实例:

1
2
3
4
5
|无对齐|左对齐|居中对齐|右对齐|
|---|:--|:--:|--:|
|1|张三|男|17岁|
|2|李四|女|18岁|
|3|王五|男|19岁|

效果如下:

无对齐 左对齐 居中对齐 右对齐
1 张三 17岁
2 李四 18岁
3 王五 19岁

Markdown进阶

本小节主要介绍Markdown中使用频率较低的语法和一些常用的扩展语法。

脚注尾注

在Markdown中你可以使用脚注尾注,类似于我们时常在论文中看到的那样。

要增加脚注(尾注),首先在需要增加引用标记的内容后面增加 [^引用ID]

再在文章的适当位置(例如文章末尾)增加脚注的内容,形如:[^引用ID]: 说明文字

实例:

1
2
3
4
5
6
7
这里有一个脚注[^1]。

这里有一个脚注[^2]。


[^1]: 此处是 **脚注1** 的 *文本内容*。
[^2]: 此处是 **脚注2** 的 *文本内容*。

效果如下:

这里有一个脚注[1]

这里有一个脚注[2]

复选框

Markdown支持声明复选框格式。

使用复选框,我们可以实现类似 To-do 任务列表的效果。

在 " 无序列表 -,+,* " 后面使用 「中括号 []」 声明复选框,在中括号中写入 x ,便可实现选中效果。

实例:

1
2
3
4
5
6
To-do List:
- [x] C++
- [ ] C#
- [x] Python
- [ ] Java
- [ ] PHP

效果如下:

To-do List:

注意:

  1. 复选框只能接在无序列表-,+,*后才能生效。
  2. 中括号 [] 之间只能是空格或者x,其他情况下不生效。

生成目录

在 Markdown 中,自动生成目录非常简单,只需要在恰当的位置添加 [TOC] 符号,凡是以 # 定义的标题都会被编排到目录中。

当然,我们难免有手动编写目录内容的需求,比如只显示一二级标题等。

你可以使用无序列表页内超链接的组合来实现类似目录的效果,但是请注意这样做出来的目录无法跳转。

1
2
3
4
5
6
7
8
9
10
11
12
- [一级标题](#一级标题)
- [标题 1-1](#二级标题1-1)
- [标题 1-2](#二级标题1-2)
- [二级标题](#二级标题)
- [标题 2-1](#二级标题2-1)
- [标题 2-2](#二级标题2-2)
- [一级标题](#一级标题)
- [标题 1-1](#二级标题1-1)
- [标题 1-2](#二级标题1-2)
- [二级标题](#二级标题)
- [标题 2-1](#二级标题2-1)
- [标题 2-2](#二级标题2-2)

注意:部分渲染器中超链接括号()内的部分不允许有空格。

效果如下:

数学公式

在 Word 中,想表达出一个复杂的公式非常繁琐,然而绝大多数 Markdown 编辑器都支持使用 LaTeX 语法在文档中插入数学公式。

LaTeX是一种“非所见即所得”的排版系统,功能十分强大,特别适用于包含复杂数学公式的文档。

若要在Markdown中使用公式,你需要使用符号$ ,与代码块类似,公式块也分为行内公式和独立公式两种。

行内公式

使用行内公式,只需要使用$将公式内容前后包裹即可。

实例:$1 + 1 = 2$

效果:1+1=21 + 1 = 2

独立公式

使用独立公式,你需要打出$$后敲一个换行,或者直接将公式两边用两个连续的「美元符 $$」包裹。

实例:

1
2
3
4
5
6
7
$$
x + y = 10 \\
x - y = 6 \\
2x = 16 \\
x = 8 \\
y = 2
$$

效果如下:

x+y=10xy=62x=16x=8y=2x + y = 10 \\ x - y = 6 \\ 2x = 16 \\ x = 8 \\ y = 2

注意:在公式块内回车是不生效的,换行需要通过在行尾添加 \\ 实现。

Latex公式语法虽不复杂,但各种排版和符号都需要通过记号来实现,记忆量颇多,本文就不再进行深入的探讨了,读者们感兴趣的话可以自行在网上搜索,或者关注博主关于Latex系列的教程文章

Mermaid扩展

Mermaid 是一个基于文本的图表生成工具,允许用户通过简单的文本语法来创建和修改各种类型的图表,具有轻量级的特点,几行文字便可生成一幅完整且美观的流程图。

Markdown 的原生语法不支持绘制图形,但通过 Mermaid 扩展,我们可以将一些格式化的文字渲染成我们需要的图形,常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、“饼图” 等。

首先请确保你的编辑器已支持Mermaid扩展

在 Markdown 中添加 Mermaid 图形,需要声明 Mermaid 类型的代码块,代码如下:

1
2
3
```mermaid

```

完整的Mermaid语法颇为复杂,感兴趣的读者可以自行查看相关教程:Mermaid 中文网

这里仅列举两个官方实例作为引导,希望能让您领会Mermaid的强大效果:

  1. 流程图:
1
2
3
4
5
6
7
8
```mermaid
flowchart TD
A[Start] --> B{Is it?}
B -- Yes --> C[OK]
C --> D[Rethink]
D --> B
B -- No ----> E[End]
```

效果如下:

flowchart TD
    A[Start] --> B{Is it?}
    B -- Yes --> C[OK]
    C --> D[Rethink]
    D --> B
    B -- No ----> E[End]
  1. 时序图
1
2
3
4
5
6
7
8
9
10
11
12
13
```mermaid
sequenceDiagram
par Alice to Bob
Alice->>Bob: Go help John
and Alice to John
Alice->>John: I want this done today
par John to Charlie
John->>Charlie: Can we do this today?
and John to Diana
John->>Diana: Can you help us today?
end
end
```

效果如下:

sequenceDiagram
    par Alice to Bob
        Alice->>Bob: Go help John
    and Alice to John
        Alice->>John: I want this done today
        par John to Charlie
            John->>Charlie: Can we do this today?
        and John to Diana
            John->>Diana: Can you help us today?
        end
    end

小结

Markdown虽说是轻量级文本语言,但其通过简单实用的格式标记与强大的扩展语法,可以轻松实现内容完整且格式规整的文档!

希望通过这一篇尚不成熟的文章,能让您体会到使用Markdown进行文档编写的魅力所在!


  1. 此处是 脚注1 的 文本内容↩︎

  2. 此处是 脚注2文本内容↩︎