Markdown快速入门——笔记、分享、教程
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 | # 我的第一个 Markdown 文档 |
当然,和大部分编程语言一样,使用一个合适的编辑环境会让你事半功倍,博主这边使用过的不太多,就只推荐两个比较主流的:
¶VS Code + Markdown插件
其实编写Markdown其实和写代码是有一定相似度的,因此使用免费开源的VSC不失为一种好方法,并且VSC还可以集成Git和其他代码调试功能,对于开发者是比较友好的,你也可以进一步安装其他插件获得更多高级功能,插件生态比较丰富。但是VSC的界面比较复杂,如果你不是开发者或者不熟悉VSC的话可能需要一定的入门成本,另外,VSC的Markdown插件虽然支持实时预览,但还是需要分屏查看的,如下图所示。
¶Typora
Typora是一款简洁高效的Markdown编辑器,专注于提供舒适的写作环境,支持即时渲染,具有“所见即所得”的良好体验,写作过程中实时预览结果,无需分屏查看。这也是博主目前正在使用的编辑器,Typora使用起来最大的感受是界面非常简洁直观,比较耐看,实时渲染体验非常丝滑。但是需要说明的是Typora的免费版本目前已经停止更新了,最新版本需要付费,价格倒不是很贵,一百块左右一次性付费即可永久使用。如果你是一个经常需要编写Markdown文档的写作人员或者程序员的话,个人还是非常推荐的,旧的免费版使用体验也很不错,只是不支持一些最新功能。
¶Markdown基本语法
¶标题
¶Atx风格
使用#
,可以表示1-6级标题, 几个#
就表示几级标题,一级标题字号最大,六级标题字号最小,注意井号后需要加一个空格。
1 | # 一级标题 |
效果如下:
¶SeText风格
在标题文字下方添加标记,连续的三个 “等号”(===) 代表一级标题,连续的三个 “减号”(—)代表二级标题。
1 | 这是整篇文章的题目 |
效果如下:
¶字体
Markdown不支持更改字体样式,这里的字体主要指粗体和斜体等特殊效果。
值得注意的是,Markdown原生语法也有一些不支持的格式,例如“下划线”,“高亮”等,想要使用这些格式,你需要借助HTML语法来实现,或者使用支持扩展语法的编辑器,也可以让你使用特定的标记来简单实现这些效果。
代码 | 效果 |
---|---|
*这是斜体* | 这是斜体 |
_这也是斜体_ | 这也是斜体 |
**这是粗体** | 这是粗体 |
__这也是粗体__ | 这也是粗体 |
***这是粗斜体*** | 这是粗斜体 |
___这也是粗斜体___ | 这也是粗斜体 |
~~这是一条删除线~~ | |
<u>这是一条下划线</u> | 这是一条下划线 |
<mark>这是高亮效果</mark> | 这是高亮效果 |
==这是Typora支持的扩展语法高亮效果== | 这是Typora支持的扩展语法高亮效果 |
大部分编辑器的快捷键:
加粗:Ctrl+B
斜体:Ctrl+I
¶列表
列表分为有序列表和无序列表。
-
无序列表,使用
*
、+
、-
,再加一个空格作为列表的标记 -
有序列表,使用数字并加上
.
号,再加一个空格作为列表的标记
1 | * 无序列表 1 |
效果如下:
- 无序列表 1
- 无序列表 2
- 无序列表 3
- 有序列表1
- 有序列表2
- 有序列表3
你可以在列表符号前使用Tab
来控制列表的层级:
1 | + 无序列表 1 |
效果如下:
- 无序列表 1
- 无序列表 2
- 无序列表 2.1
- 无序列表 2.2
- 有序列表 1
1.1 有序列表 1.1- 有序列表 2
2.1 有序列表2.1
¶引用
Markdown 的引用区块有十分丰富的使用场景,例如在邮件中可以使用块引用表示所回信件的内容,也可以用来表示他人的观点、原文、某个事件等信息,亦或者使用引用区块来表示文字注释也非常合适。Markdown中引用通过符号 >
来实现,>
后的空格可有可无。
在引用的区块内,允许换行存在,换行并不会终止引用的区块。如果要结束引用,需要一行空白行,来结束引用的区块。
此外,引用还可以嵌套使用:
1 | >这是一个引用 |
效果如下:
这是一个引用
直接换行不会终止引用的区块
这是一个引用:
这是一个引用的引用
这是一个引用的引用的引用
¶链接
你可以在Markdown中插入链接,使用方式如下:
1 | [链接名称](链接地址) |
效果如下:
¶图片
你也可以在Markdown中插入图片,使用方式如下:
1 |  |
效果如下:
¶分隔线
关于 Markdown 的分割线,官方给出了以下定义:
你可以通过输入三个或更多的「减号
-
」、「星号*
」、「下划线-
」的方式创建一条相当于 HTML 语法中hr
一样的分隔线。这三个符号之间可以包含空格,每种类型的分隔线,可以表现为如下形式:
* * *
,***
,*****
,- - -
,---------
。
分隔线是用一条明显的横线,来划分文章的上下两个部分,从而使排版变得美观,保持页面的平衡,引导读者的注意力。
注意,分隔线符号一定要空一行之后写,否则会变成前面提到的SeText风格的标题表示符号。
1 |
|
效果如下:
使用「星号」作为分隔线
使用「减号」作为分隔线
使用「下划线」作为分隔线
¶代码
Markdown中的代码区块分为行内代码和代码块两种:
¶行内代码
如果在一行内需要引用代码,只需要用反引号``包裹就可以。
例如:
`Markdown`的实际效果为:Markdown
代码区块中的内容不会触发转义,也不会触发拼写检查,十分适合用来表示代码中的变量名,函数名或其他缩写名称等。
¶代码块
如果你需要写入长段代码,则建议使用代码块的形式。
使用连续三个反引号 ```符号定义行内代码:
```c
#include
int main(){
printf(“HelloWorld”);
}```
在第一行的```后可以指明这段代码所使用的语言,这样支持该语法的渲染器就可以为其添加代码高亮,效果如下:
1 |
|
¶表格
Markdown也是支持使用表格的,不过使用符号来定义表格并不简便,推荐使用表格插件或者Typora等其他编辑器来快捷生成表格。
Markdown 表格由 「竖线 |
」、「减号 -
」、「冒号 :
」三种符号组成。
- 竖线
|
用来定义列,每两个竖线之间为一个单元格元素; - **减号 **
-
用来定义分割线,也就是分割表头和数据体; - 冒号
:
配合减号使用,用于定义列数据的对齐属性。:-
将表头及单元格内容左对齐-:
将表头及单元格内容右对齐:-:
将表头及单元格内容居中
实例:
1 | |无对齐|左对齐|居中对齐|右对齐| |
效果如下:
无对齐 | 左对齐 | 居中对齐 | 右对齐 |
---|---|---|---|
1 | 张三 | 男 | 17岁 |
2 | 李四 | 女 | 18岁 |
3 | 王五 | 男 | 19岁 |
¶Markdown进阶
本小节主要介绍Markdown中使用频率较低的语法和一些常用的扩展语法。
¶脚注尾注
在Markdown中你可以使用脚注尾注,类似于我们时常在论文中看到的那样。
要增加脚注(尾注),首先在需要增加引用标记的内容后面增加 [^引用ID]
再在文章的适当位置(例如文章末尾)增加脚注的内容,形如:[^引用ID]: 说明文字
实例:
1 | 这里有一个脚注[^1]。 |
效果如下:
这里有一个脚注[1]。
这里有一个脚注[2]。
¶复选框
Markdown支持声明复选框格式。
使用复选框,我们可以实现类似 To-do 任务列表的效果。
在 " 无序列表 -,+,*
" 后面使用 「中括号 []」
声明复选框,在中括号中写入 x
,便可实现选中效果。
实例:
1 | To-do List: |
效果如下:
To-do List:
注意:
- 复选框只能接在无序列表
-,+,*
后才能生效。 - 中括号
[]
之间只能是空格或者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 | $$ |
效果如下:
注意:在公式块内回车是不生效的,换行需要通过在行尾添加 \\
实现。
Latex公式语法虽不复杂,但各种排版和符号都需要通过记号来实现,记忆量颇多,本文就不再进行深入的探讨了,读者们感兴趣的话可以自行在网上搜索,或者关注博主关于Latex系列的教程文章
¶Mermaid扩展
Mermaid 是一个基于文本的图表生成工具,允许用户通过简单的文本语法来创建和修改各种类型的图表,具有轻量级的特点,几行文字便可生成一幅完整且美观的流程图。
Markdown 的原生语法不支持绘制图形,但通过 Mermaid 扩展,我们可以将一些格式化的文字渲染成我们需要的图形,常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、“饼图” 等。
首先请确保你的编辑器已支持Mermaid扩展
在 Markdown 中添加 Mermaid 图形,需要声明 Mermaid 类型的代码块,代码如下:
1 | ```mermaid |
完整的Mermaid语法颇为复杂,感兴趣的读者可以自行查看相关教程:Mermaid 中文网
这里仅列举两个官方实例作为引导,希望能让您领会Mermaid的强大效果:
- 流程图:
1 | ```mermaid |
效果如下:
flowchart TD
A[Start] --> B{Is it?}
B -- Yes --> C[OK]
C --> D[Rethink]
D --> B
B -- No ----> E[End]
- 时序图
1 | ```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
¶小结
Markdown虽说是轻量级文本语言,但其通过简单实用的格式标记与强大的扩展语法,可以轻松实现内容完整且格式规整的文档!
希望通过这一篇尚不成熟的文章,能让您体会到使用Markdown进行文档编写的魅力所在!