Pandoc

Pandoc的官网在这里,网上有很多具体介绍Pandoc的文章,其中质量比较高的有:

Markdown写作进阶:Pandoc入门浅谈

Markdown+Pandoc 最佳写作拍档

轻量级文档写作

本文就不再赘述上面文章提到过的一些基本概念和操作了,如果读者还不知道Markdown和Pandoc是什么的话,请阅读上述文章。

配置

具体的安装过程上述文章和Pandoc的官网上都有,此处不再细说了,这里主要说明一些在安装过程遇到的问题和解决方法(以windows7为例)。

系统路径

在Windows下Pandoc安装的时候,默认是安装在用户主目录下的,以win7为例,就是C:\Users\USERNAME\AppData\Local\Pandoc,照理来说安装程序是应该会把这个目录添加到Path中去的,但是我发现并没有自动添加,因此首先要将这个目录手动加入到Path中,这样才能在任何的目录下进行调用。

生成HTML

就我自己而言,我使用Pandoc最主要的功能就是利用它来生成HTML和PDF文件,本节先讨论HTML的配置方法,下一节再来说明pdf的配置。

其实将markdown生成html,是Pandoc最基本的一个功能,使用起来也是非常简单的,打开cmd,切换到makrdown文本所在的目录,写入如下代码1:

pandoc in.md -o out.html

程序运行之后,就会在当前目录下生成一个相应的out.html文件。

CSS样式

上面这是最基本的用法了,但是这还不能满足我的日常需求,单纯的html文件太过单调了,只有配上相应的CSS样式,才能使得文本以更加优美的方式展现出来。

可喜的是pandoc完全支持加入css一起渲染,利用如下的命令:

pandoc in.md -c style.css out.html

其中style.css是为生成的html文件编写的样式文件,但是这个style.css应该放在哪呢?放在当前目录下,当然没问题,但是每次编写markdown的时候,都要将这个css文件复制到当前目录下,那岂不是很麻烦?因此我要想办法把它放在一个固定的地方,每次直接调用就可以了。

这就引出了pandoc的默认目录了,可以通过pandoc --version命令来查看pandoc当前的默认目录,还是以windows7为例,它的默认目录是C:\Users\USERNAME\AppData\Roaming\pandoc ,只需要将这个style.css文件放入到这个目录下,那么在任意目录使用pandoc时,都能自动读取到这个文件,而且,如果需要一些特殊的css样式,可以在当前目录编写,pandoc会自动使用当前目录下的style.css替代默认目录中的style.css文件。

生成独立HTML

通常来说,写作的目的是写给别人来看的,但是如果是使用html文件的格式的话,那么每次传输都需要传送整个目录文件,因为会有很多图片或css文件需要一起被传送,否则html会无法正确显示。这显然是很麻烦的,有没有办法让pandoc在生成的时候,自动把style.css中样式代码直接嵌入到html中呢?办法当然是有的,主要是参考了这篇文章。主要有两种方法:

第一种是使用方法是使用如下的命令:

pandoc -s -H style.css  in.md -o out.html

但是当我试用这种方式的时候,发现style.css文件必须放在当前目录下,这个命令才能正常执行,否则会报错说找不到style.css文件。

另外一种更加好的方式使用--self-contained参数:

pandoc -s --self-contained -c style.css in.md -o out.html

这个命令不但会把css文件嵌入到html中,它会把所有外部文件全部压缩进单个html文件中,包括图片、视屏、音乐等。这是何等强大的功能!!

利用上述这个命令,就能将markdown文档轻易地生成一个真正独立的html文件,不需要任何其他外部文件支持,这就非常方便传递了。

生成pdf

生成一个pdf文件也是pandoc的主要功能之一,但是它要依赖于latex,如果需要使用pandoc来生成pdf文件,那么需要另外安装Latex,pandoc官方推荐安装MiKTeX,具体安装过程也不说了,非常简单。安装好MikTex之后,可以利用如下的命令来生成pdf:

pandoc in.md -o out.pdf

但是这样命令会出现这样的错误

! Package inputenc Error: Unicode char \u8:鍒?not set up for use with LaTex. pandoc: Error producing PDF from Tex source. See the inputsnc package documentation for explanation. ...


原因是pandoc默认选择的pdf引擎是pdflatex,而pdflatex是不支持中文的,因此会发生上述错误。因此在使用pandoc的时候,可以手动指明Latex引擎为xelatex,这是完全支持中文显示的。这样我们的命令就变成了:

pandoc in.md -o out.pdf --latex-engine=xelatex

使用这个命令能够正常的编译出pdf文件,但是当你打开编译出来的pdf文件时,会发现其中的中文部分全是空白,这是字体的问题,因为Latex的默认字体是不支持中文的,因此我们可以继续修改命令:

pandoc in.md -o out.pdf --latex-engine=xelatex -Vmainfont=SimSun

其中mainfont参数是用来指明所使用的字体,SinSun表示的是宋体,你可以选择其他支持中文的字体。

但是这个命令还是有问题的,打开生成的pdf,你会发现其中的中文完全是没有断行的,这是因为pandoc本身对中文支持不够,但这不是说我们没有解决方案,解决方案是使用网友编辑好的latex模板来生成pdf,这里用到的是tzengyuxio提供的pm-template.latex4。 下载模板后将其中的LiHei Pro字体替换成系统中安装有的中文字体即可,然后编译命令改为

pandoc in.md -o out.pdf --latex-engine=xelatex --template=pm-template.latex

这时就能生成一个比较完美的pdf文件了。

Vim与Pandoc

既然现在有了panodc这个神器,那么大部分的文本编辑操作我就可以在Vim中进行了,而不需要去使用那个无比臃肿的word了,配合Vim强大的定制功能,我就能配置出一个功能完善的pandoc写作环境了。

这显然又是一个很深的话题,这里我只是稍微写一下配置过程,因为我自己本身也还在研究当中。

首先可以为markdown文件映射几个命令,使得可以快捷的生成html,在Vim的_vimrc文件中加入如下代码:

function!ToHtml()exec'w'exec"!pandoc  -s -S --self-contained -c style.css % -o %<.html "endfunctionfunction!ToPdf()exec'w'exec"!pandoc  % -o %<.pdf --latex-engine=xelatex --template=pm-template.latex"endfunction:nmap<silent><F5>:callToHtml()<CR>:nmap<silent><F6>:callToPdf()<CR>

上述的代码中,我首先定义了两个函数,分别是用来调用pandoc来生成html和pdf文件的,然后映射了两个快捷键<F5>和<F6>去调用这两个函数,这样就实现了直接在Vim中调用pandoc生成html或pdf,而不再需要通过命令行来调用。

最后推荐一个比较好的pandoc插件:vim-pandoc,这个插件我也是刚刚开始使用,感觉还不错,值得推荐。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容