其實很早就知道Pandoc這個東西了,只是一直沒有什么需求促使我去使用它。平時寫博客雖然也是用Markdown,但是由于Jekyll并不支持Pandoc,所以也沒有特別去研究它(目前博客使用的是Kramdown渲染器,它在很多擴展語法都是借鑒Pandoc的。)??墒菚r過境遷,現(xiàn)在平時需要寫一些非正式報告和總結(jié),每次使用word的時候總覺得不舒服,有次為了調(diào)整一個段落的行距搞了1個多小時,雖然可以說是我自己沒有學(xué)好word的基本操作,但是每次為了尋找一個功能"翻箱倒柜"地在網(wǎng)上找方法,徹底破壞了寫作的情緒,這實在讓我很難受。因此我選擇markdown來進行平時的寫作,為了達到這個目的,必須要選擇一個markdown的渲染器,網(wǎng)上有著各式各樣的渲染器,還有一些可以直接在線渲染的網(wǎng)站。但是平時在本地編輯的時候,總要開個瀏覽器,這實在讓人接受不了。在眾多渲染器中,最先映入眼簾的就是Pandoc了,號稱為文本格式轉(zhuǎn)換的瑞士軍刀,既然有了這個稱號,說明其功能是非常不錯的。后來查了一下,發(fā)現(xiàn)果然是一個神器,它甚至可以生成pdf和docs!
Pandoc的官網(wǎng)在這里,網(wǎng)上有很多具體介紹Pandoc的文章,其中質(zhì)量比較高的有:
本文就不再贅述上面文章提到過的一些基本概念和操作了,如果讀者還不知道Markdown和Pandoc是什么的話,請閱讀上述文章。
具體的安裝過程上述文章和Pandoc的官網(wǎng)上都有,此處不再細說了,這里主要說明一些在安裝過程遇到的問題和解決方法(以windows7為例)。
在Windows下Pandoc安裝的時候,默認是安裝在用戶主目錄下的,以win7為例,就是C:\Users\USERNAME\AppData\Local\Pandoc
,照理來說安裝程序是應(yīng)該會把這個目錄添加到Path中去的,但是我發(fā)現(xiàn)并沒有自動添加,因此首先要將這個目錄手動加入到Path中,這樣才能在任何的目錄下進行調(diào)用。
就我自己而言,我使用Pandoc最主要的功能就是利用它來生成HTML和PDF文件,本節(jié)先討論HTML的配置方法,下一節(jié)再來說明pdf的配置。
其實將markdown生成html,是Pandoc最基本的一個功能,使用起來也是非常簡單的,打開cmd,切換到makrdown文本所在的目錄,寫入如下代碼[1]:
1 | pandoc in.md -o out.html |
程序運行之后,就會在當前目錄下生成一個相應(yīng)的out.html文件。
上面這是最基本的用法了,但是這還不能滿足我的日常需求,單純的html文件太過單調(diào)了,只有配上相應(yīng)的CSS樣式,才能使得文本以更加優(yōu)美的方式展現(xiàn)出來。
可喜的是pandoc完全支持加入css一起渲染,利用如下的命令:
1 | pandoc in.md -c style.css out.html |
其中style.css是為生成的html文件編寫的樣式文件,但是這個style.css應(yīng)該放在哪呢?放在當前目錄下,當然沒問題,但是每次編寫markdown的時候,都要將這個css文件復(fù)制到當前目錄下,那豈不是很麻煩?因此我要想辦法把它放在一個固定的地方,每次直接調(diào)用就可以了。
這就引出了pandoc的默認目錄了,可以通過pandoc --version
命令來查看pandoc當前的默認目錄,還是以windows7為例,它的默認目錄是C:\Users\USERNAME\AppData\Roaming\pandoc
,只需要將這個style.css文件放入到這個目錄下,那么在任意目錄使用pandoc時,都能自動讀取到這個文件,而且,如果需要一些特殊的css樣式,可以在當前目錄編寫,pandoc會自動使用當前目錄下的style.css替代默認目錄中的style.css文件。
通常來說,寫作的目的是寫給別人來看的,但是如果是使用html文件的格式的話,那么每次傳輸都需要傳送整個目錄文件,因為會有很多圖片或css文件需要一起被傳送,否則html會無法正確顯示。這顯然是很麻煩的,有沒有辦法讓pandoc在生成的時候,自動把style.css中樣式代碼直接嵌入到html中呢?辦法當然是有的,主要是參考了這篇文章。主要有兩種方法:
第一種是使用方法是使用如下的命令:
1 | pandoc -s -H style.css in.md -o out.html |
但是當我試用這種方式的時候,發(fā)現(xiàn)style.css文件必須放在當前目錄下,這個命令才能正常執(zhí)行,否則會報錯說找不到style.css文件。
另外一種更加好的方式使用--self-contained
參數(shù):
1 | pandoc -s --self-contained -c style.css in.md -o out.html |
這個命令不但會把css文件嵌入到html中,它會把所有外部文件全部壓縮進單個html文件中,包括圖片、視屏、音樂等。這是何等強大的功能??!
利用上述這個命令,就能將markdown文檔輕易地生成一個真正獨立的html文件,不需要任何其他外部文件支持,這就非常方便傳遞了。
生成一個pdf文件也是pandoc的主要功能之一,但是它要依賴于latex,如果需要使用pandoc來生成pdf文件,那么需要另外安裝Latex,pandoc官方推薦安裝MiKTeX,具體安裝過程也不說了,非常簡單。安裝好MikTex之后,可以利用如下的命令來生成pdf:
1 | pandoc in.md -o out.pdf |
但是這樣命令會出現(xiàn)這樣的錯誤
! 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是不支持中文的,因此會發(fā)生上述錯誤。因此在使用pandoc的時候,可以手動指明Latex引擎為xelatex,這是完全支持中文顯示的。這樣我們的命令就變成了:
1 | pandoc in.md -o out.pdf --latex-engine=xelatex |
使用這個命令能夠正常的編譯出pdf文件,但是當你打開編譯出來的pdf文件時,會發(fā)現(xiàn)其中的中文部分全是空白,這是字體的問題,因為Latex的默認字體是不支持中文的,因此我們可以繼續(xù)修改命令:
1 | pandoc in.md -o out.pdf --latex-engine=xelatex -V mainfont=SimSun |
其中mainfont
參數(shù)是用來指明所使用的字體,SinSun
表示的是宋體,你可以選擇其他支持中文的字體。
但是這個命令還是有問題的,打開生成的pdf,你會發(fā)現(xiàn)其中的中文完全是沒有斷行的,這是因為pandoc本身對中文支持不夠,但這不是說我們沒有解決方案,解決方案是使用網(wǎng)友編輯好的latex模板來生成pdf,這里用到的是tzengyuxio提供的pm-template.latex4。 下載模板后將其中的LiHei Pro字體替換成系統(tǒng)中安裝有的中文字體即可,然后編譯命令改為
1 | pandoc in.md -o out.pdf --latex-engine=xelatex --template=pm-template.latex |
這時就能生成一個比較完美的pdf文件了。
既然現(xiàn)在有了panodc這個神器,那么大部分的文本編輯操作我就可以在Vim中進行了,而不需要去使用那個無比臃腫的word了,配合Vim強大的定制功能,我就能配置出一個功能完善的pandoc寫作環(huán)境了。
這顯然又是一個很深的話題,這里我只是稍微寫一下配置過程,因為我自己本身也還在研究當中。
首先可以為markdown文件映射幾個命令,使得可以快捷的生成html,在Vim的_vimrc文件中加入如下代碼:
1 |
|
上述的代碼中,我首先定義了兩個函數(shù),分別是用來調(diào)用pandoc來生成html和pdf文件的,然后映射了兩個快捷鍵<F5>
和<F6>
去調(diào)用這兩個函數(shù),這樣就實現(xiàn)了直接在Vim中調(diào)用pandoc生成html或pdf,而不再需要通過命令行來調(diào)用。
最后推薦一個比較好的pandoc插件:vim-pandoc,這個插件我也是剛剛開始使用,感覺還不錯,值得推薦。
如果發(fā)現(xiàn)沒有pandoc命令,說明還沒有將安裝目錄添加到系統(tǒng)Path中,請查看上一節(jié)內(nèi)容。 ?