我们为什么要使用 Markdown

Markdown 是一种正在流行起来的「标记语言」,通常为程序员群体所用。但现在,不光是程序员,对于普通的文字编辑者而言,Markdown 的优势也越来越明显了。

从前码字时我们面临着什么困境

以前,大部分的人使用 Word 或 Pages 码字、写作、写论文,过去的文档也大都以.doc.docx格式或是.pages格式储存。还有人为了编辑简洁、保证文稿发给谁都能正常打开,会用.txt 格式。

.doc.pages格式有如下问题:

  • 文件格式难兼容:不一定谁都能打开。用 Windows 的人打不开.pages文件,用旧版 Word 的人不一定能打开你用新版 Word 写的稿子,而且在其他操作系统下(虽然这是少数)打开.doc的体验一向很糟糕。

  • 显示效果不统一:对方看到的稿子的样子和你自己看到的可能差别很大,可能是因为不同的软件版能,可能是不同的系统平台。

  • 功能繁复分人心:写 Word 文档的时候,我们经常浪费大量时间在 Word 本身上,特别是那80%我们用不到的功能,而且 Word 越来越臃肿的身躯,让每一次打开文件都是一种痛苦。

  • 排版耗时又耗力:使用 Word 时,我们会花费大量力气去排版,试图让文档变得漂亮一些。是粗体还是斜体,是宋体还是黑体,对创作来说,有那么重要吗?而且有相当一部分人为了简便,甚至不能正确的设置标题级别,仅仅是使用变大字号和加粗来表明「我是一个标题」。

  • 版本管理真着急:每一位自杀的写作者的电脑文档里面,都必然有一个 Word 文档,从V1.0到V20.0的无数版本……这样的版本管理方式是落后且低效的。

  • 协同工作在哪里:想想你让一位合作的编辑帮你改书有多么痛苦,一个Word文档来,一个Word去,使用那极其难用的修订与审阅功能,你就理解了。

  • 盗版卄年不心虚:Office 已经是你电脑上用得最久的盗版软件,导致心情不佳。

标记语言显神威

既然使用 Word 来码字这么闹心,我干脆写个纯文档算了,或者直接打开记事本,写个.txt多简单!可是.txt格式的问题在于没有样式:收到文档的人甚至不知道哪里是标题,哪里需要加粗,哪里是引用,更别说在文档里插个图片了。

有人肯定灵机一动,我在旁边标注一下不就行了么:

在山的那边海的那边有一群蓝精灵(这是一个标题)

作者实在太机智,是的,看到稿子的正常人应该都会把(这是一个标题)当做备注处理,剔除于正文之外。其实,这就是「标记语言」的原型了,不过试想一下,如果一篇文章充满了

在山的那边海的那边有一群蓝精灵(这是一个标题)

他们(强调)活泼(强调结束)又聪明(这是一个子标题)

他们调皮(注:蓝精灵们喜欢恶作剧)又灵敏(这也是一个子标题)

的确挺让人抓狂的,所以为了约定俗成,天才的 John Gruber 和 Aaron Swartz[^Swartz] 共同发明了 Markdown 这门轻量级的标记语言,它使用像#*-这样的符号来标记标题强调甚至列表

到底什么是 Markdown

在详细介绍 Markdown 之前,我不得不提一提 Markdown 的精神理念。

Markdown 的目标是「易读易写」。

为实现这一目标,Markdown 的语法几乎全部由标点符号构成,这些标点符号都是精心挑选而来,是与写作的习惯一脉相承的,每一个符号都尽量做到能望文生义。如:星号 * 括着一个单词(Markdown 中表示强调)看上去就像*强调*;Markdown的列表看上去就像列表;Markdown 的引文就像引文,和你使用 e-mail 时的感觉一样。

它实际上是个非常简单、非常容易学习的语法。这个语法简单到每个人都可以在5分钟以内学会,这样低廉的学习成本可以让你毫无负担地投入它的怀抱。

