学习 Markdown
实在受够了 word ,于是决定开始学习和使用 Markdown 来完成日常文档的书写了。Markdown 是一款非常流行的书写语言,使用了几天觉得非常不错,所以把学习过程也用 Markdown 写成笔记,一是练习其使用,二来也是方便日后查阅。同时也分享给那些受够了 word 并且想学习 Markdown 的小伙伴。本笔记分为以下几个部分:
- 认识 Markdown
- Markdown 学前准备
- Markdown 语法学习
1 认识 Markdown
1.1 什么是 Markdown
Markdown 是由 John Gruber 和 Aaron Swartz 创建的一种轻量级标记语言。
这种语言不是像 Java 一样用来开发软件的,而是用来编写文档的。它允许使用者以易读易写的纯文本格式来编写、保存文档。简单说 Markdown 就是定义了一组描述文件格式的语法。“轻量级”指的是这种语法非常简单,Markdown 精心挑选了一组少量的符号作为其语法标记,比如,以# 开头的行表示一级标题,## 开头的行表示二级标题。如文档中输入:
#一级标题
##二级标题
最终可以达到如下呈现效果
一级标题
二级标题
纯文本文件是最原始的文件格式,其内部所有的内容都按同样的方式显示,Markdown 以特殊的标记字符定义了文档的格式,使用支持 Markdown 语法的工具软件就可以显示出特定的效果。
1.2 Markdown 特点与用途
- Markdown 语法的目标是成为一种适用于网络的书写语言,实现易读易写。
使用 Markdown 格式编写的文档是以纯文本的形式保存的,其语法由少量的精心挑选的符号构成,作用一目了然易于接受,更接近于书写习惯。 - Markdown 以纯文本形式保存,兼容性最好,可以使用任何的文本编辑工具随意修改。
- Markdown 易于转换成其他任何格式,如 HTML,PDF,其他格式的电子书等。
- Markdown 可以内嵌 HTML 格式,和 HTML 格式比较,HTML 是一种发布格式,而 Markdown 则是一种侧重书写的格式。
- Markdown 以简洁的语法代替排版,使书写者的注意力集中在内容书写上,而不是排版,排版工作则可以在后期借助其他工具完成,升华一下,这其实是和 Linux 系统中分离设计思想是一致的,^-^。这和 word 形成了鲜明的对比。
- 同样是因为以纯文本的格式保存、传播,这更便于文档的版本追踪管理和多人协作,这也是 word 让人不爽的一个地方,呵呵,和 word 杠上了啊。
- Markdown 语法简洁,易于学习,其功能又比纯文本格式强大,所以其得到了 Github、Wikipedia、Stackoverflow 等网站和众多编辑软件的支持,也深得使用者的喜爱。现在越来越多的程序猿用其撰写技术文档,同时也有大量的人使用其些博客,笔记,还有很多人用其撰写书籍,比如 Gitbook 就是采用 Markdown 的一个书籍项目。
1.3 Markdown 增强版本
Markdown 还有一系列衍生版本,用于扩展 Markdown 的功能(如表格、脚注、内嵌HTML等等),同时,也能让 Markdown 格式的文本转换成更多的格式,例如 LaTeX,Docbook。
Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具,如 Pandoc;要么基于网站,如 GitHub 和 Wikipedia,在语法上基本兼容,但在换行等细节上也有改动。
小结
你还在为 word 版本不兼容,费时费力的排版苦恼吗,赶紧使用 Markdown 吧,什么?学习成本?前面说了 Markdown 之所以流行就是因为其简单,易学,10分钟!,是的10分钟你就可以学会。
Markdown 不仅仅简单,其功能比纯文本强大很多,更重要的是其语法规则更接近书写习惯,Markdown 是网络时代的最佳书写语言。
将内容编写和排版分离是 Markdown 的一个主要特色!
2 Markdown 学前准备
学习 Markdown 其实是件很简单的事情,只要掌握 Markdown 的语法,拥有一个文本编辑器就可以了。对于初学者建议还是使用专业点(至少是所见即所得)的编辑器,选择的编辑器至少有:
1. 语法高亮
2. 能即时的看到效果
3. 有在线的帮助(语法提示)
4. 工具的操作习惯符合你的日常操作习惯
当然了有些专业的编辑器功能比如上强大的多,包括快捷操作和格式转换等等。Markdown的编辑器主要包括:
- 专用的在线编辑器
- 专用的离线编辑器
- 现有编辑器 + Markdown 插件
- 现有浏览器 + Markdown 插件
2.1 在线Markdown 编辑器
- Cmd Markdown 非常不错的在线Markdown编辑器,支持LaTeX公式。
- [马克飞象]( “欢迎使用马克飞象”) 一款专为印象笔记(Evernote)打造的、简洁高效的 Markdown 编辑器,支持高亮代码块、LaTex 公式、流程图,本地图片上传甚至截图粘贴;提供桌面[离线客户端][1],支持移动端 Web;和印象笔记深度整合,支持选择笔记本和添加标签,支持从印象笔记跳转编辑,轻松管理。
- MaHua 一个在线编辑 Markdown 文档的编辑器:
- 方便的导入导出功能
- 编辑和预览同步滚动,所见即所得(右上角设置)
- vim 快捷键支持,方便 vim 党们快速的操作 (右上角设置)
- 强大的自定义CSS功能,方便定制自己的展示
- 有数量也有质量的主题,编辑器和预览区域
- 完美兼容 Github 的 Markdown 语法
- 预览区域代码高亮
- 所有选项自动记忆
- Dillinger 可导出为 HTML、PDF、Markdown 格式文件。
- Markable 可导出 HTML、Markdown 格式文件。
以上在线编辑器都有所见即所得的功能,但是需要网络。
2.2 Markdown 离线编辑器
MarkdownPad2 是 Windows 平台的所见即所得的 Markdown 编辑器。
- 为你提供了语法高亮和方便的快捷键功能,给您最好的 Markdown 编写体验。
- 无需猜测您的 语法是否正确;每当您敲击键盘,实时预览功能都会立刻准确呈现出文档的显示效果。
- 100%可自定义的字体、配色、布局和样式,让您可以将 MarkdownPad 配置的得心应手。
- MarkdownPad 支持多种解析引擎。
- 有了标签式多文档界面、PDF 导出、内置的图片上传工具、会话管理、拼写检查、自动保存、语法高亮以及内置的 CSS 管理器,您可以随心所欲地使用 MarkdownPad。
Haroopad 是一款Linux上的 Markdown 编辑器,使用 Chromium 作为UI,支持 Windows、Mac OS X和 Linux。主题样式丰富,语法标亮支持 54 种编程语言。 该编辑器界面,一边是代码编辑窗口,一边是预览窗口,可以实时更新。其邮件导出功能可以将文档发送到 Tumblr 和 Evernote。推荐 Ubuntu/Linux 用户使用该工具。
ReText 是 Linux 平台下一个使用 Markdown 语法和 reStructuredText (reST) 结构的文本编辑器,编辑的内容支持导出到 PDF、ODT 和 HTML 以及纯文本,支持即时预览、网页生成以及 HTML 语法高亮、全屏模式,可导出文件到 Google Docs 等。
Mou 是 Mac 平台上非常著名的针对开发者的 Markdown 编辑器。其具有实时预览,同步滚动,自动保存,自动补全,定制主题以及以 CSS/HTML/PDF 格式导出文件等特性。支持在编辑器内内联 HTML 代码,并且对中文,日文和韩文的输入非常友好。
2.3 另可以了解和关注
- Pandoc 可将多种文档格式,包括:Markdown, reStructuredText, textile, HTML, DocBook, or LaTeX 转成:
- HTML formats: XHTML, HTML5, and HTML slide shows using Slidy, Slideous, S5, or DZSlides.
- Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML
- Ebooks: EPUB
- Documentation formats: DocBook, GNU TexInfo, Groff man pages
- TeX formats: LaTeX, ConTeXt, LaTeX Beamer slides
- PDF via LaTeX
- Lightweight markup formats: Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile
- 简书 整合支持 Markdown 的笔记本和类 Medium 阅读社区,“简书”希望让作者专注于写作、读者专注于阅读。
* 注:*
另外还可以使用你熟悉的编辑器、浏览器增加插件的方式,比如使用 vim,sublime text编辑器以及 google 浏览器配置相应的插件进行编辑 Markdown 文档(支持 Markdown 语法高亮、导出其他格式预览等)。
3 学习 Markdown 语法
学习 Markdown 主要就是学习 Marddown 的语法,Markdown 的语法主要包括:
关于 Markdown 语法的学习,我们可以先学习基本语法,其他在使用中用到了再查询相关文档即可。
* 注:*
不同的 Markdown 工具对语法的支持可能或略有不同,请查阅相关工具的使用手册。
3.1 Markdown 基本语法
3.1.1 标题与文本段落
* 【学习目标】 *
- 掌握 Markdown 的标题和文本段落
* 【任务内容】 *
请使用文本编辑器或者专用的 Markdown 编辑器,完成如下这段文本的编辑。
* 【任务要点】 *
观察如上文本,可以看到其主要包括两部分内容:
- 标题:
本段文本包含两级标题,一级标题为“概述”,二级标题为“宗旨”。 - 文本段落
本段文本包含三段文字。
3.1.1.1 Markdown 标题
Markdown 支持两种标题的语法,类 Setext 和类 atx 形式。
类 Setext 形式是用底线的形式,利用三个以上连续的 “=” 表示一级标题,利用三个以上连续的 “-” 表示二级标题。示例如下:
注:
左侧为输入文本,右侧为显示效果。后续其他演示界面同此,不再解释。
对于类 Setext 形式的标题语法,目前查得的资料显示,其只表示两级标题,而且“=”或者“-”大于等于3个,多写些也无妨,有的为了追求美观可以和标题文字长度相同。如:
这是一级标题
===========
这是二级标题
-----------
类 Atx 格式的标题语法可以表示 6 级标题,这个和 HTML 的规范相同。类 Atx 格式的标题语法规则为:标题行首插入 “#”,1个 “#” 表示一级标题,2个 “#” 表示二级标题,以此类推 6个 “#” 表示六级标题。示例如下:
* 注:*
“#” 要在行首顶格写(有些特殊编辑器可能允许有小于等于 3 个的空格,但这不具有普遍意义,非常不推荐),为了美观也可以在标题后面也加入相等数量的 “#” ,这仅仅是为了美观,依个人习惯而定。如:
# 一级标题 #
## 二级标题 ##
### 三级标题 ###
#### 四级标题 ####
##### 五级标题 #####
###### 六级标题 ######
3.1.1.2 段落和换行
Markdown 中的段落由一个或多个连续的文本行构成,段落之间使用空行分隔(只包含空格或者制表符 [tab] 的行视为空行)。
一个段落的开始请不要使用空格或者制表符来缩进。
关于换行,如果想要换行,直接输入一个回车(插入换行符)一般起不到换行的效果,因为 Markdown 允许段内强制插入换行符(转成 HTML 时这个换行符并不会转换成<br>
标签),这个比较特别哈。要想达到换行的效果,可以在行尾输入多个(大于等于 3 个)空格或者输入制表符(tab)然后再回车。
* 【任务完成】 *
请根据 Markdown 的标题语法、段落与换行规则完成本任务要求的文本编辑。
3.1.2 强调
* 【学习目标】 *
- 掌握 Markdown 的强调(粗体与斜体)
* 【任务要点】 *
Markdown 中强调指的是 粗体 和 斜体。
Markdown 中标记 粗体 的语法是:
用在需要使用粗体显示的文本前后各加两个”*”或者”_”。Markdown 中 斜体 标记语法是:在需要使用斜体显示的文本前后各加一个”*”或者”_”。
注
不同的编辑器处理 “*” 和 “_” 时可能存在细节上的差异。如:使用某些编辑器时,如果你的 * 和 _ 两边有空白的话,它们就只会被当成普通的符号,有些编辑器则不会。这些细节,需要根据自己使用的编辑器来调整。
实例如下:
另外一款 Markdown 编辑器中粗体和斜体的语法略有区别,具体如下图所示。
3.1.3 分割线
* 【学习目标】 *
- 掌握 Markdown 的分隔线的语法
* 【任务要点】 *
Markdown 的分割线语法是:在一行中使用三个以上的 *(信号)、-(减号)或者_(底线)来实现。该行内不能有其他符号或文字,星号和减号中间允许插入空格。需要注意的是底线的方式不同的编辑器可能不同。示例如下:
Haroopad中实验底线方式的分割线未成功,示例如下:
3.1.4 删除线
* 【学习目标】 *
- 掌握 Markdown 的删除线的语法
* 【任务要点】 *
Markdown 删除线的语法是,使用”~~”把要标记为删除线的文本括起来。
需要注意的是:删除线不是所有的编辑器都支持,需要视使用的编辑器情况而定。
3.1.5 列表
* 【学习目标】 *
- 掌握 Markdown 的列表语法
* 【任务内容】 *
* 【任务要点】 *
Markdown 的列表包括无序列表和有序列表。
- 无序列表使用星号(*),加号(+),或者减号(-)标记
- 有序列表使用一个数字紧跟着一个英文句点(.)标记
注:
- 列表项标记(星号、加号、或者减号)一般放到行首,也可以缩进,缩进最多可以缩进3个空格。
- 列表项标记(星号、加号、或者减号)后面必须跟至少一个空格或者制表符。
无序列表案例如下:
有序列表案例如下:
注
有序列表前面的数字其实不影响列表项的序号,建议至少第一项从1开始。主要考虑未来Markdown 可能会支持有序列表的start属性。
如果不想让 Markdown 对有序列表排序,则可以在英文句点前使用 \ 转义,如:1\. 列表1 2\. 列表2 4\. 列表4
以上列表的效果为:
1. 列表1
2. 列表2
4. 列表4
列表可以嵌套,嵌套列表语法是:下一级要缩进4个空格或者1个制表符。示例如下:
列表项中可以使用“代码区块”和“区块引用”等,后面内容中可以看到“代码区块”和“区块引用”的语法详细说明,这里仅给出相关示例。
如果列表项中需要放入区块引用,则区块引用标记(>)需要缩进(不同的工具会有差异,有的工具不缩进也可以)。如:
列表项中使用“代码区块”时,代码区块需要缩进两次,即缩进8个空格或者2个制表符。
3.1.6 代码区块
* 【学习目标】 *
- 掌握 Markdown 的代码区块的语法
* 【任务要点】 *
Markdown 的代码区块语法是:
通过缩进4个空格或者1个制表符标记代码区块
有些工具支持通过使用三个以上的 ` 标记代码区块的开始和结束
使用“`标记区块可以指定改代码区块使用哪种语言进行语法高亮显示。
注:这种方法不同的工具会有差异。
示例如下:
行内代码区块:
Markdown支持行内代码区块:使用 “ 括起来的内容会被当做行内代码区块。如:
注:
代码区块内,一般的 Markdown 语法标记将失效。
3.1.7 使用超链接
* 【任务目标】 *
- 掌握 Markdown 文档中使用超链接的方法
* 【任务要点】 *
Markdown 支持行内和参考两种形式的,超链接语法,不论哪种方式,超链接文字都是使用[方括号]进行标记。
行内链接语法
[文字描述](网址 "标题")
- 标题 是可选的,如果有标题,当鼠标文字描述上面时,系统会显示标题的内容。
- 如果链接到相同主机上的资源,可以使用路径。
示例如下:
参考形式链接语法
参考形式的超链接语法分为两部分:
[文字描述][id]
[id]: 网址 "标题"
- 语法中文字描述部分的作用和行内形式相同,[id]指定了参考哪个链接。
- 可以在文件的任意地方,使用[id]:网址 "标题"
的格式给出具体的链接内容。
- 网址
和标题
间要有空格。
- id 可以是字母、数字、空格和标点符号,不区分大小写。
- 网址并不显示,只在产生链接的时候起作用。
- 网址可以使用<>括起来。
- 标题是可选的,标题可以使用单引号,也可以使用双引号括起来。
- 标题可以放到下一行,可以缩进。
示例如下:
Markdown 支持隐式超链接方式,在标题和ID相同的情况下,可以使用隐式链接,使用时只需将id省略(保留空的[])即可。
自动链接
Markdown 支持自动链接,要使用自己链接是需要将网址使用<>括起来即可。如:
3.1.8 使用图片
* 【学习目标】 *
- 掌握 Markdown 文档中使用图片的方法
* 【任务要点】 *
Markdown 使用图片的语法和超链接的语法相似,同样也有行内和参考两种格式。
行内格式语法

