Markdown 简介

Markdown 是一种轻量级的「标记语言」,通常为程序员群体所用,适用于泡技术论坛、写博客日志、技术文稿、记录代码片段、起草邮件等场景。

可以通过简单、易读易写的文本格式生成结构化的 HTML 网页,以及 Word 和 pdf 文档。目前 知乎、简书、github、Stackoverflow、以及绝大多数博客论坛 均支持这种格式。

为什么要学 Markdown?

因为简单;因为好用;因为这篇教程就是用 Markdown 写的。

让“码字的归码字,排版的归排版”,专注写作,效率快速提升;

除此之外基础的任务管理、项目管理、逻辑梳理、公式协作等等,都可以用基本的Markdown来完成……

优点:

简单符号排版,15 分钟上手。

纯键盘操作,写作时少调用鼠标,效率能提升很多。

使用 Markdown 的 h1、h2、h3 标题,列表、分列表,结构和逻辑都很清晰。排版成同样的效果,md 与 word 比起来简直毫不费力气。另外,还有插入图片、链接、粗体、斜体等功能。

纯文本编辑,轻量级。纯文本有很多好处,例如占用空间小、移植方便快捷、可以用 git 比较版本、编辑时不需要软件支持等。

目前支持将 md 转换为多种格式,包括 html、tex、pdf 等。

缺点:

  • 语法不是很统一,不同的编辑器语法有区别
  • 不能对文档进行精细调整,或者个性化调整。
  • 据说过于程序员友好。

对话式红楼梦

曹雪芹写的效果如下:

贾芸听声音像是熟人,仔细一看,原来是紧邻倪二。这倪二是个泼皮,专放重利债,在赌博场吃饭,专爱喝酒打架。此时正从欠钱人家索债归来,已在醉乡,不料贾芸碰了他,就要动手。贾芸叫道:“老二!住手!是我冲撞了你。”倪二一听他的语音,将醉眼睁开一看,见是贾芸,忙松了手,趔趄著笑道:“原来是贾二爷。这会子那里去?”贾芸道:“告诉不得你,平白的又讨了个没趣儿!”倪二道:“不妨。有什么不平的事,告诉我,我替你出气。这三街六巷,凭他是谁,若得罪了我醉金刚倪二的街坊,管叫他人离家散!”贾芸道:“老二,你别生气,听我告诉你这缘故。”便把卜世仁一段事告诉了倪二。倪二听了,大怒道:“要不是二爷的亲戚,我就骂出来,真真把人气死!--也罢,你也不必愁,我这里现有几两银子,你要用只管拿去。我们好街坊,这银子是不要利钱的。”一头说,一头从搭包内掏出一包银子来。


Markdown 的效果

用Markdown简单处理一下的话,这段的排版就变了:

贾芸听声音像是熟人,仔细一看,原来是紧邻倪二。这倪二是个泼皮,专放重利债,在赌博场吃饭,专爱喝酒打架。此时正从欠钱人家索债归来,已在醉乡,不料贾芸碰了他,就要动手。贾芸叫道:

“老二!住手!是我冲撞了你。”

倪二一听他的语音,将醉眼睁开一看,见是贾芸,忙松了手,趔趄著笑道:

“原来是贾二爷。这会子那里去?”

贾芸道:

“告诉不得你,平白的又讨了个没趣儿!”

倪二道:

“不妨。有什么不平的事,告诉我,我替你出气。这三街六巷,凭他是谁,若得罪了我醉金刚倪二的街坊,管叫他人离家散!”

贾芸道:

“老二,你别生气,听我告诉你这缘故。”

便把卜世仁一段事告诉了倪二。倪二听了,大怒道:

“要不是二爷的亲戚,我就骂出来,真真把人气死!--也罢,你也不必愁,我这里现有几两银子,你要用只管拿去。我们好街坊,这银子是不要利钱的。”

一头说,一头从搭包内掏出一包银子来。


开始撰写 Markdown

标题

Markdown 支持两种标题的语法,类 Setext 和类 atx 形式。(部分编辑器不支持)

类 Setext 形式是用底线的形式,利用 = (最高阶标题)和 - (第二阶标题),例如:

1
2
3
4
5
This is an H1
=============

This is an H2
-------------

类 Atx 形式则是在行首插入 1 到 6 个 # ,对应到标题 1 到 6 阶,例如:

1
2
3
4
5
# 这是 H1

## 这是 H2