有了 Markdown 之后,我们编辑文字时就可以专注于文字的内容本身,而不用分心去关注文字的排版,甚至于可以说在它简单到不能再简单的语法下,你根本就没有思考排版的空间,也没必要思考。也正因为 Markdown 的语法格式足够简单,所以开发者非常容易生成漂亮的版式,一切既有的CSS都可以简单修改之后套用,比如这样:Marxico

再比如这样CMDMarkdown

所以为什么我们要使用 Markdown

用 Markdown 有如下好处:

  1. 兼顾了 .txt 文件什么系统环境都能打开和 .doc.pages 文件系统的排版效果。因为一方面 Markdown 本身就是纯文本,他可以保存为自己专有的 .md 格式,也可以保存为 .txt 等任何的纯文本文件格式,所以什么系统都能打开。而它简单的语法让你可以用它来标记文本丰富的样式。

  2. 由于是纯文本,Markdown 文稿也不会因为未来软件升级而产生不同版本之间的兼容问题,不会出现「此文件是由较高版本的 Microsoft Word 创建的。是否要下载兼容包以便使用此文件?」的恼人问题,也不会出现好不容易下载兼容包了之后发现打开文件全变了样的尴尬。
    想要获得丰富的表现样式,你只需要使用不同的CSS来表现这些标记元素即可,对于普通用户而言,就是用不同的「工具」或者「浏览器」来打开 Markdown 文档以获得不同的表现样式。

  3. Markdown 转换为其他格式非常的方便。HTML 是整个万维网(web)的标记语言,但更重要的是,它也是目前主流电子书格式所用的标记语言。无论是 .EPUB.mobi,还是 Kindle 用的专有格式 .azw,都只是把一堆 HTML 文件打包而已。另外,后面的介绍的许多工具都能轻松地把 Markdown 文档转换成精美的 PDF 文档存储,便于出版和交流传播。


Markdown 简明语法

前文我介绍了使用 Markdown 进行文字编辑的优势,下面我希望用简洁明了的方式为大家介绍一下 Markdown 的基本语法,进一步向大家揭示 Markdown 的强大之处。

段落和换行

Markdown 以一段完整的空行作为段落间隔,「完整」的意思是允许你包含 ⌴ space 空格符和 ⇥ tab 制表符。单独的一个 ↵ enter 回车符换行并不被认为另起了一个段落,哪怕你像中文写作一样换行以后用 ⇥ tab 制表符缩进。

我建议大家养成用一个完整的空行分割段落的习惯,这样对于别人阅读你的文章是很友好的,密密麻麻「摩肩接踵」的文字会让人感到头昏脑胀。

标题

Markdown 支持两种标题的语法,类 Setext 和类 atx 形式。

类 Setext 形式的标题在标题下一行使用连续两个及以上=符号表示一级标题,使用连续两个及以上-符号表示二级标题,例如:

1
2
3
4
这是一级标题
==
这是二级标题
---

这是一级标题

这是二级标题

类 Atx 形式则是在行首插入1到6个 # 符号,对应到标题1到6阶, # 符号和标题之间需要一个空格,例如:

1
2
3
4
5
6
# 这是一级标题
## 这是二级标题
### 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题

这是一级标题

这是二级标题

这是三级标题

这是四级标题

这是五级标题
这是六级标题

区块引用

Markdown 标记区块引用是使用类似 e-mail 中用 > 的引用方式,在需要引用的文字之前使用 > 符号即可,注意在 > 符号与引文之间需要一个空格。

当你需要进行区块引用,也就是多段引用时,只需在每段之前都加上 > 符号,包括空行。

引用允许嵌套使用,引文内的引文只需要连续使用 > 符号即可。

引文内任何 Markdown 语法依旧生效,比如列表、标题等。例如

1
2
3
4
> 这是引文的第一段
> 这是引文的第二段
>> 这是内嵌的二级引文
> ### 引文内还可以使用标题等其他语法标记

这是引文的第一段
这是引文的第二段

这是内嵌的二级引文

引文内还可以使用标题等其他语法标记

列表

Markdown 支持非常直观的无序列表和有序列表。