参考格式语法
![文本][id]
[id]: 路径/图片文件名 "标题"
注:
如果需要制定图片大小等,则需要使用html的标记。
3.1.9 区块引用
* 【任务目标】 *
掌握 Markdown 的区块引用方法
* 【任务要点】 *
Markdown 使用 > 符号来标记区块引用,相对比较灵活,可以在每行开始加入 > 标记区块,也可以在每段的第一行的开始使用 > 标记区块引用。如:
区块引用可以嵌套,嵌套只需要根据逐级加 > 标记即可,如:
区块引用中也可以使用其他的 Markdown 语法标记,包括标题、列表、代码区块等。
3.1.10 转义字符
* 【学习目标】 *
- 掌握 Markdown 的转义字符的使用方法
* 【任务摘要】 *
Markdown 使用反斜杠 \ 来表示转义字符,以下符号需要使用转义字符来输入:
\ 反斜线
` 反引号
* 星号
_ 下划线
{} 花括号
[] 方括号
() 圆括号
# 井号
+ 加号
- 减号
. 句点(英文)
! 叹号
3.1.11 表格
* 【学习目标】 *
- 掌握 Markdown 中使用表格的方法
* 【任务摘要】 *
Markdown 表格使用 | 分隔列,使用 - 分隔行(第一行下面)每列中使用 : 表示居左、居中、居右。示例如下:
3.1.12 单行长文字
* 【学习目标】 *
- 掌握 Markdown 中使用单行长文字的方法
* 【任务摘要】 *
Markdown 要使用单行长文字,在要单行显示的长文字前加入4个空格或者1个制表符。
注:
这个语法和代码区块的语法相同,输入单行文字中间是不要换行。
是否支持该语法,要视编辑器支持情况而定。
示例如下: