关于 markdown, pandoc 和 LaTeX 的入门安利

Posted by Towdium on April 13, 2016

前言

鉴于我的逗比室友还在码他的 matlab 代码,我已经无所事事到了一定境界,于是就只好开始码这篇新文章。对,你没有想错,现在的这段文字,是我在学校机房里写下的(笑)。今天要说的呢,是关于 atom 环境下关于 LaTex,markdown,以及 pandoc 写作的入门。对于一些人来说这可能有点陌生,但是别紧张,这本身是非常容易学习的,而且掌握这些内容之后,你的写作效率会有明显的提升。

大部分人在用 word 的时候估计都会遇到这样的问题 “尼玛爸爸的图呢!” 或者是 “你倒是快给我缩进啊!喂!我让你动这边儿,没让你动那边儿!”,我不得不承认 word 的排版功能是目前 “所见即所得” 流派的登峰造极之作,但是 word 在一些功能的实现上确实让人非常的蛋碎。大部分时候,我们只是需要一些简单的文本,稍微排一下版,不要太难看就差不多了,但是使用 word 的时候我们不得不面对一大堆的 “文本样式”,“项目符号样式”,“页面样式” 之类的东西。这种情形就是 markdown 最擅长的场合。

markdown 的特性

关于 markdown 写作有多方便

Markdown 是一种标记性语言,我们只需要标记每一段文本的格式,比如说要写标题的话,只需要写“#这是一个标题”,或者是引用,只需要写 “> 这是一段引用”,效果就是这样的:

这是一段引用

你可能会问了,我明明只写了一个箭号,怎么就会自己有排版呢?这个时候,就需要我们的渲染引擎发挥作用了。我们只需要把文本标记清楚,然后就可以让渲染引擎来完成接下来的工作。至于引用或者标题具体是什么样的格式,我们只需要一个样式表就可以搞定,而且在绝大部分情况下,渲染器都是有自带的样式表的,而且效果也是八九不离十,并不需要我们操心。我们所需要掌握的,只是 markdown 对于不同文本的标记格式,为了保证简洁性,它提供的格式并不多,但是几乎可以涵盖互联网上交流所需要的所有内容。具体的内容可以在 这里 找到。对着参考文本,你对于 markdown 的语法应该很容易有一种大致的了解了。他的源文件并没有多美观,但是足够简单易用,并且排版轻松,最终的效果也并不差。如果需要的话,我所有博文的 markdown 原文可以在 这里 找到。

关于 markdown 的良好兼容性

我们平时写作业用 word,交作业用 pdf,大部分时间已经形成了共识,但是如果我要写一个网页,我是不是能传一个 pdf 来强行生成一波网页呢?答案当然是否定的。无论是 word,pdf,或者是 html,他们的文本格式都已经完全确定了,这样当然有好处,但是坏处也不言而喻:

  • 如果我要把同一篇文章上传到不同的网站上,并且要适应不同网站的排版风格,这就会有点困难
  • 文件格式复杂,不易于程序读取,而且体积较大(html当然要稍好些,不过文本的易读性就有所损失)

markdown 的出现填补了这一领域的空缺。一方面,它的语法对于初学者而言也足够简单,另一方面,他对于程序读取也非常友好,同时,又保持了良好的排版效果。

什么时候会用到 markdown

  1. 一些简单文档的写作,比如平时作业的 report,或者是简单程序的手册,这种情形下,对于排版没有什么特殊需求,好看就行,写作也力求简便,使用 markdown 会很有帮助;
  2. 一些在线文档,包括 github 的 readme, 或者我现在写的这篇文章,使用 markdown 可以保证良好的兼容性;

markdown 的用法

说起来,markdown 本身只是一种标记的语法,至于怎么用,在不同情境下会有不同的方法下边我列举几种,仅供参考。

个人博客

我现在这个网站嘞,所有文章都是用 markdown 写的,源文件都可以在 这个网址 找到。To get started, 你只需要一个配置好了的 jekyll 环境(至于jekyll环境的配置我还并没有想好要不要开坑),然后运行一下,jekyll 就可以帮你把 markdown 的文本转换成排版好的网页啦。

日常的 essay 以及 report

