前言
为什么选择Markdown
Markdown是一种轻量型的标记语言1,通过Markdown我们可以使用相对简单的语法和便捷的方式来实现更容易被阅读的效果。
我们平常进行日志备忘或者笔记文章往往采用纯文本或者使用Word文档的方式。而纯文本的方式写出的日志备忘缺少样式美感,笔记文章完成过程使用Word工具时感觉也颇为繁琐。所以写的多了,有时候就会希望日志备忘的样式也能好看点,而笔记文章的书写过程简单点,所以Markdown的出现很好的满足了这个要求。
Mrakdown编辑工具
对于在线Markdown文档编辑个人推荐掘金、GitBook,CSDN,而本地Markdown文档编辑推荐Typora、VsCode + Markdown插件。这些工具的选择依赖于自己的爱好和需求。
语法基础
Markdown语法规范现在有多种类型,但是基础部分是相对通用的,这些规范类型不同之处的主要是扩展语法。此处的基础语法介绍部分参考的语法规范是GitHub Flavored Markdown。这是一种使用相对广泛的Markdown语法规范类型,Markdown编辑工具Typora也已支持。
Markdown文档组成
前面提到了Markdown是一种轻量型的标记语言。同时我们还能了解到Markdown文档主要是由块级结构元素和内联内容文本组成的。
块级结构元素(blocks—structural elements):
段落、块引用、列表、标题、规则和代码块
内联内容文本(inline content-text):
文本、链接、强调文本、图像
块级结构元素分为container blocks和leaf block
两者的区别是container blocks可以容纳其他块级元素和内联元素,而leaf blocks不能容纳内联元素,但是可以切割container blocks。
We can think of a document as a sequence of blocks—structural elements like paragraphs, block quotations, lists, headings, rules, and code blocks. Some blocks (like block quotes and list items) contain other blocks; others (like headings and paragraphs) contain inline content—text, links, emphasized text, images, code spans, and so on2.
Markdown优先级
块级结构元素总是优先于内联元素的。
编辑习惯
由于在线Markdown编辑工具和本地Markdown编辑工具在有一些操作上可能会有些操作是不同且容易引起混淆的,我们在日常使用中需要自己多加了解其区别,尽量使用规范的方式。
TAB制表符和空格的使用
无论增加单个还是多个空格时推荐只使用空格键进行添加,虽然TAB制表符在本地编辑器中也可以替代空格键进行多个空格连续添加,但是对于在线文档上对于TAB制表符在不同的平台可能会产生不同的效果。
在线平台的TAB制表符不同的效果主要体现为如下,一是直接生成一个缩进代码块作为一个段落,二是在这个段落里可以连续输入两个空格。不过这样反而产生了混淆,在日常使用中推荐如果需要段落可以直接使用TAB制表符进行生成,或者使用没有选择任何语言类型的代码块,对于空格的增加应该只使用空格键。
段落换行
不同的段落间需要额外空出一行来实现新增段落,比如在掘金平台进行Markdown文档编辑时。一般在本地Markdown编辑文档例如Typora进行文档编写时会自动在源代码中增加一行实现换行效果。
块级元素(blocks—structural elements)
标题
常见有六种类型标题
格式: [#] [标题名称]
说明: 不同级别的标题的"#"数量不同,注意"#"和标题名称之间需要保留空格。
示例:
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
Settext 标题
使用Settext标题下划线的方式来创建标题,相对与基本标题大使用方式,可以将多行文本组合成文本,使用率相对不高,而且只能创建一级和二级标题,所以只做了解。
Settext标题下划线有两种:
"===" 用于创建一级标题,注意"="不能少于三个
"---" 用于创建二级标题,注意"-"不能少于三个
示例:
一级标题
===
二级标题
---
缩进代码块(Indented code blocks)
通过TAB制表符可以快速创建缩进代码块,代码块内的所有文本被视为文字文本,不会被解析为内联元素。
不过通常情况下不建议使用,建议直接使用没有信息字符串的围栏代码块。
示例:选择一个段落,使用TAB制表符。之后段落的每行文本前面会多4个空格,这就是缩进代码块。
缩进代码块
围栏代码块(Fenced code blocks)
相对于缩进代码块,围栏代码块不同的点是其构成多了代码栅栏(code fence)和信息字符串(info string),也不需要使用TAB制表符来生成。和缩进代码块的共同点是代码块内的所有文本被视为文字文本,不会被解析为内联元素。
围栏代码块(Fenced code blocks),顾名思义具有封闭的特点。
围栏代码块组成:两个代码栅栏(code fence)、最多一个信息字符串(info string)
代码栅栏(code fence): 使用三个反引号字符"`"或者三个波浪符合"~"
信息字符串(info string): 在第一个代码栅栏(code fence)后面用于指定该代码块语言类型。如果不进行指定,实现的代码块效果和缩进代码块效果一致。
示例:JAVA代码块
```java
```
/**
* test
*/
public class test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
块引用
使用">"符号,块引用属于容器块,块引用中可以使用其他的块级元素。
说明: 每行文本前都需要有">"符号,在">"后面需要保留空格,而且需要换行的时候也需要在空白行位置加上该符号。
示例:
> 块引用(第一行)
>
> 块引用(第二行)
块引用(第一行)
块引用(第二行)
列表
列表也是属于容器块,块中引用的块级元素是列表项。列表也分为无序列表(符号列表),有序列表。
在使用的时候注意符号的对齐,避免忽略空格。
无序列表
使用"-"符号,每增加的一个层级需要在新一行新增n*2空格然后再增加"-"符号。
示例:
- 1
- 1.1
- 1.1.1
- 2
- 2.1
- 2.1.1
- 1
- 1.1
- 1.1.1
- 1.1
- 2
- 2.1
- 2.1.1
- 2.1
有序列表
示例一: 列表项是文本
1. 一
2. 二
3. 三
- 一
- 二
- 三
示例一: 列表项是无序列表
1. - 一.一
- 一.二
2. - 二.一
- 二.二
2. - 三.一
- 三.二
-
- 一.一
- 一.二
-
- 二.一
- 二.二
-
- 三.一
- 三.二
主题中断(thematic break)
thematic break有至少三个连续的"-"符号组成,其实就是分割线,属于leaf block这类块级元素。它不能容纳其他内联元素,但是它的有效作用就是可以对一些块级元素进行分割,比如列表和块引用。
示例:分割线效果
---
内联元素(inline content-text)
脚注
有时候写笔记或者文字会引用到来自于其他数据或者报刊的数据或者文本,这个时候最好进行脚注添加表示进行了引用。
示例:
说明: n一般是数字,根据笔记现有脚注进行一次累加。
文本[^n]
[^n]:(脚注示例)引用来源
文本3
链接
经常会遇到需要设置链接便于阅读者访问的情况,设置链接也有两种方式。
方式一: 快捷链接
直接在被标志文本旁边设置链接地址
示例:
[文本](链接地址)
方式一: 高级链接
像脚注一样,可以将链接地址全部放到文章底部,然后在文中引用。这样的优点就是便于集中管理。编号和脚注不要类似,可以以纯数字的方式进行增长。
20211015:
该方式在掘金中实现会有问题,点击文本跳转时无法获取到正确链接。勿使用
示例:
说明:注意在"[文本][地址编号]"和"[地址编号]:[链接地址名称](链接地址)"之间至少留出一个空行,表示不同段落。
[文本][地址编号]
[地址编号]:[链接地址名称](链接地址)
字体样式
`文本` 段落或者文本的开始和结束部分分别使用一个反引号,可以实现特殊标注效果
*文本* 段落或者文本的开始和结束部分分别使用一个"*",可以实现字体斜体效果
**文本** 段落或者文本的开始和结束部分分别使用两个"*",可以实现字体粗体效果
***文本*** 段落或者文本的开始和结束部分分别使用三个"*",可以实现字体粗斜体效果
文本 段落或者文本的开始和结束部分分别使用一个反引号,可以实现特殊标注效果
文本 段落或者文本的开始和结束部分分别使用一个"*",可以实现字体斜体效果
文本 段落或者文本的开始和结束部分分别使用两个"*",可以实现字体粗体效果
文本 段落或者文本的开始和结束部分分别使用三个"*",可以实现字体粗斜体效果