利用Pandoc將markdown文件轉化爲pdf

利用Pandoc將markdown文件轉化爲pdfhtml

準備工做

安裝pandoc

Windows下安裝pandoc很容易,直接從pandoc官網上下載最新安裝包安裝便可。
Linux下的安裝能夠參考陽志平的博文1git

安裝MiKTeX

pandoc被稱爲格式轉換的瑞士軍刀2。執行程序文件只有20M左右大小,可是可以在幾十種文件格式之間自如的轉換,那固然是得依賴各類格式文件所須要庫。轉換爲pdf就要用到MiKTeX,Windows下推薦使用CTeX完整版,對中文的支持很好,能夠從CTeX官網下載完整套件github

將markdown文件轉換爲pdf

若是markdown文件中不包含中文字符,那麼直接使用下面的命令就能夠將markdown文件無縫轉換爲Latex支持的pdf文件。markdown

pandoc infile.md -o outfile.pdf字體

若是markdown文件中包含中文字字符,那麼上段命令就沒法直接轉換,可能會報如下錯誤:ui

! 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.   
...

爲了解決中文編譯的問題,須要作如下的工做:google

  1. 將markdown文檔的編碼方式改成utf-8。比較簡單的辦法就是用記事本打開該文檔,而後另存爲時選擇編碼方式爲utf-8。有可能當你改變編碼方式後,文檔中的中文全變成亂碼了。爲避免這種狀況,能夠在改變編碼方式以前先複製文檔的所有內容,而後在改變編碼方式以後粘貼替換文檔中的全木內容,這樣就不會出現亂碼了。
  2. 編譯pandoc默認的latex引擎是pdflatex,是不支持中文的,所以須要手動設置編譯時所用的引擎爲xelatex,編譯命令改成:
    pandoc infile.md -o outfile.pdf --latex-engine=xelatex編碼

  3. 這時編譯可能沒有錯誤了,可是獲得的pdf文檔中可能全部的中文都沒有了。這是字體的問題,由於編譯時默認的字體時不支持中文的,因此咱們得手動設置中文字體。顯然,所設的字體應該爲系統中已裝的字體,且字體的名字不能寫錯。有一個辦法能夠的到系統中所安裝的全部字體名(見博文),即在控制檯中輸入命令:fc-list >> C:\fonts.txt。這樣,掃到的字體信息就所有被導入到C盤根目錄下的fonts.txt文件中了。這裏咱們選擇宋體,字體名稱爲「SimSun」,因而編譯命令改成:
    pandoc infile.md -o outfile.pdf --latex-engine=xelatex -V mainfont="SimSun"
    注意:命令中的``V’’是大寫
    這裏字體名也能夠不加引號,可是若是字體名比較複雜(如包含空格)時,不加雙引號就可能出錯。
  4. 好了,中文字符應該可以顯示了,可是你可能會發現不少文字已經超出了文檔的邊界沒法顯示了,這是由於pandoc對中文的支持不太好,不能自動換行。可是這並不表示pandoc就真的沒法完美處理中文文檔了,由於技術界那些追求完美的極客們爲咱們提供了無限的可能。這篇博文介紹了pandoc中文pdf轉換攻略3,解決方案是使用網友編輯好的latex模板來生成pdf,這裏用到的是tzengyuxio提供的pm-template.latex4。 下載模板後將其中的LiHei Pro字體替換成系統中安裝有的中文字體便可,而後編譯命令改成:
    pandoc infile.md -o outfile.pdf --latex-engine=xelatex -template=pm-template.latex
    注意:若是安裝的MiKTeX(我用的是CTex)宏包不全,編譯可能會出問題,如找不到exp13.sty等,所以推薦安裝完整版的MiKTex。
    固然,你也可使用本身定義的模板來生成tex和pdf文件。首先使用命令 pandoc -D latex > my.latex 生成一個默認的模板,在對這個模板進行修改,如字體、自動換行等。spa


  1. Markdown寫做進階:Pandoc入門淺談: http://www.yangzhiping.com/tech/pandoc.html.net

  2. 黑魔法利器pandoc: http://yanping.me/cn/blog/2012/03/13/pandoc/

  3. pandoc中文pdf轉換攻略:http://afoo.me/2013-07-10-how-to-transform-chinese-pdf-with-pandoc.html

  4. pm-template GitHub: https://github.com/tzengyuxio/pages/tree/gh-pages/pandoc

相關文章
相關標籤/搜索