
用十幾行 Python 代碼和格式轉換界黑魔法 Pandoc ,迅速搞定。
需求
有個朋友提出,希望把目錄中的許多 markdown 文件,批量轉換為對應名稱的 pdf 格式文件。我于是編寫了一個 Python 腳本,并且分享給你。如果你有類似的需求,歡迎使用。
由于使用了 pandoc 作為轉換工具,因此 Markdown 文件里的圖片鏈接,不論是本地存儲的(只測試了絕對路徑情況),還是圖床上的,都可以正確轉換并且顯示到 pdf 文件里。
數(shù)據(jù)
我已經(jīng)把代碼和樣例 Markdown 文件,都為你放在了這個 github repo 中。

你可以直接點擊這個鏈接,下載壓縮包 demo-batch-markdown-to-pdf-master.zip。

在 macOS 上默認的下載位置,是 ~/Downloads。
下載后,解壓該壓縮包,咱們的演示目錄就準備好了。名稱是 ~/Downloads/demo-batch-markdown-to-pdf-master 。
壓縮包里面,有4個文件。

其中的batch-markdown-to-pdf.py是運行腳本;
temp_qiniu.md 和 README.md 是咱們的兩個示例 Markdown 文件。你嘗試之后,可以換成自己的一批 Markdown 文件。
template.tex是轉換是采用的模板,這個模板并非我做的,它來自于這個 github 項目。

如果你對 latex 有研究,可以自行修改 template.tex 的內容,以控制輸出 pdf 的樣式。
環(huán)境
因為提出需求的朋友,使用的是 macOS 系統(tǒng),因此這里我們以 macOS 系統(tǒng)的安裝方式為準。注意下述工具實際上都是跨平臺的。因此如果你使用的是 Windows 或者 Linux ,理論上也都是可以使用的。
這個腳本在 macOS 下測試通過,歡迎你把其他平臺測試的結果告訴我。
python 3
在 macOS 上面安裝 Python 3 ,有兩種方式。
一種是安裝 Anaconda 套件,另一種是使用 Homebrew 。
我們先說 Anaconda 套件安裝方式。推薦普通用戶使用。它不僅包含 Python 本身,還提前為你安裝好了許多常用的依賴套件。
請到 這個網(wǎng)址 下載Anaconda的最新版本。

網(wǎng)站會主動識別你目前使用的操作系統(tǒng)。確定無誤后,請選擇左側的 Python 3.7 版本下載安裝。
在 macOS 環(huán)境中,你下載下來的,是一個以 pkg 為擴展名的軟件安裝包。雙擊它,根據(jù)提示一步步前進就可以了。
安裝完畢后,請打開一個終端窗口。
方法是在“聚焦搜索”(Spotlight)中,輸入 Terminal.app 。

然后,回車就可以了。

此時你會看到一個 ~ 提示符,這說明終端默認的初始位置,是用戶的家目錄。
咱們的演示目錄位置位于 ~/Downloads/demo-batch-markdown-to-pdf-master ,所以你可以使用:
cd Downloads/demo-batch-markdown-to-pdf-master
這個命令,進入咱們的演示目錄。

當你看到前面的路徑提示,已經(jīng)變成了 demo-batch-markdown-to-pdf-master ,就說明你已經(jīng)定位到演示目錄了。
對于高級用戶,如果你覺得 Anaconda 安裝了許多你不需要用到的軟件包,那么也可以嘗試 Homebrew 的安裝方法。
首先你需要安裝 XCode。安裝方法請參見這個鏈接。
然后,在終端窗口里面輸入:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
之后,把下面這一條語句,添加到你的 ~/.profile 文件末尾:
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
保存退出,新開一個窗口。
此時 Homebrew 已經(jīng)安裝好了,你可以執(zhí)行以下命令安裝 Python 3:
brew install python
之后,同樣在終端中使用以下命令進入演示目錄:
cd Downloads/demo-batch-markdown-to-pdf-master
pandoc
請到這個鏈接,下載符合你使用操作系統(tǒng)的最新版本 pandoc ,并且進行安裝。

根據(jù)我們的情況,選擇的就是 pandoc-2.3.1-macOS.pkg 。
下載下來的,依然是 pkg 安裝包,還是雙擊,就可以根據(jù)提示安裝了。
tinytex
因為需要轉換的 markdown 文件,大部分都是中文文檔,因此轉換到 pdf 的時候,需要 xelatex 的支持。
xelatex 可以用各種 latex 集成包來安裝使用,例如 texlive 等。但是這里推薦謝益輝的 tinytex 包,簡單小巧。

不過使用之前,建議刪除掉系統(tǒng)里面原有的 texlive 等包。否則可能會造成沖突。
在終端窗口下,執(zhí)行這個命令:
curl -sL "https://yihui.name/gh/tinytex/tools/install-unx.sh"
tinytex 就安裝好了。
之后,為了能夠更好地輔助我們進行轉換,需要執(zhí)行下列命令,安裝擴展:
tlmgr install unicode-math filehook xecjk xltxtra realscripts fancyhdr lastpage ctex ms cjk ulem environ trimspaces zhnumber collection-fontsrecommended
好了,至此準備工作結束,我們該開始執(zhí)行命令了。
運行
再次確認,你的終端下所在位置,為 demo-batch-markdown-to-pdf-master 。

執(zhí)行目錄查看命令:
ls
如果你看到返回的是如下信息,證明一切正常。

下面執(zhí)行:
python batch-markdown-to-pdf.py
如果順利,你會看到程序在運行,不過沒有什么輸出提示的。

因為轉換 pdf 的工作需要一些時間。所以如果你的 Markdown 文件很多,可能需要等一會兒。
請不要著急。去喝杯茶,看看書,休息一下。
當你回來的時候,(但愿)已經(jīng)轉換完畢了。

回到“訪達”(Finder) ,在我們的演示目錄(~/Downloads/demo-batch-markdown-to-pdf-master)下面,你會看到新生成了一個文件夾,叫做 pdf 。

你的轉換后 pdf 文件,應該已經(jīng)在里面了。

雙擊打開,看看效果:

如果遇到問題,歡迎反饋給我。
祝使用愉快!
喜歡請點贊和打賞。還可以微信關注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)。
如果你對 Python 與數(shù)據(jù)科學感興趣,不妨閱讀我的系列教程索引貼《如何高效入門數(shù)據(jù)科學?》,里面還有更多的有趣問題及解法。