Markdown 寫法簡單明快,我十分喜歡,以至於我最近都想使用 Markdown 快速的進行測試說明書的寫作,但是考慮到這文檔是要進行交接的,一個 .md 的文件在內部傳輸還是有不便,於是就想到了能不能把 Markdown 轉為 PDF 文件作為通用文件。
然后搜索后看到了這樣的一篇文章如何把 Markdown 文件轉化為 PDF,文中提到了很多方法,有使用 .md -->> .html -->> .pdf
的,也有 .md -->> .word -->> .pdf
的,也有 .md -->> .tex -->>.pdf
的。最終考慮到之前曾經使用 LaTex 進行過文章寫作,並且 PC 中還有着 LaTex 環境,決定使用 Pandoc 實現 Markdown 轉 PDF。
Pandoc 介紹
Pandoc 是一個用 haskell 編寫的開源文本轉換工具,小巧迅速且支持格式廣泛,堪稱文本轉換應用的瑞士軍刀。支持很多種輸入輸出,有關 Pandoc 可以在其官網進行詳細了解。下載頁面可以點此進入,在其中選擇合適的版本即可(GitHub 下載不多贅述)。
Markdown 轉 PDF
全英文文檔轉換
在需要轉換的文件路徑下進行 Shift+鼠標右鍵
選擇此處進入命令行,鍵入
pandoc input.md -o output.pdf
即可完成最簡單的 PDF 文檔。
中英文文檔轉換
在編寫時,由於我們主體還是中文,那么若文檔中存在中文字符,那么轉換就會出問題。為了使的其支持中文,我們需要使用 xelatex 編譯器(有關 xelatex,還請大家自行搜索),下面直接放干貨,可以一步操作到位的命令如下。
pandoc -N -s --toc --smart --latex-engine=xelatex -V CJKmainfont='黑體' -V mainfont='Times New Roman' -V geometry:margin=1in input.md -o output.pdf
大家可以自行編輯一些 .md
文檔然后使用着條命令進行轉換嘗試。另外,Markdone 轉 PDF 的操作,也可以幾個 .md
文件整合成一個 PDF 文件,其命令如下。
pandoc -N -s --toc --smart --latex-engine=xelatex -V CJKmainfont='黑體' -V mainfont='Times New Roman' -V geometry:margin=1in in1.md in2.md ... -o output.pdf
語法介紹
有興趣的童鞋可以查看官方的HELP文檔進行詳細的了解,傳送門:Pandoc Demos & README。
若是想重點了解下上文中所用到的一些參數及其意義可以看下面的一些說明。
--latex-engine=xelatex
# 因為文檔中有中文字符,使用 XeLaTex 引擎(必選項)
-N # 根據標題自動分配標號(可選項)
# H1 標題 #Title# --> 1/2/3/4/...
# H2 標題 ##Title## --> 1.1/1.2/1.3/...
# H3 標題 ###Title### --> 1.1.1/1.1.2/1.1.3/...
-toc # 給PDF文件加上書簽功能
有關這些命令的詳細說明都可在上面提到的 README 中進行查閱。比如命令 -V
,在上面操作中的作用就是設定中英文的顯示字體,比如中文設定為黑體,英文設定為 Times New Roman
,你也可以自行設定合適的字體。
`-V` *KEY*[`=`*VAL*], `--variable=`*KEY*[`:`*VAL*]
: Set the template variable *KEY* to the value *VAL* when rendering the
document in standalone mode. This is generally only useful when the
`--template` option is used to specify a custom template, since
pandoc automatically sets the variables used in the default
templates. If no *VAL* is specified, the key will be given the
value `true`.
轉換效果
本文也對一些.md
文件進行了 PDF 文件轉換,並附一些效果圖於后供大家參考。其中使用的 input.md
文件使用了Cmd Markdown 簡明說明書的源文件,其網頁渲染效果點此可見,可以與生成的 PDF 進行一個對比,看 PDF 生成的效果如何。本文使用的 input.md
也放出下載鏈接,