无序列表使用 + 加号、- 减号和 * 星号加空格来标识,列表的嵌套使用 ⌴ space 空格符(建议使用4个)或 ⇥ tab 制表符缩进,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这是一个无序列表
+ 项目1
+ 项目2
+ 项目3

这是一个无序列表
- 项目1
- 项目2
- 项目2.1
- 项目2.2
- 项目3

这是一个无序列表
* 项目1
* 项目2
* 项目3
* 项目3.1
* 项目3.1.1

这是一个无序列表

  • 项目1
  • 项目2
  • 项目3

这是一个无序列表

  • 项目1
  • 项目2
    • 项目2.1
    • 项目2.2
  • 项目3

这是一个无序列表

  • 项目1
  • 项目2
  • 项目3
    • 项目3.1
      • 项目3.1.1

有序列表也非常的直观,只需要使用数字接着一个 . 英文句点然后空格,就可以标识一个有序列表了。值得一提的是任何一个数字都可以触发有序列表,并按正确的数序予以显示。例如:

1
2
3
4
5
6
7
8
9
这是一个有序列表
1. 项目一
2. 项目二
3. 项目三

这也是一个有序列表
8. 项目一
1. 项目二
3. 项目三

这是一个有序列表

  1. 项目一
  2. 项目二
  3. 项目三

这也是一个有序列表

  1. 项目一
  2. 项目二
  3. 项目三

强调

Markdown 使用 * 星号和 _ 下划线作为标记强调字词的符号,被 *_ 包围的字词会被显示为斜体,用两个 *_ 包起来的话,则会被显示为粗体,用两个 *_ 包起来的话,则会被显示为粗斜体,例如:

1
2
3
_我是一行斜体字_
**我是一行粗体字**
***我是一行粗斜体***

我是一行斜体字
我是一行粗体字
我是一行粗斜体

在这里说一句,因为中文字体鲜有斜体设计,大部分字体显示效果都不尽人意,所以不建议大家使用斜体强调中文。

代码标识和代码区块

作为一名码农常常需要往自己的文稿中写入大量的代码,而代码的排版和显示甚至于使用的字体与普通文字都是很不一样的,Markdown 对于代码区块有很好的支持。值得一提的是,代码区块中的所有输入都会按照原样输出,包括连续的空格。

Markdown 中的代码标识主要有行内代码和代码区块两种。行内代码用一对 ` 反引号`(位于键盘 ⎋ esc 键下方)标识。例如:

