返回

在 Kindle 上阅读 Markdown 文档

其实我一直希望 Kindle 能够成为我知识管理的一部分,我们此刻所处的这个时代实则是一个信息爆炸的时代。我们每天都不得不去面对各种各样的信息,可这些信息中有多少是我们真正需要的呢?在一个信息碎片化的时代,有人说我们要懂得如何去利用碎片化的时间,有人说我们要懂得如何去高效查找需要的信息,微信和微博这类社交产品加速了信息的碎片化,或许当我们发现自己无法再集中精力去做一件事情的时候,我们就应该停下来反思如何去做好个人知识管理,我一直希望 Kindle 可以成为我知识管理的一部分,因为 Kindle 的阅读体验完全超越主流的电子设备,而且它可以让我们更加专注地去关注内容本身,Kindle 的同步机制为了提供了良好的知识管理契机,所以这篇文章我主要想分享我在以 Kindle 作为知识管理载体这件事情上的想法,希望对大家有所启发。

记录,成为更好的自己

相信大家都有在阅读中收集和整理内容的习惯,尤其是当我们需要在写作过程中参考大量资料的时候。对博主而言,写博客其实是我学习和理解技术的一种方式,我始终相信:写作是一种自我鞭策式的学习方法。当我们通过描述来向别人传达一种概念时,如果连自己都没有想清楚其中的关节,那么我们必然无法想别人清晰地传达这种概念。或许我们会畏惧犯错,畏惧向别人传达出错误的概念,可是如果你永远不愿意迈出那一步,那么我们就永远无法知道自己的弱点在什么地方。所以,当我们尝试对自我进行知识管理的时候,我们就需要一种良好的方式来管理这些零散的知识,在这里 Markdown 和 Kindle 会成为我们的强力工具,来帮助我们收集和整理各种各样的信息,正如我在写这篇博客的时候,我需要 Markdown 文档撰写和 Kindle 电子书格式的相关内容,我可以快速地从我的为知笔记中找到参考内容。

我最早一直使用网易的“有道云笔记”来做笔记,选择“有道云笔记”更多的原因是我使用着“网易云音乐”、“网易邮箱”和“网易云阅读”等众多的网易旗下产品。虽然国内不乏有 OneNote、为知笔记、有道云笔记、EverNote、马克飞象等众多笔记类产品,可是选择一款适合自己的笔记产品非常困难的。让我逐渐想要放弃有道云笔记的一个重要原因是,有道云笔记在推出“云协作”功能后,整体上显得非常臃肿,即使在后来推出了我喜欢的 Markdown 功能,我还是决定渐渐地从这个产品中过渡出来,或许是网易公司这样的大厂更注重产品线的全面化,“有道云笔记”在一段时间里产品定位一直相对尴尬,而且“有道云笔记”不支持导出笔记到同类产品这个举动,让我觉得这不符合网易相对国内厂商一贯良心的风格,所以我不得不去寻找一款它的替代产品。

而最终我选择了为知笔记,它整体天蓝色的风格让我非常喜欢,虽然没有“有道云笔记”功能强大,而且内置付费模板,但对我来说,因为大部分记录都是在手机上,所以对我来讲,其实免费的功能基本足够我使用了,当然选择为知笔记的一个重要理由是它可以支持 Markdown,而且它的笔记存储格式为.zip 和.html,这意味着我们可以将笔记从云端同步到本地以后,我们可以将其导出到其它笔记产品中,这是我非常喜欢的特性。对为知笔记来说,它提供了类似 Kindle 通过邮箱传输电子书的功能,因此我们可以通过这个机制来将喜欢的资料推送到为知笔记中,目前主流笔记类产品在微信公众号中都提供了发送文章到笔记的功能,显然亚马逊官方公众号提供的 Send To Kindle 可以为我们提供类似的体验。即使微信公众号的出现让信息变成了新的信息孤岛,可我们通过这种方式来让我们感兴趣的内容被收集到笔记中,这是否在说明笔记类应用和 Kindle 阅读器冥冥之中就存在某种联系呢?

使用 Markdown 来写作

可能你想象不到,你眼前看到的这篇博客,正是我通过 Markdown 这种“语言”来完成撰写的。而事实上,我使用 Markdown 超过三年了,对我而言 Markdown 是一种能让我专心写作的一种利器,不要告诉我 Word 是这个世界上标准的文档编写工具,如果我告诉你,使用 Markdown 你仅仅需要的是一个记事本,你是否还会对它的强大产生怀疑呢?事实上 Word 作为文档编制标准,对我们使用 Markdown 并没有太多影响,因为写作本来就应该是一件让自己开心的事情,如果我们不喜欢它,为什么不尝试更好的方式呢?一种让你可以关注核心内容的撰写,而非字体、段落或者是排版这种和样式息息相关的事情,我并不是说这些东西不重要,仅仅是因为从此时此刻开始,它开始变得不再重要起来。

