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 notebook將該notebook轉換成pdf的時候,發現總是得到Jupyter notebook的部分內容,在pdf中顯示為4頁內容;而在Jupyter notebook的後面好多內容,都沒在pdf中顯示出來。
苦思不得其解,我檢視Jupyter notebook的伺服器端,發現:
上述是一個
方面的錯誤.
原因分析
從上圖可以清晰的看出原因之所在。Jupyter notebook轉換成pdf格式的時候,藉助於本機上的 軟體進行中間的轉換工作,亦即,在進行轉換pdf的時候,先將Jupyter notebook轉換成 程式碼,再利用TeX live (我電腦上安裝的是Tex live)編譯 程式碼,編譯完成後得到pdf格式檔案。針對本問題的notebook例項,在notebook中碰巧出現了:
(\d\d
而經過我檢視中間的
程式碼,發現在其中有\d內容。熟悉
的朋友很容易明白,在其程式碼中\
起到輸入
指令的作用。而在此例中,
引擎沒發現指令\d
的存在,所以
引擎報錯,pdf的生成工作到此為止。這就是整個問題所在。
解決方案
這真是Jupyter notebook軟體的一個bug。它在轉換pdf時,將本來應該是使用者內容的部分轉換而成為了 中的並不存在的命令。
熟悉
的朋友自然容易知道解決方案:手工改動
程式碼,在凡事\d
的地方都換位\\d
,但是Jupyter notebook中的程式碼部分不用替換。
遇到這個問題,真是個偶然!!
Albert Sweigart. Automate the boring stuff with Python. No Starch Press, 2015. ↩︎