1
我是可爱的 \`⌘ command\` 键,当我设置变量 \`int a = 20;\` 时,就可以内嵌行内代码了。

我是可爱的 ⌘ command 键,当我设置变量 int a = 20; 时,就可以内嵌行内代码了。

当需要输入大段的代码时,只需要用一对连续3个 ` ` ` 反引号 ` ` ` 将代码区块包围(enclose)起来就可以了,第一组反引号后可以标注代码块的语言以帮助编辑器识别,例如:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <iostream>

int main()
{
printf("Hello world!"); // 教科书的写法
puts("Hello world!"); // 我最喜欢的
puts("Hello" " " "world!"); // 拼接字符串
std::cout << "Hello world!" << std::endl; // C++风格的教科书写法

return 0;
}

还有一种产生区块代码的方式,是在每段的段首使用多于1个 ⇥ tab 制表符或者4个 ⌴ space 空格符进行整体缩进。由于这种方法不方便使用而且极易混淆视听,所以我不推荐大家使用,也不多做介绍了,大家知道即可。

hilight.js 支持的语法有:

  • 1C
  • ActionScript
  • Apache
  • AppleScript
  • AsciiDoc
  • AspectJ
  • AutoHotkey
  • AVR Assembler
  • Axapta
  • Bash
  • Brainfuck
  • Cap’n Proto
  • Clojure REPL
  • Clojure
  • CMake
  • CoffeeScript
  • C++/cpp
  • C#
  • CSS
  • D
  • Dart
  • Delphi
  • Diff
  • Django
  • Dockerfile
  • DOS .bat
  • Dust
  • Elixir
  • ERB (Embedded Ruby)
  • Erlang REPL
  • Erlang
  • FIX
  • Fortran
  • F#
  • G-code (ISO 6983)
  • Gherkin
  • GLSL
  • Go
  • Gradle
  • Groovy
  • Haml
  • Handlebars
  • Haskell
  • Haxe
  • HTTP
  • Ini
  • Java
  • JavaScript
  • JSON
  • Julia
  • Kotlin
  • Lasso
  • Less
  • Lisp
  • LiveCode
  • LiveScript
  • Lua
  • Makefile
  • Markdown
  • Mathematica
  • Matlab
  • MEL
  • Mercury
  • Mizar
  • Monkey
  • Nginx
  • Nimrod
  • Nix
  • NSIS
  • Objective C
  • OCaml
  • Oxygene
  • Parser3
  • Perl
  • pf
  • PHP
  • PowerShell
  • Processing
  • Python profile
  • Prolog
  • Protocol Buffers
  • Puppet
  • Python
  • Q
  • R
  • RenderMan RIB
  • Roboconf
  • RenderMan RSL
  • Ruby
  • Oracle Rules Language
  • Rust
  • Scala
  • Scheme
  • Scilab
  • SCSS
  • Smali
  • Smalltalk
  • SML
  • SQL
  • Stata
  • STEP Part 21 (ISO 10303-21)
  • Stylus
  • Swift
  • Tcl
  • TeX
  • Thrift
  • Twig
  • TypeScript
  • Vala
  • VB.NET
  • VBScript in HTML
  • VBScript
  • Verilog
  • VHDL
  • Vim Script
  • Intel x86 Assembly
  • XL
  • HTML, XML- >

分割线

你可以在一行中用三个以上的 * 星号、 - 减号、_ 下划线来建立一个分隔线,行内不能有其他东西。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:(希望大家多使用分割线来分割自己文章的区块,提高可读性)

1
2
3
4
---
___
- - - - -
__ _ ___

链接

Markdown 中对链接和图片采取很舒服的表达方式,我们先来看看链接。

Markdown 支持两种形式的链接语法:行内式和参考式两种形式。

行内式的语法如下:

1
2
[链接文字](链接地址)
[链接文字](链接地址 "title属性")

其中(链接地址)如果是绝对地址请不要忘记加上http://"title"属性是指鼠标移到链接上显示的文字,这个属性还可以应用在空链接上实现特殊的效果,例如:

1
2
3
4
欢迎关注我的微博[@悦华](http://www.weibo.com/quentinchen/)
欢迎莅临我的[简书](http://www.jianshu.com/users/6e06e4695b9a/ "这是悦华的简书")
这是[百度](http://www.baidu.com/)
[请把鼠标悬停在这里](#no-link "你会看到一条注释"),不要点击

欢迎关注我的微博@悦华
欢迎莅临我的简书
这是百度
请把鼠标悬停在这里,不要点击

参考式的链接是在链接文字的括号后面再接上另一个方括号,而在第二个方括号里面要填入用以辨识链接的标记,接着,在文件的任意处,你可以把这个标记的链接内容定义出来:

1
2
3
4
5
6
7
8
9
10
11
12
欢迎关注我的微博[@悦华][weibo]
欢迎莅临我的[简书][jianshu]
这是[百度][1]
[请把鼠标悬停在这里][2],不要点击

其间可以有
任意多的文本

[weibo]:http://www.weibo.com/quentinchen/
[jianshu]:http://www.jianshu.com/users/6e06e4695b9a/ "这是悦华的简书"
[1]:http://www.baidu.com/
[2]:#no-link "你会看到一条注释"

欢迎关注我的微博@悦华
欢迎莅临我的简书
这是百度
请把鼠标悬停在这里,不要点击

其间可以有
任意多的文本

图片

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

Markdown 使用一种和链接很相似的语法来标记图片,只需要在链接的语法前面加一个 ! 感叹号就可以了,同样也允许两种样式: 行内式和参考式。

行内式的语法如下:

1
2
![替代文字](链接地址)
![替代文字](链接地址 "title属性")

其中[替代文字]是指当图片加载不出来时显示的替代文字以提高文章的可读性,例如:

1
2
3
![Aaron Swartz](http://pic.baike.soso.com/p/20130113/20130113123158-66539251.jpg "Markdown 开发组帅哥 Aaron Swartz")

![这就是一张裂掉的图(╬ ̄皿 ̄)凸](nothing)

Aaron Swartz

这就是一张裂掉的图(╬ ̄皿 ̄)凸

图片的参考式插入和链接的参考式是一样的,我就不做过多的赘述了。

想必大家也发现了,由于 Markdown 是纯文本语言,里面是不可能真的插入一张照片的,除非使用工具(后文会介绍)直接拖拽图片进来,否则我们还需要借助图床来插入图片,下面为大家推荐几个好用的图床:

自动链接

Markdown 提供了一种快捷方式「自动地」定义链接和 E-mail 地址:直接用一对尖括号把 URL 或 E-mail 地址包住。这表示链接文本就是 URL 本身,E-mail 文本就是 E-mail 本身。这样你就得到了一个可点击的链接,如:

1
<http://example.com/>

自动 E-mail 地址工作方式相似,只有一点不同。Markdown 自动的用一些十进制和十六进制数字表示你的 E-mail,以防止遭遇垃圾邮件袭击。 例如:

1
<address@example.com>

会被转换为:

1
<a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>

浏览器会将它渲染为一个可点击的链接,并正确显示 address@example.com

这种实体编码的小方法可以骗过一些收集邮件地址的机器人,不过它确实无法骗过所有的机器人。有总比没有强,聊胜于无。能阻止一点就阻止一点好了。

反斜杠

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

1
\*我只想用星号来强调这段内容\*

*我只想用星号来强调这段内容*

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

  • \ 反斜杠
  • * 星号
  • _ 下划线
  • {} 花括号
  • [] 方括号
  • () 园括号
  • # 井号
  • + 加号
  • - 减号
  • . 英文句点
  • ! 敢叹号
  • ` 反引号

