Jupyter Notebook是很好的數據科學創作環境,是非常方便的Python代碼編輯器。jupyter提供導出的格式有.py、.html、.md、.pdf等。目前用其導出包含中文的pdf會遇到很多坑,網上也有一些解決方案,大致分為兩種方式,一是安裝 pandoc并不斷根據報錯提示安裝sty文件,不是很有效,另一種是安裝MiKTeX并改LaTeX文件。本文主要講第二種方式。Jupyter Notebook支持的導出格式
從效果來看,網頁中notebook的渲染是最好看的,導出的html對代碼和超鏈接失真嚴重。在網頁上點Download as -> PDF via LaTex的時候先是說缺少Pandoc庫,于是pip install pandoc,之后不再說缺少這個庫了,而是
nbconvert failed: pdflatex not found on PATH 或者 nbconvert failed: PDF creating failed, captured latex output。查了一些資料后改用命令行,要避免'xelatex' 不是內部或外部命令,也不是可運行的程序或批處理文件,需要先安裝MiKTeX,在其官網下載后,Windows版一路next安裝就行,安裝包有190MB,安裝過程還是耗費些時間的。安裝過程中其實就在自動地安裝一些sty模塊了,簡化了自己安裝的步驟。安裝MiKTeX的部分過程
下載安裝完成之后的步驟是:
1, ipynb文件編譯為tex
在命令行中定位到要轉換的jupyter文件的路徑下,輸入
jupyter nbconvert --to latex yourNotebookName.ipynb編譯ipynb文件為LaTeX文件
在文件目錄下就可以看到一個叫yourNotebookName.tex的LaTeX文件了。
2, 手動編輯latex文件
為了能支持輸出中文,需要改一下tex文件,在編輯器(我用的是Notepad++)打開剛才生成的LaTeX文件,
在\documentclass{article}(沒有這一句就在\documentclass[11pt]{ctexart} 的后面插入下面的語句)后面插入
\usepackage{fontspec, xunicode, xltxtra}
\setmainfont{Microsoft YaHei}
注意的是,目前(2019年8月)下載的MiKTeX 通過上面語句編譯生成的tex會缺少一句\usepackage{ctex} ,所以如果在\setmainfont{Microsoft YaHei}缺了對ctex的引用的話,就需要加上 \usepackage{ctex} 。修改latex文件
3, 轉LaTex為PDF
隨后在命令行下輸入:(我演示文件用的是GeoCluster.tex)
xelatex yourNotebookName.tex命令行轉latex為pdf
如果之前沒有運行過xelatex,首次運行會安裝一些依賴文件,會慢一些,最后運行完畢:運行完xelatex命令
可以在文件夾下看到輸出的文件:文件夾下的輸出結果
其中:.ipynb 是我們的jupyter文件
.tex 是由jupyter notebook文件生成的
.pdf 是我們最后的目標文件由.tex文件生成
.log、.out、.aux是LaTex生成pdf的一些輸出和日志
總結一下,從jupyter notebook生成pdf文件需要的依賴項還是比較多的,Windows下安裝MiKTeX才能用xelatex命令。生成步驟是先把ipynb文件編譯為LaTex,然后為了支持中文修改一下lex文件,最后轉換為pdf文件。
最后效果如下,雖然還是比不上網頁端.ipynb的直接渲染效果,但比起導出的html等格式,更好地作為展示格式。生成pdf的效果
有可能跑xelatex yourNotebookName.tex會遇到如下問題:LaTeX里字體形狀不符合要求,會改為默認字體,于是中文全部消失了,這種情況需要加上ctex的支持。運行提示LaTeX里字體形狀不符合要求
增加對ctex的支持
之后就正常導出包含中文的pdf文件了。
另外從ipynb文件變成pdf文件還可以采用的方式有:打開ipynb文件后在瀏覽器直接選擇打印;
導出markdown在Typora軟件中選擇導出為PDF;
這三種方式生成的PDF效果對比如下圖:
可看出,文中這種導出LaTeX再變成PDF是很實用的。
注:2,查了一下ctex的資料:CTeX 中文套裝在 MiKTeX 的基礎上增加了對中文的完整支持。