jupyter notebook导出包含中文的PDF并正常显示p
jupyter notebook默认是无法导出包含中文的pdf文件的,并且对于pandas的表格也不能很好的支持。需要安装pandoc、latex和修改模板文件才能正常显示。
接下来前两部分将介绍如何从jupyter notebook导出包含中文的PDF文件。第三部分介绍如何修改设置,使导出的文件中正常显示pandas的表格。
以下所有的操作在Ubuntu 18.04环境(WSL windows下的Linux子系统,支持windows10,推荐Windows10用户使用)和jupyter lab 0.34(jupyter notebook的下一代产品,基本操作与jupyter notebook类似)下测试成功,其他系统按照相关的需求修改即可。
1 安装依赖
依赖包括nbconvert
、pandoc
和latex
,安装方法参考:官方文档
-
安装nbconvert
pip install nbconvert # OR conda install nbconvert
-
安装pandoc
sudo apt-get install pandoc
其他系统的安装方法参考官方网站
-
安装latex
sudo apt-get install texlive-xetex sudo apt-get install latex-cjk-all # 对中文的支持包
其他系统的安装(没有测试latex-cjk-al包的安装)
2 导出PDF
有两种方法可以导出包含中文的PDF文件,一是:通过latex文件转换(2.1节);二是:修改nbconvert的模板文件(2.2节)
2.1 通过latex文件转换
导出为LaTex文件,然后修改latex文件并编译成pdf,步骤如下:
- 导出LaTex文件

-
修改Latex文件
在最后一行documentclass下方添加如下代码
\usepackage{fontspec} \usepackage{xeCJK} \setCJKmainfont[BoldFont=SimHei]{SimSun} \setCJKmonofont{SimSun}% 设置缺省中文字体
-
编译
输入如下命令进行编译
xelatex filename
编译成功之后即可输出正常的PDF文件
2.2 修改nbconvert的模板文件使中文正常显示(推荐)
除了上述通过latex文件转换为正常的PDF之外,更推荐的方法是通过修改nbconvert的模板文件来使jupyter notebook可以正常的导出PDF文件。具体的步骤如下:
2.2.1 修改模板文件
nbconvert的模板文件位于python_install_path/site-packages/nbconvert/templates/latex/
文件夹下。
1 修改模板文件使其正常显示中文
修改模板文件下的:base.tplx
。在block packages的最后添加如下内容
\usepackage{fontspec}
\usepackage{xeCJK}
\setCJKmainfont[BoldFont=SimHei]{SimSun}
\setCJKmonofont{SimSun}% 设置缺省中文字体
位置如图所示

2 修改模板文件使其正常显示中文标题
导出pdf文件的标题默认是获取.ipynb
文件的文件名,默认情况下,当文件名是中文的时候,pdf文件是无法正常显示标题的(显示为几个问号),需要更改文件模板后才能正常显示。同样修改文件base.tplx
。修改block title下的内容,删除| ascii_only
,具体如下图所示


2.2.2 导出PDF文件
最后直接在jupyter notebook中导出PDF即可

3 在PDF中正常显示pandas表格
默认情况下jupyter notebook中的pandas表格导出为pdf后不会正常显示,如下图所示:

需要设置pandas的展示格式,设置的代码如下:
pd.options.display.latex.repr = True
更改之后导出的pdf文件中的pandas表格显示如下:

更多pandas的设置参考这个网址