1. 程式人生 > >Jupyter notebook 轉pdf時出現的一個錯誤(只出現前4頁)及原因分析

Jupyter notebook 轉pdf時出現的一個錯誤(只出現前4頁)及原因分析

文章目錄

問題描述

最近迷上了利用Jupyter notebook 為工具學習有關Python語言方面的知識。遇到該錯誤純粹是個偶然,這應該算是Jupyter notebook的一個bug。

問題的出現是這樣的:我讀到書籍《Automate the boring stuff with Python》1的170頁的時候,有這樣一句話:

Adding parentheses will create groups in the regex: (\d\d\d)-(\d\d\d-\d\d\d\d). Then you can…

在Jupyter notebook能正確顯示,如下圖:
Jupyter顯示頁面
可是當我利用Jupyter notebook將該notebook轉換成pdf的時候,發現總是得到Jupyter notebook的部分內容,在pdf中顯示為4頁內容;而在Jupyter notebook的後面好多內容,都沒在pdf中顯示出來。

苦思不得其解,我檢視Jupyter notebook的伺服器端,發現:
JupyterBug
上述是一個 LaTeX \LaTeX

方面的錯誤.

原因分析

從上圖可以清晰的看出原因之所在。Jupyter notebook轉換成pdf格式的時候,藉助於本機上的 LaTeX \LaTeX 軟體進行中間的轉換工作,亦即,在進行轉換pdf的時候,先將Jupyter notebook轉換成 LaTeX

\LaTeX 程式碼,再利用TeX live (我電腦上安裝的是Tex live)編譯 LaTeX \LaTeX 程式碼,編譯完成後得到pdf格式檔案。針對本問題的notebook例項,在notebook中碰巧出現了:

(\d\d

而經過我檢視中間的 LaTeX \LaTeX 程式碼,發現在其中有\d內容。熟悉 LaTeX \LaTeX 的朋友很容易明白,在其程式碼中\起到輸入 LaTeX \LaTeX 指令的作用。而在此例中, LaTeX \LaTeX 引擎沒發現指令\d的存在,所以 LaTeX \LaTeX 引擎報錯,pdf的生成工作到此為止。這就是整個問題所在。

解決方案

這真是Jupyter notebook軟體的一個bug。它在轉換pdf時,將本來應該是使用者內容的部分轉換而成為了 LaTeX \LaTeX 中的並不存在的命令。

熟悉 LaTeX \LaTeX 的朋友自然容易知道解決方案:手工改動 LaTeX \LaTeX 程式碼,在凡事\d的地方都換位\\d,但是Jupyter notebook中的程式碼部分不用替換。

遇到這個問題,真是個偶然!!


  1. Albert Sweigart. Automate the boring stuff with Python. No Starch Press, 2015. ↩︎