###### 这是 H6

你可以选择性地「闭合」类 atx 样式的标题,这纯粹只是美观用的,若是觉得这样看起来比较舒适,你就可以在行尾加上 #,而行尾的 # 数量也不用和开头一样(行首的井字符数量决定标题的阶数):

1
2
3
4
5
# 这是 H1 #

## 这是 H2 ##

### 这是 H3 ######

区块引用Blockquotes

Markdown 标记区块引用是使用类似 email 中用 > 的引用方式。如果你还熟悉在 email 信件中的引言部分,你就知道怎么在 Markdown 文件中建立一个区块引用,那会看起来像是你自己先断好行,然后在每行的最前面加上 > :

1
2
3
4
5
6
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.

Markdown 也允许你偷懒只在整个段落的第一行最前面加上 > :

1
2
3
4
5
6
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.

> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
id sem consectetuer libero luctus adipiscing.

区块引用可以嵌套(例如:引用内的引用),只要根据层次加上不同数量的 > :

1
2
3
4
5
 This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.

引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、代码区块等:

1
2
3
4
5
6
7
8
> ## 这是一个标题。
>
> 1. 这是第一行列表项。
> 2. 这是第二行列表项。
>
> 给出一些例子代码:
>
> return shell_exec("echo $input | $markdown_script");

任何像样的文本编辑器都能轻松地建立 email 型的引用。例如在 BBEdit 中,你可以选取文字后然后从选单中选择增加引用阶层。

列表

Markdown 支持有序列表和无序列表。

无序列表使用星号、加号或是减号作为列表标记:

1
2
3
*   Red
* Green
* Blue

等同于:

1
2
3
+   Red
+ Green
+ Blue

也等同于:

1
2
3
-   Red
- Green
- Blue

有序列表则使用数字接着一个英文句点(word里面也是这样):

1
2
3
1. Bird
2. McHale
3. Parish

列表项目标记通常是放在最左边,但是其实也可以缩进,最多 3 个空格,项目标记后面则一定要接着至少一个空格或制表符。

要让列表看起来更漂亮,你可以把内容用固定的缩进整理好:

1
2
3
4
5
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.

但是如果你懒,那也行:

1
2
3
4
5
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.

列表项目可以包含多个段落,每个项目下的段落都必须缩进 4 个空格或是 1 个制表符:

1
2
3
4
5
6
7
8
9
1.  This is a list item with two paragraphs. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit. Aliquam hendrerit
mi posuere lectus.

Vestibulum enim wisi, viverra nec, fringilla in, laoreet
vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
sit amet velit.

2. Suspendisse id sem consectetuer libero luctus adipiscing.

如果你每行都有缩进,看起来会看好很多,当然,再次地,如果你很懒惰,Markdown 也允许:

1
2
3
4
5
6
7
*   This is a list item with two paragraphs.

This is the second paragraph in the list item. You're
only required to indent the first line. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.

* Another item in the same list.

如果要在列表项目内放进引用,那 > 就需要缩进:

1
2
3
4
*   A list item with a blockquote:

> This is a blockquote
> inside a list item.

如果要放代码区块的话,该区块就需要缩进两次,也就是 8 个空格或是 2 个制表符:(有些编辑器不支持)

1
2
3
*   一列表项包含一个列表区块:

<代码写在这>

当然,项目列表很可能会不小心产生,像是下面这样的写法

1
1986. What a great season.

换句话说,也就是在行首出现数字-句点-空白,要避免这样的状况,你可以在句点前面加上反斜杠。

1
1986\. What a great season.

待办事项

- [ ] 来表示一个待办事项列表(注意有三个空格)

1
2
- [ ] 未完成列表
- [x] 已完成列表

代码区块

和程序相关的写作或是标签语言原始码通常会有已经排版好的代码区块,通常这些区块我们并不希望它以一般段落文件的方式去排版,而是照原来的样子显示,Markdown 会用 <pre><code> 标签来把代码区块包起来。

要在 Markdown 中建立代码区块很简单,只要用一对

1
2
3
4
5

