『壹』 如何把 Markdown 文件轉化為 pdf
試試這個
利用Pandoc將markdown文件轉化為pdf
准備工作
安裝pandoc
安裝MiKTeX
將markdown文件轉換為pdf
准備工作
安裝pandoc
Windows下安裝pandoc很容易,直接從pandoc官網上下載最新安裝包安裝即可。
Linux下的安裝可以參考陽志平的博文1。
安裝MiKTeX
pandoc被稱為格式轉換的瑞士軍刀2。執行程序文件只有20M左右大小,但是能夠在幾十種文件格式之間自如的轉換,那當然是得依賴各種格式文件所需要庫。轉換為pdf就要用到MiKTeX,Windows下推薦使用CTeX完整版,對中文的支持很好,可以從CTeX官網下載完整套件。
將markdown文件轉換為pdf
如果markdown文件中不包含中文字元,那麼直接使用下面的命令就可以將markdown文件無縫轉換為Latex支持的pdf文件。
pandoc infile.md -o outfile.pdf
如果markdown文件中包含中文字字元,那麼上段命令就無法直接轉換,可能會報以下錯誤:
! Package inputenc Error: Unicode char \u8:鍒?not set up for use with LaTex. pandoc: Error procing PDF from Tex source. See the inputsnc package documentation for explanation. ...
為了解決中文編譯的問題,需要做以下的工作:
將markdown文檔的編碼方式改為utf-8。比較簡單的辦法就是用記事本打開該文檔,然後另存為時選擇編碼方式為utf-8。有可能當你改變編碼方式後,文檔中的中文全變成亂碼了。為避免這種情況,可以在改變編碼方式之前先復制文檔的全部內容,然後在改變編碼方式之後粘貼替換文檔中的全木內容,這樣就不會出現亂碼了。
編譯pandoc默認的latex引擎是pdflatex,是不支持中文的,因此需要手動設置編譯時所用的引擎為xelatex,編譯命令改為:
pandoc infile.md -o outfile.pdf --latex-engine=xelatex
這時編譯可能沒有錯誤了,但是得到的pdf文檔中可能所有的中文都沒有了。這是字體的問題,因為編譯時默認的字體時不支持中文的,所以我們得手動設置中文字體。顯然,所設的字體應該為系統中已裝的字體,且字體的名字不能寫錯。有一個辦法可以的到系統中所安裝的所有字體名(見博文),即在控制台中輸入命令:fc-list >> C:\fonts.txt。這樣,掃到的字體信息就全部被導入到C盤根目錄下的fonts.txt文件中了。這里我們選擇宋體,字體名稱為「SimSun」,於是編譯命令改為:
pandoc infile.md -o outfile.pdf --latex-engine=xelatex -V mainfont="SimSun"
注意:命令中的``V』』是大寫
這里字體名也可以不加雙引號,但是如果字體名比較復雜(如包含空格)時,不加雙引號就可能出錯。
好了,中文字元應該能夠顯示了,但是你可能會發現很多文字已經超出了文檔的邊界無法顯示了,這是因為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 生成一個默認的模板,在對這個模板進行修改,如字體、自動換行等。