Markdown语法汇总
前言
我们在平时写作的时候,可能你会倾向于使用 Markdown 这种富文本标记语言,因为它是纯文本格式,而且可以很方便的生成具有很强可读性的 html 文件。比如现在很多写作网站、论坛都支持这种格式,比如简书、CSDN,笔记类软件,比如有道笔记等。绝大多数写作类工具也都会支持 Markdown 写法。Markdown 编辑器也有很多,如 Markdown Pad 等流行编辑器,流行操作系统(Win、Mac、Linux)上都有相应的免费 Markdown 编辑器,可自行搜索。大多数流行 IDE 也都有其支持插件,如 Android Studio、XCode 等。
对于我个人来说,作为一个程序猿,使用 Markdown 写作已经成为一种习惯,比如用笔记软件记笔记,在类似 CSDN 等技术博客网站上发表文章,都使用 Markdown 形式,本人甚至自己写了一个小的基于 Bash 和 Python 的本地 Markdown 解释器,这个解释器可兼容 CSDN 上 Markdown 的所有语法格式,包括表格、UML图等特性,所以我可以自由在本地记录随笔,并且后续可以有选择性地发表。也就是说本地有可以检索的所有笔记的文本文件副本,这对于快速搜索包含特定关键字的某篇日记有很大帮助。
在一开始使用 Markdown 过程中,偶尔会有忘记语法格式的情况,比如表格该怎么开始来的?代码高亮是三个撇号吗?所以还是要去上网查找语法格式,于是写了这样一篇语法汇总,旨在可以直观呈现效果和对应的语法格式。你可以把它作为自己在使用 Markdown 初期时手头的参考资料,希望对你开始或者熟练使用 Markdown 能有所帮助。
一、标题
在文字写书写不同数量的#可以完成不同的标题,如下:
一级标题
# 一级标题
二级标题
## 二级标题
三级标题
### 三级标题
四级标题
#### 四级标题
五级标题
##### 五级标题
六级标题
###### 六级标题
等号及减号也可以进行标题的书写,不过只能书写二级标题,并且需要写在文字的下面,减号及等号的数量不会影响标题的基数,如下:
二级标题
二级标题
=========
二级标题
二级标题
---------
二、列表
无序列表的使用,在符号“-”后加空格使用。如下:
- 无序列表1
- 无序列表2
- 无序列表3
- 无序列表1
- 无序列表2
- 无序列表3
如果要控制列表的层级,则需要在符号“-”前使用空格。如下:
- 无序列表1
- 无序列表2
- 无序列表2.1
- 列表内容
- 列表内容
- 无序列表2.1
- 无序列表1
- 无序列表2
- 无序列表2.1
- 列表内容
- 列表内容
有序列表的使用,在数字及符号“.”后加空格几个,如下:
- 有序列表1
- 有序列表2
- 有序列表3
1. 有序列表1
2. 有序列表2
3. 有序列表3
有序列表如果要区分层级,也可以在数字前加空格,如下:
- 有序列表1
- 有序列表2
- 有序列表1.1
- 有序列表1.2
- 有序列表1.3
- 有序列表3
1. 有序列表1
2. 有序列表2
1. 有序列表1.1
2. 有序列表1.2
3. 有序列表1.3
3. 有序列表3
三、引用
引用的格式是使用符号“>”后面书写文字,及可以使用引用。如下:
以下是引用示例:
这个是引用
是不是和电子邮件中的
引用格式很像
使用引用的语法:
> 这个是引用
> 是不是和电子邮件中的
> 引用格式很像
以下是多重引用示例:
多层引用
- 一重
多层引用
- 二重
多层引用
- 三重
使用多重引用语法:
> 多层引用
> - 一重
>> 多层引用
>> - 二重
>>> 多层引用
>>> - 三重
四、粗体与斜体
粗体的使用是在需要加粗的文字前后各加两个“”,而斜体的使用则是在需要斜体的文字前后各加一个“”,如果要使用粗体和斜体,那么就是在需要操作的文字前后各加三个“*”。如下:
这个是粗体
这个是斜体
这个是粗体加斜体
**这个是粗体**
*这个是斜体*
***这个是粗体加斜体***
五、链接与图片
在文中直接加链接,中括号中是需要添加链接的文字,圆括号中是需要添加的链接,如下:
[link text](http://example.com/ "optional title")
在引用中加链接,第一个中括号添加需要添加的文字,第二个中括号中是引用链接的id,之后在引用中,使用id加链接:如下:
[link text][id]
[id]: http://example.com/ "optional title here"
[link text][id]
[id]: http://example.com/ "optional title here"
在文中直接引用链接,直接使用尖括号,把链接加入到尖括号中就可以实现,如下:
http://example.com/ or address@example.com
插入互联网上图片,格式如下:
![这里写图片描述](http://img.blog.csdn.net/xxx.png)
![这里写图片描述][test-icon]
[test-icon]: http://img.blog.csdn.net/xxx.png
括号中的图片地址可以是网络的,在本地使用时也可以是本地的文件路径。
六、代码块
用TAB键起始的段落,会被认为是代码块,如下:
<php>
echo “hello world";
</php>
<php>
echo “hello world";
</php>
如果在一个行内需要引用代码,只要用反引号`引起来就好,如下:
Use the printf()
function.
Use the `printf()` function.
七、分割线
可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,同时需要在分隔线的上面空一行。如下:
---
****
___
八、代码高亮
在需要高亮的代码块的前一行及后一行使用三个反引号“`”,同时第一行反引号后面表面代码块所使用的语言,如下:
以下是一段 ruby 代码块:
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```
以下是一段 bash 代码块:
local mds=$(find . -name *.md)
local count=$(echo ${mds} | wc -w)
if [ ${count} -eq 1 ]; then
FILE_IN=${mds}
echo "检索到 md 文档: ${mds}"
else
printUsage
exit 1
fi
```bash
local mds=$(find . -name *.md)
local count=$(echo ${mds} | wc -w)
if [ ${count} -eq 1 ]; then
FILE_IN=${mds}
echo "检索到 md 文档: ${mds}"
else
printUsage
exit 1
fi
```
以下是一段 java 代码块:
public class CodeBlock{
public static void main(String[] args){
System.out.println("Test java code block");
}
}
```java
public class CodeBlock{
public static void main(String[] args){
System.out.println("Test java code block");
}
}
```
九、表格
可以使用冒号来定义表格的对齐方式,如下:
Tables | Are | Cool |
---|---|---|
col 3 is | right-aligned | $1600 |
col 2 is | centered | $12 |
zebra stripes | are neat | $1 |
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
十、绘制UML
(这个特性是 CSDN 的 Markdown 书写所支持的语法,其它平台不一定支持或有差异。)
可以渲染时序图:
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
```sequence
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
```
或者流程图:
st=>start: Start|past:>http://www.google.com[blank]
e=>end: End:>http://www.google.com
op1=>operation: My Operation|past
op2=>operation: Stuff|current
sub1=>subroutine: My Subroutine|invalid
cond=>condition: Yes
or No?|approved:>http://www.google.com
c2=>condition: Good idea|rejected
io=>inputoutput: catch something...|request
st->op1(right)->cond
cond(yes, right)->c2
cond(no)->sub1(left)->op1
c2(yes)->io->e
c2(no)->op2->e
```flow
st=>start: Start|past:>http://www.google.com[blank]
e=>end: End:>http://www.google.com
op1=>operation: My Operation|past
op2=>operation: Stuff|current
sub1=>subroutine: My Subroutine|invalid
cond=>condition: Yes
or No?|approved:>http://www.google.com
c2=>condition: Good idea|rejected
io=>inputoutput: catch something...|request
st->op1(right)->cond
cond(yes, right)->c2
cond(no)->sub1(left)->op1
c2(yes)->io->e
c2(no)->op2->e
```
关于
2018-03-10 周六 (于北京·大兴)