Markdown 简单介绍及用法
Markdown 是做什么的呢?其实 Markdown 是一种用于撰写文章的标记语言。很多平台撰写文章可以使用 Markdown 文档直接发表,如知乎、GitHub等。虽然程序员和博客作者用 Markdown 的人比较多,但任何人都可以使用 Markdown 来撰写文章。它并没有那么难。只需要你记几个简单标记就能很快掌握。
使用 Markdown 的好处(不限于):
-
专注内容的输出,你不怎么需要先关注排版的格式信息。
-
轻量化,不需要比较重的编辑器。
-
在网页上使用方便。
由于 Markdown 是通过一些常见的符号来标记文档中的内容,因此纯文本编辑器就可以编辑它。比如咱们盲人小伙伴使用的记事本。为了区分普通文本和Markdown 文本,我们一般把Markdown 文档的扩展名设为 .md。但其内容依然是纯文本的文本文档。关于文本编辑的基本知识,您可参考 浅谈文本编辑中的快捷键及其底层逻辑 这篇文章。没错,这篇文章中的表格、段落、标题等格式信息就是用 Markdown 排出来的。
有的网站天生支持 Markdown 撰写内容,我们直接把我们书写好的 Markdown 文档上传就可以发表了。对于那些不支持 Markdown 的网站,我们可以借助于一些 Markdown 渲染工具。还有的情况可能是这样的,我们不确认我们编写的 Markdown 文档是否显示正确,也需要一个工具实时渲染出结果。这里,我推荐各位使用 VS Code 这款工具。使用方法建议看 VS Code 大材小用之撰写 Markdown 这篇文章。
历史闲话
进入今天的主题之前,不妨让我们回顾一下人们在计算机中编写文档的历史。
-
最开端,是纯文本的天下。没有格式的概念,同一种字体同一种字号贯穿全文。更没有排版一说了。如果我们想把一些文字居中对其,那您老就手动敲若干个空格好了。这时候,也创造出了很多神奇的字符,比如制表符,就是用来快速对其表格类的内容而出现的。说是表格吧,其实都是用诸如“-”——横线和“l”——表示竖线等字符描绘出来的。
-
有人说,这太愚蠢了。我们为什么不多发明一些特殊的字符,帮助我们排版呢?比如需要居中一段文字,把这些文字用一对特殊的字符标记出来就好了啊。需要加粗文字,也指定一对特殊的文字包裹起来。这就蛋生了最初的富文本的概念。
-
后来,富文本编辑越来越成熟。比如大名鼎鼎的 WPS 最初就是这样一套汉字排版处理系统。不过,用特殊符号包裹需要排版的文本虽解决了排版的问题,但有一个致命的问题。就是电脑屏幕上面依然显示的是普通的纯文本,必须输入到打印机,打印出来才知道有没有打歪。
-
正当人们争吵文字处理种种不便的时候,微软带着 Windows + Office 闪亮登场了。用户再也不用学习一堆用于排版和格式的特殊字符了。可视化的交互、所见即所得的编辑体验,让人们直接可以通过电脑屏幕看到打印出来的效果。自此,Windows + Office 成为了办公室的标配产品,解救了被压在箱底的打字机。
这就是文字编辑的历史。但 Word 就完美了吗?未必,有以下问题:
-
太重了。因为 Word 是解决办公室打文件这一需求蛋生的工具。如果我们并非是打印文件,只是在网上写一点儿小文章,显然不需要用它
-
过于直观,却影响到了文字输入本身。比如你要加粗一个关键词,你需要选中,然后执行“加粗”功能。太直观了就脱离了输入文字的状态
Markdown 就是解决这一需求的轻量化文字编写语言。类似于上一个世纪的特殊符号文字编排法。同样使用一些字符表示特定的格式信息,不同的是,表达效果更容易让人理解。它具有:
-
轻量化。纯文本编写,够简单。
-
表达易于理解。如加粗文字只需要将要加粗的文字前后用“**”包裹起来就可以了
-
与互联网文档的语言——HTML 良好兼容。这就便于我们在网上发布我们的小文章。
从标记说起
Markdown 看名字就跟标记有关系。没错,使用 Markdown 撰写文字的核心就是一些标记。
那什么是标记呢?在 Markdown 中,有一些特殊的字符,起到一种特殊的格式含义。比如说,你用“*”字符把文字包裹起来,那么就是要让 Markdown 工具斜体包裹文字的意思。所有的标记都是这样,用于提示你和 Markdown 工具,这是一个什么东西。
总结,万物需要标记。
简单语法概要
段落
在 Markdown 中,一个段落很简单。只要一行文字前后都留下一个空行就好了。这行文字就会被视为一个段落。但需要我们注意的是,由于默认情况下,段首没有缩进。这就需要我们手动敲两个拳脚空格作为缩进。
换行
倘若我们一个段落中需要在特定的位置换行的话,就需要在要换行的位置上插入两个空格。
例如:
我是一个段落,
我还是这个段落,不过我已经在下一行了。
我是一个段落,
我还是这个段落,不过我已经在下一行了。
加粗与斜体
用一个 “*”或者“_”包裹起来的文本会被设置为斜体;用两个"*"或者两个“_”包裹起来的文本会被加粗;如果是三个“*”或者三个“_”包裹的文本既会被设置为斜体,也会被加粗。
例如:
我喜欢 Markdown。这里有加粗的文本,也有斜体的文本,还有加粗又斜体的文本。
我喜欢 __Markdown__。这里有**加粗**的文本,也有*斜体*的文本,还有***加粗又斜体***的文本。
标题
在 Markdown 标记语法中,有两种类型的标题:
方法1: 在要设置为标题的段首添加1到6个“#”字符,接着一个空格。就会转换成对应等级的标题。
例如:
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
方法2: 在需要设为主标题断后一行添加三个及更多的 “=”字符,副标题则是在下一行添加三个及更多的“-”字符。
例如:
我是主标题
我是副标题
我是主标题
======
我是副标题
--------
链接与图片
链接语法也有两种。第一种如下:
[链接文本](链接地址)
例如:
欢迎来到NVDA中文站。
欢迎来到[NVDA中文站](http://nvdacn.com/)。
观察上面的语法,我们发现网址和内容混在了一起了。为了能让网址和内容分开,我们把链接语法改成这样:
[链接文本][标签名]
然后在文档的其他地方定义标签,语法如下:
标签名: 标签内容
例如:
[百度][baidu]
[baidu]: https://baidu.com
至于图片,语法跟链接是一样一样的。只需要在[]前加上一个“!”就好了。
![图片描述](图片地址)
![图片描述][标签名]
引用
如果一句话是引用来的,只需要在行首添加“>”符号就好了。
世上无难事,只要肯登攀。
> 世上无难事,只要肯登攀。
列表
列表分有序列表和无序列表。无序列表的格式是在每一个列表项目之前添加一个“-”或者“*”字符,然后空一格。
例如:
我喜欢吃的水果有:
-
苹果
-
橘子
-
香蕉
我喜欢吃的水果有:
- 苹果
- 橘子
- 香蕉
有序列表项目则以一个数字开头,接着是一个“.”或者一个“)”,然后是一个空格开头。
太阳系的八大行星是:
-
水星
-
金星
-
地球
-
火星
-
木星
-
土星
-
天王星
-
海王星
太阳系的八大行星是:
1. 水星
2. 金星
3. 地球
4. 火星
5. 木星
6. 土星
7. 天王星
8. 海王星
不过需要说一嘴的是,有序列表中的数字并非代指序号。数字的目的只是提醒一下,这是一个有序列表的项目。
水平分割线
在文档中,如果三个或更多的“*”字符或者“-”字符放到单独的一行上,且前后空行,则会生成水平分割线。
例如:
---
代码块
代码块分为行内代码块和块状代码块。前者用于插入到段落中,后者是独立的一个特殊段落。
行内代码块用“`”包裹起来。例如:
在 Python 中可使用 print()
函数输出文本。
在 Python 中可使用 `print()` 函数输出文本。
而块状代码块则是使用三个“”包裹起来的。并且需要把三个“
”放到单独一行上。例如:
# 输出 helloworld
print('helloworld')
```
# 输出 helloworld
print('helloworld')
```
还有另一种块状代码块的写法。是把要作为代码块的内容整体缩进四个空格位置。这里就不演示了。
嵌套语法
诸如上面提到的:
-
引用
-
有序列表
-
无序列表
是可以嵌套使用的,请看一个例子:
太阳系的结构
- 水星
- 金星
- 地球
- 月球
> 太阳系的结构
> 1. 水星
> 2. 金星
> 3. 地球
> - 月球
与HTML 标签良好兼容
在 Markdown 文档中,你可以直接使用 HTML 标签。如,插入音频、视频,又或者,使用更复杂的标记等等。
还有一个问题是,如果你需要在正文中用到诸如"*"这样的字符,并不希望被识别成标记的话。可以在这样的字符之前添加一个“\”字符。其作用就是忽略“*”等字符的特殊含义。
最后
基本上把最基本的 Markdown 语法写完了。以上这些语法是最基本的,也是最常用的。由于各种场景的不同,也会有其他 Markdown 语法。大家可以按需学习,例如说:
-
表格,Markdown 是可以写出表格的。
-
脚注, Markdown 是可以编写脚注的。
-
大纲,有一些 Markdown 工具可以生成文章的大纲。
配合其他的一些工具,比如说:
-
MathJax,可编写数学公式。
-
Mermaid,可以在 Markdown 文档中编写流程图。
这些就需要大伙儿去探索了。
本文撰写我参考了 https://commonmark.org/help/。
感谢各位的阅读。下次再见!