如果你使用 atom (关于 atom 的介绍见 这里)的话,搜索安装这个插件 “markdown-pdf”,然后执行 “markdown-pdf:convert” 就可以一键将 markdown 文本转化为 pdf 文件,如果你对于排版要求比较高,你还可以搜索 “markdown-themeable-pdf”, 这个插件支持更多的样式设置,同样的,也只需要一个命令就可以生成 pdf 文件。

另外,如果你需要 pdf 以外的文件格式,还有其他的工具来帮你转换。搜索插件 “pandoc-convert”就可以在 pdf, markdown, latex, docx, html 以及另外一大票文本格式中自由切换,当然 pandoc 的功能还不仅于此,更多的内容我们下边再说。

在线文档

Github 的网页版是支持 markdown 的在线排版的,随便一搜,大部分项目的 readme 都是 markdown 文件,我们可以很方便的直接浏览 github 上的 markdown 文本。

另外,最重要的,本地预览

这个在 atom 环境下只需要安装 “markdown-preview”(似乎是程序自带的包),然后执行 “markdown-preview:toggle” 就可以直接预览了,如果需要更多内容,社区上还提供了使预览和编辑窗口同步滚动的插件 “markdown-scroll-sync”,使得预览兼容 LaTeX 公式的插件 “markdown-preview-plus”(如果你不知道 LaTeX 是什么那就算了)。

markdown效果

效果大概就是这样的,左边是文本,右边是预览。储神对于默认字体已经吐槽过了“为什么左边的文字看起来比右边好看?”对于这种问题,我只能说,无可奉告(笑)。另外,如果你写的东西上千字并且有一堆代码上色的内容,我建议你把 “living update”(实时预览)给关掉,如果你不想被卡成幻灯片的话。关掉之后,每保存一次文件,系统就会自动渲染并更新。

当然 atom 并不是唯一的选择,可以参考 这篇。至于我为什么推荐使用 atom,因为四个原因:

  1. atom 本身是一个多语种的通用编辑器。大部分 markdown 编辑器都是只能用于编辑 markdown,对我而言这并不是很方便。设想一下如果每一种语言都准备一个单独的编辑器,html 编辑器,json 编辑器,LaTeX 编辑器,搞这么一大堆东西会很蛋疼吧;
  2. atom 对于中文的处理我觉得还是比较能接受的。很多在线的编辑器都会有一些迷之光标偏移,让人非常不爽,另外一些则是会把一句话处理成一个完整的单词,然后就会造成一堆鬼畜的分行情况,所以必须要不停的手动换行,非常蛋疼。Atom 对于中文的处理虽说不算完美,起码可以用,没有什么硬伤;
  3. Atom 内建了拼写检查(当然只用于英文,对中文无效),虽然非常蛋疼,不过有总比没有强;
  4. 良好的拓展性,这个后边会说。

以上呢就是稍微列举的几种使用场景,希望在各位不知如何下手的时候,能有些帮助吧。

关于 pandoc 与 LaTeX

对,这两个东西我自己并不十分精通(尤其是玄学 LaTeX),所以我只说一下如何让这些东西在你的电脑上跑起来,在使用感受方面,我只能说 exciting,其余的无可奉告。

2nd Sep 2017 更新:
在酝酿了一年多之后,我终于对 LaTeX 的理解稍有自信了。于是写了一组教程,相关内容你可以在 这里 找到。

pandoc 在 atom 上的环境搭建

其实 pandoc 这个东西是一个独立的程序,他的主要功能就是实现不同文本格式之间的转换。但是那个官方版本的交互全都是 cmd 的操作,虽然强大,但是并不友好,atom 上的插件可以帮助你实现无比便捷的交互。

通常的逻辑是这样的,我们可以用 pandoc-markdown 来写文本,然后调用 pandoc 来转换成其它格式的文件。pandoc-markdown 和 markdown 的区别就在于前者支持更多的语法扩展,他可以使用各类 html 的语句来实现更复杂的排版,也可以兼容一些 LaTeX 的语法(常用的主要是公式以及引用的语法,可以参考 这一篇),这样我们就可以在保持 markdown 原有的简洁性的情况下实现更复杂的排版格式。值得一提的是,pandoc 中使用 LaTeX 语法编辑的公式在转换成 docx 文件之后仍然可以正常使用,这也就意味着你可以和 word 蛋疼的公式编辑器说再见了。

