手動匯出太麻煩,試試把 Markdown 批量轉為 PDF
編注:文件格式轉換,一直都是個煩心事兒。比如簡單輕便的 Markdown 文件,想匯出 PDF 時卻要手工操作。如果不巧遇上一堆檔案需要處理,就很讓人頭大。本文作者是一位大學教師,同時他也是一位自動化高玩,擅長使用自動化工具來解決問題。這篇文章中,作者將帶你迅速搞定 Markdown-PDF 文件的轉換。雖然文中有一些程式碼,但放心,文章步驟非常詳細,並且作者還提供了現成的工具供你取用。

需求
不少人喜歡用 Markdown 來寫文章,不過給別人看時,我們一般會匯出 PDF 檔案,便於直觀地展示最終效果。有個朋友提出,希望把資料夾中的許多 Markdown 檔案,批量轉換為對應名稱的 pdf 格式檔案。於是我編寫了一個 Python 指令碼,並且分享給你。如果你有類似的需求,歡迎使用。
本文使用 pandoc 作為轉換工具,這是一個命令列下的格式轉換工具,支援 Markdown、pdf、txt 等多種格式文件之間的相互轉換。Pandoc 可以自動解析 Markdown 檔案裡的圖片連結,所以不論是本地儲存的圖片,還是圖床上的圖片,都可以正確轉換並且顯示到 pdf 檔案裡。

注:本地圖片只測試了圖片是絕對路徑的情況,Ulysses 等使用者匯出的 Markdown 檔案用了相對路徑,需自行測試。
工具下載
我已經把程式碼和樣例 Markdown 檔案都為你放在了 ofollow,noindex" target="_blank">這個 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 的樣式。
環境準備
因為提出需求的朋友,使用的是 macOS 系統,因此這裡我們以 macOS 系統的安裝方式為準。注意下述工具實際上都是 跨平臺 的,因此如果你使用的是 Windows 或者 Linux ,理論上也都是可以使用的。總的來說,我們需要做這幾方面的準備:
- Python 環境:用於呼叫 pandoc 進行批量處理
- Pandoc:用於把 Markdown 轉換為 PDF
- tinytex:讓 Pandoc 支援中文文件的轉換
看起來步驟有點多,但是第一次配置好了,以後再轉換格式就不用再費力氣。我編寫的指令碼在 macOS 下測試通過,歡迎你把其他平臺測試的結果告訴我。
批量處理檔案:Python 3
macOS 自帶的 Python 版本較老,我們需要最新的 Python 3,這裡介紹一個簡單的安裝方法:HomeBrew。HomeBrew 是一個 macOS 下的包管理器,你可以把它簡單理解為命令列版本的軟體市場,輸入命令就能安裝、管理和解除安裝各種軟體。
直接開啟終端視窗,在裡面輸入指令碼安裝 Homebrew。期間可能檢測到你尚未安裝 Xcode Command Line Tool,按系統提示安裝就行。此 Xcode Command Line Tool 非彼 Xcode,不會佔用幾個 GB 的空間。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
之後,在 Finder 裡找到 ~/.profile
(可以通過快捷鍵 ⇧Shift - ⌘Command -G
開啟「前往」視窗,輸入 ~/.profile
來直達目的地),把下面這一條語句新增到你的 ~/.profile
檔案末尾:
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
儲存退出,新開一個視窗。此時 Homebrew 已經安裝好了,你可以接著執行以下命令安裝 Python 3:
brew install python
關於 HomeBrew,可以參考以下文章:
格式轉換利器:Pandoc
Pandoc 是一個格式轉換的工具,Markdown、PDF、TXT、Doc……都能夠勝任。和安裝 Python 一樣,可以使用 HomeBrew 來安裝它。
brew install pandoc
給 Pandoc 新增中文支援:tinytex
因為需要轉換的 markdown 檔案,大部分都是中文文件,因此轉換到 pdf 的時候,需要 xelatex 的支援。
xelatex 可以用各種 latex 整合包來安裝使用,例如 texlive 等。但是這裡推薦謝益輝的 tinytex 包,簡單小巧。

不過使用之前,建議刪除掉系統裡面原有的 texlive 等包。否則可能會造成衝突。
這次 HomeBrew 派不上用場了,在終端視窗下,我們換一個命令:
curl -sL "https://yihui.name/gh/tinytex/tools/install-unx.sh"
tinytex 就安裝好了。
之後,為了能夠更好地輔助我們進行轉換,需要執行下列命令,安裝擴充套件:
tlmgr install unicode-math filehook xecjk xltxtra realscripts fancyhdr lastpage ctex ms cjk ulem environ trimspaces zhnumber collection-fontsrecommended
好了,至此準備工作結束,我們該開始執行命令了。
執行
準備妥當,現在我們要在終端中轉到演示目錄的位置 demo-batch-markdown-to-pdf-master
(不如 Python 會找不到所需的配置檔案)。如果你下載的演示目錄還在下載資料夾中的話,可以用下面的命令:
cd Downloads/demo-batch-markdown-to-pdf-master

接著,執行目錄檢視命令:
ls
如果你看到返回的是如下資訊(裡面就是我們的演示檔案),證明一切正常。

確認好位置沒出錯後,就可以試著轉換檔案了。執行:
python batch-markdown-to-pdf.py
如果順利,你會看到程式在執行,不過沒有什麼輸出提示的。

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

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

你的轉換後 PDF 檔案,應該已經在裡面了。

雙擊開啟,看看效果:

如果遇到問題,歡迎反饋給我。祝使用愉快!
如果你對 Python 與資料科學感興趣,不妨閱讀我的系列教程索引貼《 如何高效入門資料科學? 》,裡面還有更多的有趣問題及解法。
>下載少數派客戶端、關注少數派公眾號,學會更多效率技巧 :muscle: