如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF

时间:2024-03-20 10:04:56

最近习惯用Jupyter Notebook写文档,写完之后却没有办法导出为PDF格式。曾经导出为 .html 作为替代方案,但是在手机上又不是很好打开,关键是导出为 .html 图片会无法正常显示。今天研究出了一个比较流氓的解决方案:用浏览器直接保存为PDF(而且亲测__谷歌浏览器__的效果最好)。
我的系统环境是:Window10,Anancoda (基于Python3)

先总结一下网上流传的“Jupyter Notebook 导出pdf 并支持中文显示”的第一种方案:

  1. 安装pandoc:pip install pandoc
    https://github.com/jgm/pandoc/releases
  2. 安装MiKTex:pip install MiKTex
    https://miktex.org/download
  3. 将 .ipynb 导出为 .tex(LaTex文件)
    ——这里可以用命令行的方式,定位到要转换的jupyter文件的路径下,输入
    jupyter nbconvert --to latex yourNotebookName.ipynb
    ——也可以直接:“File”→"Download as"→“Latex(.tex)”
  4. 手动修改 .tex文件,增加中文支持:
    \documentclass{article}后面插入:
\usepackage{fontspec, xunicode, xltxtra}
\setmainfont{Microsoft YaHei}
\usepackage{ctex}
  1. 将 .tex文件转为pdf: 在命令行输入xelatex yourNotebookName.tex

如果可行的话,当前文件夹下就会生成LaTex编译的一系列文件,以及我们想要的pdf。

但是我在这个过程中出现了一些问题:

  • 首先第2步的时候没有成功,报错如下:如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF
  • 第3步编译出来的 .tex 文件根本不能用WinEdt打开,会有如下报错:
    如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF
  • 所以只能用Notepad++打开并修改:

如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF

  • 我还尝试从Notepad++中将源码全部复制到WinEdt的一个新的.tex文件中,仍然不能正常编译: !
    如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF

如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF
总之就是不成功。

第二种方案为:

  1. 安装pandoc
  2. 安装MiKTex
  3. 直接修改tex模版文件:
    首先找到 article.tplx 文件,我的Anaconda中的路径为:C:\Users\admin\Anaconda3\pkgs\nbconvert-5.4.0-py37_1\Lib\site-packages\nbconvert\templates\latex
    打开, 将 \documentclass[11pt]{article} 修改为 \documentclass{ctexart}

如果可行的话,就可以直接“File→Download as→PDF via Latex(.pdf)”了。

当然我还是不成功。

后来想了下,可能是因为MiKTex不是这么安装的?这里暂未做尝试。
部分参考:https://www.itcodemonkey.com/article/8710.html;
https://www.jianshu.com/p/6b84a9631f8a;
https://www.cnblogs.com/SC-CS/p/Jupyter-PDF_Chinese_Support.html

后来就决定采用流氓方式:实在不行我就直接在浏览器打印为PDF啊!

一开始我的Jupyter Notebook默认打开的浏览器是Microsoft Edge,但是发现打印出来的pdf简直完全不能看啊!
如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF

没办法,我只好把Jupyter Notebook默认打开的浏览器改为谷歌浏览器:

  1. 首先打开Anaconda Prompt,运行jupyter notebook --generate-config
    如何将Jupyter Notebook(.ipynb文件)导出为支持中文显示的PDF
  2. 根据返回的路径(我这里是C:\Users\admin.jupyter\jupyter_notebook_config.py),找到jupyter_notebook_config.py
  3. 打开该文件,在任意位置加上以下代码:
import webbrowser
webbrowser.register('chrome', None, webbrowser.GenericBrowser(r'C:\Users\admin\AppData\Local\Google\Chrome\Application\chrome.exe'))
c.NotebookApp.browser = 'chrome'

这里要找到你的谷歌浏览器chrome.exe所在的路径,并填到上面对应的位置。注意在路径前添加字母 r 。

参考:https://blog.csdn.net/caterfreelyf/article/details/79774311

最后再重新打开Jupyter Notebook,发现就是谷歌浏览器啦!(不知道为啥,第3步我是重复了两三次才成功的。)

打开我的 .ipynb文件,使用谷歌浏览器自带的“打印”功能,将网页打印成PDF,意外发现效果居然还相当好,格式没问题,代码没问题,代码输出结果没问题,图片没问题,公式也没问题。开心!