Markdown 进阶语法

为适应更多更复杂的描述,尤其是理工科文字工作者的编辑需求,Markdown 语言扩展出了 MultiMarkdown ,简称 MMD。MMD有更多的标识,使得 Markdown 的「描述」能力大大增强。(以下介绍的语法并非所有的解释器都能识别,但肯定也会逐渐得到广泛认可)

锚点链接

锚点是 HTML 文档内部链接的一种形式,既然 Markdown 继承于 HTML,是它的一个子集,那应该对锚点也是支持的,所以我们可以使用

1
<a id="name"></a>

代码在文档的任意一处设置锚点,然后将

1
2
[链接文字](链接地址)
[链接文字](链接地址 "title属性")

中的 (链接地址) 改为相应的 (#name) 即可。例如:

我在前面「图片」的那个小节设置了一个 id="photo" 的锚点,那么下面的代码将会成功的链接那个锚点:

1
[如何在 Markdown 中插入图片](#photo)

如何在 Markdown 中插入图片

LaTeX 公式[^LaTeX]

LaTeX 的数学公式主要有两种,即行内公式(Inline Formulas)和块级公式(Display Formulas)。行内公式内嵌于正文文本中间,与正文文字行高相等;块级公式则单独成行。

行内公式

$...$符号包围的 LaTeX 代码,例如:

1
这样的代码可以生成如`$x^n+y^n=z^n$`这样的行内公式。

这样的代码可以生成如$x^n+y^n=z^n$这样的行内公式。

块级公式

$$...$$符号包围的 LaTeX 代码:

1
这样的代码可以生成如`$$x=\dfrac{-b\pm\sqrt{b^2-4ac}}{2a}$$`这样的块级公式。

这样的代码可以生成如$$x=\dfrac{-b\pm\sqrt{b^2-4ac}}{2a}$$这样的块级公式。

对理工科的同学而言,LaTeX 公式的插入是一个非常值得探讨的话题,我在另一篇文章《Markdown 下 LaTeX 公式、编号、对齐》中做了深入的介绍,感兴趣的读者可以打开看看。

表格

表格是纯文本格式文字比较难以表达的一个部分,Markdown 在这一点上做的也不是非常出彩,下面的例子是一个表格绘制语法的展示:

1
2
3
4
5
| 项目        | 价格   |  数量  |
| -------- | -----: | :----: |
| 计算机 | $1600 | 5 |
| 手机 | $12 | 12 |
| 管线 | $1 | 234 |
项目 价格 数量
计算机 $1600 5
手机 $12 12
管线 $1 234

表格由表头和表项组成,用 |---|符号组隔开即可,其中 |:--| 表示表项左对齐, |:--:| 表示表项居中对齐,|--:| 表示表项右对齐。

删除线

使用 ~~ 包围文本表示删除线,例如:

1
~~这是一段错误的文本。~~

这是一段错误的文本。

注脚

使用 [^keyword] 表示注脚,在文章的任意位置输入 [^keyword]: 脚注内容 可以在文章最后生成注脚。

1
2
3
4
5
6
7
这是一个注脚[^footnote]的样例。

这是第二个注脚[^footnote2]的样例。

[^footnote]: 这是一个*注脚*的**文本**。

[^footnote2]: 这是另一个*注脚*的**文本**。

这是一个注脚^footnote的样例。

这是第二个注脚^footnote2的样例。

流程图

1
2
3
4
5
6
7
8
st=>start: 开始
e=>end: 结束
op=>operation: 问你个事儿
cond=>condition: 这篇文章写的好么

st->op->cond
cond(yes)->e
cond(no)->op
1
2
3
4
5
6
7
8
st=>start: 开始
e=>end: 结束
op=>operation: 问你个事儿
cond=>condition: 这篇文章写的好么

st->op->cond
cond(yes)->e
cond(no)->op

以及时序图:

1
2
3
4
5
6
李雷->韩梅梅: 韩梅梅,你现在好吗,他好吗?
Note right of 韩梅梅: 迟疑了一会儿
韩梅梅-->李雷: 我很好,他也很好! 你呢,你还好吗,她好吗?
Note left of 李雷: 顿了顿
李雷->韩梅梅: 我很好,她刚才告诉我她也很好。
Note right of 韩梅梅: 无语凝噎
1
2
3
4
5
6
李雷->韩梅梅: 韩梅梅,你现在好吗,他好吗?
Note right of 韩梅梅: 迟疑了一会儿
韩梅梅-->李雷: 我很好,他也很好! 你呢,你还好吗,她好吗?
Note left of 李雷: 顿了顿
李雷->韩梅梅: 我很好,她刚才告诉我她也很好。
Note right of 韩梅梅: 无语凝噎

提示:想了解更多,请查看流程图语法以及时序图语法

内容目录

在段落中填写 [TOC] 以显示全文内容的目录结构。

[TOC]


Markdown 编辑器推荐

诚然,简便轻巧的 Markdown 语言只需要一个小小的记事本或者文本编辑就可以轻松胜任,但正所谓「工欲善其事,必先利其器」,「好马还需好鞍配」,Markdown 如果配上一个强大的编辑器,那肯定会让自己感到舒心,让编辑工作事半功倍。

什么样的编辑器才是一个好的编辑器呢?

首先,作为一门「标记型语言」,最重要的就是能够实时查看自己的「标记」效果是否正确。所以,「分屏显示,同屏滚动」是一款优秀编辑器的基本功能。其次,能对 Markdown 的语法有良好的支持,尽可能支持最新的扩展语法。然后,便是界面、操控、性能、特性等等一堆需要关心的东西,下面我们就来看看哪些编辑器荣登我的推荐榜。

马克飞象

马克飞象是一款专为印象笔记(Evernote)打造的 Markdown 编辑器,通过精心的设计与技术实现,配合印象笔记强大的存储和同步功能,带来前所未有的书写体验。

Marxico

虽说马克飞象是专为印象笔记而设计,但是对于平常 Markdown 文档的书写而言,也绝对是编辑器中的佼佼者。它有非常多的优点:

  • 支持离线:在线的 Markdown 编辑器有很多,大多都功能完备,制作精良,但是需要联网才能打开不免让人觉得有时候没网只能干着急。现在,在电脑有 Chrome 浏览器的情况下,马克飞象已经可以作为离线应用下载了。
  • 语法丰富:支持高亮代码块,自动识别代码语言;插入丰富的 LaTeX 公式,是理工科同学工作学习好帮手;其还支持 [toc] 目录自动生成、html 语言扩展和注脚等众多 MultiMarkdown 扩展。
  • 得心应手:支持便捷的插入图片助手,无论是本地上传/图片URL/拖放图片/直接截图粘贴,随心所欲。
  • 界面美观:作为一名颜控,我不得不说马克飞象的界面非常美观。分屏编辑时,两边屏幕都是滚屏关联的,左边的源码会根据输入的标记语言自动变换样式,配色多样;右边的预览窗口可以试试看到文档的渲染效果,其渲染的 CSS 样式大方得体,淡雅清丽,非常耐看。当然你也可以手动更改 CSS 样式,调整出你最喜欢的渲染效果。
  • 深度整合:支持选择笔记本和添加标签,支持从印象笔记跳转编辑,轻松管理。这是马克飞象的主打特色,就是和印象笔记的双向同步功能。不管是在国内还是国际上,印象笔记[^evernote](Evernote International)都是非常主流的笔记管理工具。值得一提的是中文版马克飞象能与印象笔记和 Evernote 绑定,同步笔记是其 Premium 功能,年功能费79元。国际版 Marxico 只能绑定 Evernote,但是同步笔记功能免费。
  • 多样导出:马克飞象支持文档导出为 Markdown 的 .md 格式(纯文本),HTML 的 .html 格式(可以用任何一款主流浏览器打开),以及出版物发行文档 .pdf 格式。
  • 美中不足:我想想,代码区块在某些情况下标识不合理,比如代码区块内的 LaTeX 代码。代码区块不支持行号,你可以自己用 CSS 修改。

作业部落 - CMD Markdown

CDM Markdown是大神@ghoster和他的团队开发的一款在线 Markdown 编辑器。

作业部落 - CMDMarkdown

欢迎使用 Cmd - 在线 Markdown 编辑阅读器

我们理解您需要更便捷更高效的工具记录思想,整理笔记、知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。

您可以使用 Cmd Markdown:

  • 整理知识,学习笔记
  • 发布日记,杂文,所见所想
  • 撰写发布技术文稿(代码支持)
  • 撰写发布学术论文(LaTeX 公式支持)

基本上马克飞象拥有的功能,除了马克飞象主打的与印象笔记同步之外,它都有了,而与马克飞象不同的是:

  • 更加完善的代码高亮系统,识别更精准,排版更漂亮,而且支持行号。
  • 带有社交属性的发布与分享系统。CDM Markdown 是作者的网站作业部落的一个编辑工具,所以你编辑的文稿都会储存在作业部落的服务器上,为了保障数据安全,CMD Markdown 会将你每一次击键的内容保存至云端,你无需担心浏览器崩溃,机器掉电或者地震,海啸——在编辑的过程中随时关闭浏览器或者机器,下一次回到 CMD Markdown 的时候继续写作。同时,你的思想和知识可以通过这个平台,连同优质的阅读体验,将他们分享给有相同志趣的人,进而鼓励更多的人来到这里记录分享他们的思想和知识。
  • 在网络环境不稳定的情况下记录文字一样很安全!在你编辑文档的时候,如果电脑突然失去网络连接,CMD Markdown 会智能切换至离线模式,将您后续键入的文字保存在本地,直到网络恢复再将他们传送至云端,即使在网络恢复前关闭浏览器或者电脑,一样没有问题,等到下次开启 CMD Markdown 的时候,它会提醒你将离线保存的文字传送至云端。
  • 文章可以和别人协同编辑,以自然的方式让别人进行批注

较为遗憾的是,由于开发时间还短,CMD Markdown 也有许多不尽如人意的地方,例如:

  • 并没有离线的客户端
  • .pdf.html 导出还是乱码

我和作者@ghoster联系后,@ghoster告诉我说,这些功能都在做了,很快就会更新面世,所以,让我们好好期待吧!

简书

简书是一个将写作与阅读整合在一起的网络产品。旨在为写作者打造最优秀的写作软件 ,为阅读者打造最优雅的阅读社区。

jianshu

简书的中文排版效果非常好,与作业部落不相伯仲,文本颜色更加丰富。研究表明,在淡黄色的背景下阅读深蓝色或黑色的文字让人的眼睛觉得最舒适,这就是简书

简书的强大还在于它超级强大的的版本管理,你每一次的文档保存都会被记录,你可以回到文档的任一个版本,彻底告别 v1.0 v2.0 v3.0 的时代。而且,你所有的文档只需要一键就可以打包下载到本地,储存为 .md 文档。

简书还提供了十分强大博客和社交的功能,上面聚集了成千上万的优秀作者。

不过,简书对于理工科的公式、代码输入,还有许多 MultiMarkdown 并不是很支持。所以如果你是一名文科文字编辑者,轻巧简便,淡雅脱俗的简书就是你的不二选择!

终端软件

刚才介绍的编辑器都是在线编辑器,下面再给大家推荐几款终端编辑器:

  • Mou - 一个 Mac OS X上的Markdown编辑器。
  • MacDown - Mac OS X 上的 Markdown 开源编辑器,作者称其深受 Mou 启发。
  • MarkdownPad - Windows上的全功能 Markdown 编辑器。
  • Haroopad - Linux 上的优秀 Markdown 编辑器。

这些软件在终端都有完善的功能和不错的表现,大家可以根据自己的平台选择,作为「记事本」和「文本编辑」的替代也是相当不错的。

至于移动端,由于屏幕大小受到限制,我认为使用系统自带的「文本编辑器」就可以了,并不需要特别的工具。


结语

花了几个日日夜夜的功夫,终于把这篇文章写完了,其间为了找参考资料和构思全文布局,花了不少时间和心思。希望这篇文章可以帮到大家,带大家走进 Markdown 的世界。如果大家有什么问题的话,可以到我的微博给我留言,也可以给我写 E-mail。最后,希望喜欢这篇文章的朋友多多转载。谢谢大家耐心看完!(看到这里的都是真爱

微博:@悦华
邮箱:quentin.chen@foxmail.com


参考

Markdown - John Gruber - Daring Fireball
Markdown - 维基百科
Markdown 语法说明 (简体中文版) - Wow!Ubuntu
Markdown 语法 - shukebete - 图灵社区
Markdown 写作浅谈 - 阳志平
Markdown - Macin Chen
为什么作家应该用 Markdown 保存自己的文稿 - Lawrence Li
献给写作者的 Markdown 新手指南 - 简书
Cmd Markdown 简明语法手册
如何创建和链接到 Multimarkdown 命名锚 - CodeGo
Markdown 编辑器之比较 - 怀瑾握瑜

[^Swartz]: Aaron Swartz,1986年11月8日-2013年1月11日,一位程序员、作家、政治组织策划人和积极行动主义者。他年仅14岁就参与创造RSS 1.0规格,因而在程式设计圈当中声名大噪。2011年7月19日他被指控自 JSTOR 非法下载大量学术期刊文章,并遭联邦政府起诉被捕,因而获得主流媒体关注。Swartz 是 Demand Progress 和 Progressive Change Campaign Committee 的共同创办人。他曾住在美国马萨诸塞州的剑桥,于2013年1月11日自杀。

[^LaTeX]: LaTeX 是一种基于 TEX 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。

[^evernote]: 印象笔记帐户和 Evernote 国际版帐户使用同一款软件,但帐户相互独立(可以用同一个邮箱在两边注册)。Evernote 国际版帐户服务器在国外。印象笔记帐户服务器在国内,有更快更稳定的同步速度和更完善的用户支持服务,并专门为国内用户增加如收藏微信和微博等本地化功能 。