~~~C++
```C++
for (int i = 0; i < 10; i++)
printf("%d\n", i);

~

上面的

1
2
3
4
5
6



### 分隔线

你可以在一行中用三个以上的短横杠来建立一个分隔线,行内不能有其他东西。


1
2
3
4
5
6



### 链接

链接文字用 [方括号] 来标记,要建立一个行内的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,例如:

This is an example inline link.

This link has no title attribute.

1
2

如果你是要链接到同样主机的资源,你可以使用相对路径:

See my About page for details.

1
2
3
4
5
6



### 强调

Markdown 使用星号(*)和底线(_)作为标记强调字词的符号 。一对是斜体,两对是粗体。

single asterisks

single underscores

double asterisks

double underscores

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

*single asterisks*

_single underscores_

**double asterisks**

__double underscores__

你可以随便用你喜欢的样式,唯一的限制是,你用什么符号开启标签,就要用什么符号结束。

强调也可以直接插在文字中间:

unfriggingbelievable

1
2
3
4

但是**如果你的 \* 和 _ 两边都有空白的话,它们就只会被当成普通的符号。**

如果要在文字前后直接插入普通的星号或底线,你可以用反斜线:

*this text is surrounded by literal asterisks*

1
2
3
4
5
6



### 删除线

使用两对波浪线 ~~ 来给文字加上~~删除线~~。注意波浪线和文字之间不能有空格。

删除线

1
2
3
4
5
6



### 代码

如果要标记一小段行内代码,你可以用反引号把它包起来(`),例如:

Use the printf() function.

1
2

如果要在代码区段内插入反引号,你可以用多个反引号来开启和结束代码区段:

There is a literal backtick (`) here.

1
2
3
4
5
6
7
8
9
10



### 图片

很明显地,要在纯文字应用中设计一个「自然」的语法来插入图片是有一定难度的。

Markdown 使用一种和链接很相似的语法来标记图片,同样也允许两种样式: 行内式和参考式。

行内式的图片语法看起来像是:
Alt text
Alt text
1
2
3
4
5
6
7
8
9
10
11
12
13
14

详细叙述如下:

- 一个惊叹号 !
- 接着一个方括号,里面放上图片的替代文字
- 接着一个普通括号,里面放上图片的网址,最后还可以用引号包住并加上 选择性的 'title' 文字。

到目前为止, Markdown 还没有办法指定图片的宽高,如果你需要的话,你可以使用普通的 `<img>` 标签。



### 反斜杠

Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,例如:如果你想要用星号加在文字旁边的方式来做出强调效果,你可以在星号的前面加上反斜杠:

*literal asterisks*

1
2

Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:

\ 反斜线
` 反引号

  • 星号
    _ 底线
    {} 花括号
    [] 方括号
    () 括弧

    井字号

  • 加号
  • 减号
    . 英文句点
    ! 惊叹号
    1
    2
    3
    4
    5
    6



    ### 自动链接

    Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来, Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样,例如:

http://example.com/

1
2

邮址的自动链接也很类似,只是 Markdown 会先做一个编码转换的过程,把文字字符转成 16 进位码的 HTML 实体,这样的格式可以糊弄一些不好的邮址收集机器人,例如:

address@example.com

1
2
3
4
5
6



### 表格

表格是Markdown语法中比较复杂的一个,其语法如下:
表头 条目一 条目二
项目 项目一 项目二
```

以上标记显示效果如下:

表头 条目一 条目二
项目 项目一 项目二

注:三个短斜杠左右的冒号用于控制对齐方式,只放置左边冒号表示文字居左,只放置右边冒号表示文字居右,如果两边都放置冒号表示文字居中。不加冒号默认左对齐。

文字上色

使用Markdown的同学最郁闷的地方恐怕就是不能给文字添加颜色了。事实上,Markdown的最初目标就是为纯写作而生的。因此,它并没有考虑文字颜色这一点。所以,单纯使用Markdown设置文字颜色已经做不到了。但你可以这样做:

  1. 先用Markdown编辑完成
  2. 导出为html,在需要上色的部分手动添加标签<font color='#ff0000'> </font>保存即可。

Latex数学公式

1.行内公式:使用两个”$”符号引用公式:

$公式$

2.行间公式:使用两对“$$”符号引用公式:

$$公式$$

输例如$\sqrt{x^{2}}$

上标下标

$ $ 公式中,用 ^p 表示上标。若有多个,用 { } 括起来。

下标符号为 _,用法同上标。

Typora 的扩展语法中,可以用^上标^~下标~来表示(需要先到设置中开启)

结语

在文档中,内容远远比工具和格式重要。但适当的格式和工具也会增强文字的渲染力。

Markdown 是纯文本和富文本之间最恰当的选择。


博客来源:整理,网络,主要是 http://www.markdown.cn/