或许对普通人而言,Markdown 是一种陌生的语言,因为 Markdown 天生就有着极客的基因,我们最早接触 Markdown 或许是从 Github 上的某种一个开源项目开始,这种与生俱来就在全球最大的同性交友网站上活跃的语言,或许会被人们下意识地打上“程序员”的标签,这个世界从来不乏因为一知半解而肆意猜度的人,其实 Markdown 在写作领域是一种非常时尚的语言,我经常被别人问一个问题,Markdown 到底能为我们提升多少效率呢?这让我们从 Markdown 的语法说起。虽然我们称 Markdown 为一种语言,事实上 Markdown 是由 John Gruber 设计的一种标记语法,它的基本元素有:

标题

Markdown 中定义标题采用#来完成,按照标题的级别,我们在需要提升为标题级别的内容前面,添加指定数目的#就可以了。例如我们可以定义下面的标题,以此类推总共有 6 级标题:

1# 一级标题
2## 二级标题
3### 三级标题

列表

熟悉 HTML 的朋友都知道,在 HTML 中存在有序列表和无序列表两种,而在 Markdown 语法中无序列表采用-或者*来完成,有序列表采用 1.、2.等来完成。我们来看一个简单的示例:

1//这是一个无序列表
2* 无序列表元素1
3* 无序列表元素2
4* 无序列表元素3
5
6//这是一个有序列表
71. 有序列表元素1
82. 有序列表元素2
93. 有序列表元素3

引用

我们在写作时经常需要引用相关观点来作为辅证,我们学习一种知识通常是一种由内而外的方式,我们从这个世界吸收知识和思想,通过内化来形成我们独立的世界观,世界原本就不是非此即彼的,就像自然界中的熵增定律一般,永远处在一种动态的平衡中。对 Markdown 来说,它采用<来完成引用的定义。例如,愿洞察之父指引我等:

1> 万物皆虚,万事皆允。当其它人盲目追寻真相的时候,记住万物皆虚;当其它人被道德和法律约束的时候,记住万事皆允。

图片与链接

互联网的重要精神是分享,我们说没有人是一座孤岛,对互联网来讲,没有链接就意味着没有一切。在 Markdown 语法中图片和链接的定义方式是非常接近的:

1[Google](http://www.google.com)
2![这是一张图片](http://mouapp.com/Mou_128.png)

加粗与倾斜

我们通常会在文档中将重要信息加粗或者倾斜以表示其重要性,这种习惯在工作以后写邮件的时候得到了进一步的强化,虽然我们说 Markdown 更关注内容本身,即认为内容是写作的核心,可是这并不代表 Markdown 就此黯淡无光,相反地通过定义 CSS 样式,我们可以让 Markdown 文档更加美观和优雅。在 Markdwn 语法中,我们使用两个来表示加粗,一个表示倾斜。比如下面这个例子:

1**这是一个加粗的文本**
2*这是一个倾斜的文本**

代码高亮

没有什么比看到一段支持代码高亮的代码片段更让人开心的了,所以你至此就会明白,为什么 Markdown 会如此深受工程师们的喜爱,尤其当我们需要撰写一篇技术文章并且需要在文章中展示代码的时候,如你所见,这个博客中所有的代码片段都支持代码高亮,这样可以给阅读者更好的阅读的体验,我想吐槽的一件事情是公司内部的 Jira 居然不支持 Markdown 语法,虽然公司的第一架构经常会在这里 Share 技术文章,可是糟糕的代码片段完全让人没有继续看下去的冲动。在 Markdown 中定义一个代码块的语法使用三个`符号:

1using System;
2
3class MainClass
4{
5	public static void Main(string[] args)
6	{
7		Console.WriteLine("Nothing is true, Everything is permitted.");
8	}
9}

表格

表格在 Markdown 中使用频率相对较低,因为如果没有编辑表格内容的需求,通常采用图片来展示表格内容会是一个更好的选择,而表格在 Markdown 中的表示同样是最复杂的,当然更复杂的是 Markdown 中的 LeTex 和 FlowChar,这些均属于 Markdown 的扩展语法,因为违背 Markdown 语法简洁的原则,所以我们在这里简单说下 Markdown 中的表格:

1| Column1| Column2| Column3|
2|:-------|:------:|-------:|
3| Left   | Center | Right  |
4| Left   | Center | Right  |
5| Left   | Center | Right  |

这里我们定义了一个四行三列的表格,我们这里使用:符号来表示表格中的对齐方式,显然这三列分别表示左对齐、居中对齐和右对齐,我们说表格这种元素复杂,主要是因为当表格中内容特别复杂的时候,这个表格定义就会降低可读性,而且它无法处理在单元格内换行的情况,所以它主要适用于表格内数据相对简单的情况下。

好了,这些就是基本的 Markdown 语法所定义的元素啦,我觉得这是一种非常优雅的标记语言,如果你觉得纯文本的内容太单调,如果你觉得 Word 使用起来太复杂,那么 Markdown 就在这两者间找到一个平衡点,我没有劝大家放弃 Word 然后转而投身 Markdown 写作,可是作为一个经常码字的博客作者,我可以负责任的说,Markdown 是一种可以让你专注写作的工具,而且作为一名工程师,你会发现 StackOverflow、Segmentfault、Github 等知名技术社区,无一例外地都在支持 Markdown 语法,所以 Markdown 其实是开源社区里除了英语以外的第二大通用语言,所以如果你喜欢写作或者是喜欢开源,Markdown 都会是你不错的选择,而它的语法相信你此时已然学会了。

从 Markdown 到 Kindle

有人说,Markdown 是一个人的狂欢,因为即使你再喜欢 Markdown 语法,如果你身边的同事都在使用 Word 等不同的工具,那么你该如何和他们写作呢?这听起来好像是一个严重的缺陷,所以 Markdown 注定是一种小众的写作语言。Markdown 可以转化为 HTML 或者 PDF,相比 HTMLPDF 相对会好些,因为 HTML 需要依赖 CSS 样式文件,没有样式文件的 HTML 是无论如何都不能彰显 Markdown 的优雅的。那么,难道我们就要坐以待毙接受这种妥协,Markdown 注定要被人们抛弃吗?不,让我们勇敢地说不,下面我们介绍常见的 Markdown 导出/转换工具:

文档转换神器 Pandoc

如果说 Markdown 是这个世界上最为简洁、优雅的书写语言,那么 Pandoc 就是标记语言转换领域的瑞士军刀。我们知道 Markdown 是一种轻量级的标记语言,它可以允许写作者使用纯文本标记来来编写文档。通常我们会在 Markdown 编辑器中完成 Markdown 文档的编辑,然后将其发布到支持 Markdown 语法的站点上。以博主为例,博主会在 Sublime 中安装了 Markdown 插件,通常我会在 Sublime 中编写好文章,然后利用 Hexo 这个静态博客生成器生成静态 HTML 页面,利用 Github Pages 提供的静态网页托管服务,我将这些博客发布到了互联网上,大家此刻所看到的这篇文章就是通过 Markdown 语法撰写的。可是一旦 Markdown 语法出现在一个不被支持的场合,Markdown 的简洁、优雅都将大打折扣,这个时候就该我们的 Pandoc 登场啦!

Pandoc 是一个采用 Haskell 语法编写的命令行工具,或许你对 Haskell 这样的函数式编程语言闻名已久,但是我相信 Panndoc 对我们每一个人来说都是一个新颖的事物。Pandoc 采用 GNU GPL 授权协议进行发布,属于 Linux 世界的自由软件。庆幸的是,Pandoc 支持主流的 Windows、Mac 和 Linux 三大平台,这里我们以 Windows 平台为例介绍 Pandoc 这个工具。Pandoc 支持 HTML、.docx、Markdown、LaTex、.TXT、.epub 等常见格式的转换,以 Markdown 为例:

  • Markdown 转 HTML
1pandoc README.md -o README.html
  • Markdown 转 Word
1pandoc README.md -o README.docx
  • Markdown 转 Pdf(需要安装 LaTex)
1pandoc README.md --latex-engine=xelatex -o README.pdf

好了,现在通过 Pandoc 我们可以将 Markdown 转换为可读性更为良好的文档,而我们知道 Kindle 阅读器是可以支持.pdf 格式的文档的,虽然这种格式在 Kindle 并不能做到尽如人意,可是这对于我们而言,是将 Markdown 和 Kindle 紧密联系在一起的重要一步,这意味着我们只要 Markdown 文档转换为 Kindle 支持的文档格式,就可以实现 Markdown+Kindle 的个人知识管理方案。

支持导出 HTML/PDF 的 Cmd Markdown 编辑器

下面推荐的是由作业部落出品的 Cmd Markdown 编辑器,这款自称为国内国内最强大的 Markdown 编辑器,实现了全平台覆盖,可以在线编辑同步预览,同时支持自动保存文档和云同步,支持一键发布文章到社区,是一个集文档编辑、预览、同步和发布等功能于一身的综合型 Markdown 编辑器,支持一键切换黑、白两种主题,支持直接导出 HTML/PDF,整体上是一个非常出色的 Markdown 编辑器。我不太喜欢这个编辑器的一个重要原因是,我喜欢在离线环境下写文章,然后将其发布在我的个人博客上面,而这款编辑器和社区耦合过紧,虽然提供了离线版本的 Markdown 编辑器,但是对我而言功能上略显臃肿,我在这里推荐这个 Markdown 编辑器的原因是,它提供了 HTML/PDF 的导出功能,当我们在线编辑 Markdown 文档时即可通过浏览器导出 HTML/PDF,如果你不需要经常导出 Markdown 为其它的文档格式,我会推荐你使用 Sublime、VSCode、马克飞象、为知笔记、小书匠等编辑器,虽然 Markdown 语法对使用者的要求并不高,但我相信有一个体验良好的 Markdown 编辑器,会让我们的写作过程更为开心,从而达到事半功倍的效果。我们这篇文章的主题是希望将 Markdown 和 Kindle 结合起来形成一套个人知识管理的方案,所以在这里的核心关注点就变成了如何快速、高效的导出 Markdown 为其它文档格式,而在这一点上,相信 Cmd Markdown 不会让你我感到失望。

支持导出 PDF/Mobi/Epub 格式的 GitBook

好了,下面我们介绍一个使用 Github/Git 和 Markdown 来构建电子书的网站 GitBook,请不要误会,这个网站和全球最大的同性交友网站 Github 没有任何直接的关系,两者的关系可以理解为,GitBook 是一个基于 Github/Git 的静态页面生成器,其本身是一个由 NodeJS 编写而成的命令行工具,而通过这个工具和 Markdown 语法,我们就可以创建出足以媲美专业电子书籍的电子书,和 Hexo 类似,我们可以将这些生成的静态页面部署到 Github Pages 来供其它人浏览和阅读,除此以外 GitBook 本身就是一个相当优秀的内容发布平台,截止到今天 GitBook 上已经有 18036 本电子书。如果说在此以前,我们讨论的话题,即如何将 Markdown 转换为 Kindle 支持的电子书格式,是一个和 Kindle 电子书没有多少交集的话题,那么此时此刻我们已然和电子书密切地发生着关系,并且我们可以编写一本属于自己的电子书然后将其存放在 Kindle 上来阅读,这是一件非常酷的的事情,不是吗?如同王力宏在《开讲啦》节目中提到他幼时曾憧憬在广播里听到自己的歌一样,相信每一个喜欢写作的人,都渴望有朝一日看到自己的作品被发布出来,而 GitBook 就给了你这样一个梦想成真的机会。GitBook 提供了 epub、moni 和 pdf 等非常 Kindle 的文档格式导出功能,因此我们可以在编写完 Markdown 文档后直接导出为 Kindle 支持的文档格式,这是多么美好的一件事情呀!除此以外,我们还可以使用 Calibre 这个 Kindle 电子书管理软件来完成 Markdown 文件的支持,但这个世界上没有绝对完美的事情,经过博主尝试后发现,使用 Calibre 转换的电子书在 Kindle 上阅读体验并没有想象中出色,对此感兴趣的朋友可以自行尝试,这些都是后话啦!

本文小结

个人知识管理其实是一个非常答案开放的问题,常言道“世事洞察皆学问,人情练达即文章”,当你渐渐地建立个人知识管理的意识,开始经常性地去梳理和完善自我的知识体系,这个时候到底选择什么样的方式来管理,其实是并不重要的,就像我们管理项目可以使用 Github,同样可以使用 Jira,这并不意味着这其中哪一种就是最好的,只有适合自己的才是最好的,就像我们使用 Jira 来管理项目并不意味着我们就在践行敏捷开发,我更愿意相信 Wesley 的观点,当你真正领会一件事情的思想和本质的时候,其实采用什么样的形式反而是次要的,我们从小到大常听到的一句话是,”如果连形式化的东西都不愿意去实践,又有什么资格来妄谈超脱形式化呢?”,我们暂且不管这句话对不对,我们必须认同的一点是,从 Git 到 Github 到 Markdown 到 GitBook 再到 Kindle,一个明显的趋势是,我们这个时代,信息会越来越趋于碎片化,而与此同时,开源让我们每一个人离信息越来越近,当每一个人都成为信息的提供者,我们这个时代是一个百家争鸣、集思广益的时代,所以不管你愿不愿意,不管你有没有意识到这一点,学会去高效地检索信息、学会高效地管理信息、学会高效地利用信息,这是这个时代对我们个人知识管理能力的一种要求。好了,这篇文章就是这样啦,再次谢谢大家的关注!

Built with Hugo
Theme Stack designed by Jimmy