5  用 markdown 技术写作

5.1 概述

markdown 有着它难以比拟的优点,主要是写作和思想保持高度一致,如果你之前用过 Emacs Org Mode 或是 Vim 的 VimWiki,你就知道这种纯文本的标记语言有多好用。当你熟练了这些标记语法后,把内容在内心憋上一段时间,憋到不输出会成内伤的时候,打开文本编辑器手指乱飞把它们写下来,你就能感受到这个标记语言的威力。

但 markdown 也有其明显的缺点: 1. 语法不统一,各种方言都有。 2. markdown 只是语法,配套工具零散,编辑器繁多、编码器也繁多,看似选择很多,但是容易让人精疲力尽。 3. 在复杂文档的编辑能力上有所欠缺,必须借助其它工具。

虽然 章节 6 会介绍好几个基于 Markdown 的集成写作环境,但是从零开始建立一个自已的 markdown 写作环境还是非常有必要,能让你深刻体会出该工具需要怎样的属性,以后你会对集成写作环境有着怎样的期待,能迫切地希望写作环境能帮你解决怎样的问题。 ## markdown 写作环境准备

5.1.1 基本环境配置

编辑器:joplin,优点,基本语法够用,能够使用 onedrive 同步,有移动端,全平台支持,可以随时随地写;支持导出 markdown 文件;用 visual studio 也是一个不错的选择。另外还有 zettlr、obsidian、Typora 等一票工具,看各人喜好。

编译器:

  1. pandoc,万能的文档转换工具,一定要安装;其它编辑器如 Joplin、Zettlr 里的文档转换功能其实都是基于这个来实现的。

  2. pandoc-crossref:交叉引用工具,写长篇科技文章,一定要用。

这些工具都是跨平台的(支持 Windows、Mac),可以在你喜欢的平台上使用。

5.1.2 写作方法

  1. 把你的书,拆成多个 markdown 来写,毕竟一本书如果有几十万字和各种图表,我相信你不想把它们都放到一个 markdown 文件里,这样查找修改起来太不方便了。

  2. 用你喜欢的编辑器,开始写内容,每一章用 section 开头,写上你需要的内容,并用参考文献小节来结尾。

  3. 导出为 markdown,为每个文件取好标题,最好是按文件名的顺序来取名,方便后续生成一个文件时的操作。

  4. 处理好交叉引用,具体。。。。

  5. 用 pandoc 合适的命令,来编译你的文件,如果你需要重复工作,写一个脚本来做这个事情,也是不错的方法。比如说,可以使用这个脚本为例来编写你的脚本:

cd Recipes ;
for i in */ ; do
   echo "# ${i%/}" ;
   echo " " ;
   for j in $i/*.md ; do
      cat $i/$j ;
      echo ; 
   done ;
done ; \
|      \
pandoc                        \
  --toc                       \
  --number-sections           \
  --top-level-division=part   \
  --output=my-recipe-book.pdf \
  -

或者有一个更简单的办法,如果你需要生成 pdf,直接用 cat 命令把各个文件拼接起来,再用 pandoc 文件来生成 pdf:

cat *.md > total.md
pandoc -i total.md -o result.pdf --pdf-engine=xelatex -V CJKmainfont="KaiTi"  --bibliography=watterry-reference.bib --csl=acm-siggraph.csl --citeproc --toc -N

还有一个方法,就是使用 pandoc-include 来建立一个索引的 markdown 文件,然后只需要编译这个 markdown 文件即可生成全部章节到一个文件里。(不过我没成功,还需要研究一下为什么,研究出来后再更新)

5.2 实例

比如我在写这个系列教程的时候,我就尝试用 markdown 来写,其中,最后一股脑生成一个 html 文件,我使用了如下命令:

pandoc -i chapter01-why.md chapter02-tools.md chapter03-bibliography.md chapter04-LaTeX.md charpter05-markdown.md -o result.html --pdf-engine=xelatex -V CJKmainfont="KaiTi"  --bibliography=watterry-reference.bib --csl=acm-siggraph.csl --citeproc --toc -N

5.3 参考文献

  1. An Oxford University Thesis Template for R Markdown
  2. How to use Pandoc to produce a research paper