最近习惯用Jupyter Notebook写文档,写完之后却没有办法导出为PDF格式。曾经导出为 .html 作为替代方案,但是在手机上又不是很好打开,关键是导出为 .html 图片会无法正常显示。今天研究出了一个比较流氓的解决方案:用浏览器直接保存为PDF(而且亲测__谷歌浏览器__的效果最好)。
我的系统环境是:Window10,Anancoda (基于Python3)
先总结一下网上流传的“Jupyter Notebook 导出pdf 并支持中文显示”的第一种方案:
- 安装pandoc:pip install pandoc
https://github.com/jgm/pandoc/releases - 安装MiKTex:pip install MiKTex
https://miktex.org/download - 将 .ipynb 导出为 .tex(LaTex文件)
——这里可以用命令行的方式,定位到要转换的jupyter文件的路径下,输入
jupyter nbconvert --to latex yourNotebookName.ipynb
——也可以直接:“File”→"Download as"→“Latex(.tex)” - 手动修改 .tex文件,增加中文支持:
在\documentclass{article}
后面插入:
\usepackage{fontspec, xunicode, xltxtra}
\setmainfont{Microsoft YaHei}
\usepackage{ctex}
- 将 .tex文件转为pdf: 在命令行输入
xelatex yourNotebookName.tex
如果可行的话,当前文件夹下就会生成LaTex编译的一系列文件,以及我们想要的pdf。
但是我在这个过程中出现了一些问题:
- 首先第2步的时候没有成功,报错如下:
- 第3步编译出来的 .tex 文件根本不能用WinEdt打开,会有如下报错:
- 所以只能用Notepad++打开并修改:
- 我还尝试从Notepad++中将源码全部复制到WinEdt的一个新的.tex文件中,仍然不能正常编译: !
总之就是不成功。
第二种方案为:
- 安装pandoc
- 安装MiKTex
- 直接修改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默认打开的浏览器改为谷歌浏览器:
- 首先打开Anaconda Prompt,运行
jupyter notebook --generate-config
:
- 根据返回的路径(我这里是C:\Users\admin.jupyter\jupyter_notebook_config.py),找到jupyter_notebook_config.py
- 打开该文件,在任意位置加上以下代码:
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,意外发现效果居然还相当好,格式没问题,代码没问题,代码输出结果没问题,图片没问题,公式也没问题。开心!