对于 pandoc 的文本转换功能,你可以安装 “pandoc-convert” 插件,它最大的优点在于可以帮你下载安装 pandoc,避免了麻烦的手动配置,安装好就可以使用。调用命令“pandoc-convert:XXX”,就可以基于当前的 markdown 文件生成其他格式的文本,非常方便。对于编辑时的预览,我们可以直接用 markdown 的预览插件,或者你也用“pandoc”这个插件来支持更复杂的语法,但是我其实并不是很推荐,原因如下:

  • 对我而言,装了公式插件和自动同步插件的 markdown 预览器足以胜任 pandoc-markdown 的预览,并不需要额外的配置(因为文本的后缀名仍然是 .md);
  • 这个插件的配置稍微有点复杂,需要你将 pandoc 的可执行文件丢到环境变量里,这一步有两种方法(大概):
    • 官方地址 下载安装 pandoc,然后再添加到环境变量;
    • 因为 “pandoc-convert” 会自动安装 pandoc,不出意外的话,我们可以在C:\Users\username\.atom\packages\pandoc-convert\node_modules\pandoc-bin\vendor 这个目录下边找到 pandoc 的安装,把他添加到 PATH 里应该也能用(这个我没试过)。

值得一提的是,通常情况下 pandoc 如果要输出 pdf 文件的话,需要电脑上有 LaTeX 的安装,但是 “pancod-convert” 似乎可以绕开 LaTeX。不出意外的话,不用通过 LaTeX,他也可以将文本转为 pdf 文件(不过如果要用 LaTeX 语法似乎还是要装?)。

LaTeX 在 atom 上的环境搭建

LaTeX 这个东西和前边两个工具完全不是同一个重量级的,他是一个十分强大的学术论文排版工具。实话说 LaTeX 的语法其实十分晦涩,如果有兴趣的话请自行百度,我这里只说环境搭建,不对 LaTeX 进行介绍。这里插一句题外话,要找 LaTeX 模版, 上 Overleaf。回到正题,你需要安装下边这几个包,就可以比较轻松愉快的写 LaTeX 了:

  • language-LaTeX:用于语法高亮以及其他基本的编辑器支持;
  • latex-plus:用于预览和编译,我建议你在设置里关掉编译完成后自动打开的选项,因为有点 buggy;

另外呢,你还需要安装一个 LaTeX 发行版,我这里推荐 Tex Live,安装完之后,将其添加到 PATH 就可以了。

这样呢我们编辑 LaTeX 的步骤是这样的:

  1. 运行 “latex-plus: edit” 来配置 LaTeX 的路径。注意这个插件在 windows 上会有点 bug,你需要手动纠正一下路径里边的斜杠,给他换个方向,不然就会编译失败;
  2. 写你的 LaTeX;
  3. 保存(你要不保存我也没意见);
  4. 运行 “latex-plus: compile” 来编译。我们知道如果有很复杂引用的话, LaTeX 是需要编译三次的, 这里这个插件会给我们解决所有问题,一次编译就可以;
  5. 编译好的文件应该在 .latex 文件夹下边,叫 XXXX.pdf, 双击打开即可。如果你装了 “pdf-view” 插件的话,每次编译之后,pdf都会自动更新,非常方便。

LaTeX效果(请无视我浮夸的文章长度XD)

另外呢,atom 插件 “linter” 可以支持各类语法检测以及错误提示。如果你有这方面的需要的话,按照以下步骤来做:

  1. 安装插件 “linter”;
  2. 安装插件 “linter-chktex”;
  3. 配置“linter-chktex”:你需要告诉他你的 chktex 的位置。如果你安装的是 Tex Live 的话,默认路径在 C:\\texlive\\2014\\bin\\win32\\chktex.exe

配置好之后,你的 atom 就可以支持 LaTeX 的语法检测以及错误高亮了,有没有很赞嘞?

2nd Sep 2017 更新:
这一部分现在再看,已经有些过时了,我目前强烈建议使用 latex 这个插件,各方面配置非常简单,几乎是即插即用。

说回来呢,这些程序都只是一个工具,用的顺手就行。我觉得现在有一种不好的现象,就是有很多人都会比较使用的工具。大学生搞的专业水平并没有多少,LaTeX 用得倒是挺溜的,我觉得这挺没有意思的,就好比四路泰坦玩儿扫雷啥的,有种装逼失败强行装逼的即视感。不管我今天说了多少,专业技能始终要比形式上的东西来的更有必要,希望各位不要因为我安利这些工具而误入歧途了。