JupyterLab 导出含有中文的 PDF
一般情况下我们直接使用 JupyterLab 导出的 PDF 是无法显示中文的。
这是 JupyterLab 导出 PDF 的过程:
graph LR
A["Jupyter Notebook (.ipynb)"] -->|nbconvert| B["LaTeX (.tex)"]
B -->|XeLaTeX| C["PDF (.pdf)"]
可以看到在导出过程中使用了 nbconvert 包,这个包会先将 .ipynb 文件转换为 .tex 文件,再由 XeLaTeX 将 .tex 文件转换为 PDF。
问题就出在中间的 .tex 文件。nbconvert 使用的 LaTeX 转换模板不支持中文,因此最后导出的 PDF 无法显示中文。我们需要新增一个支持中文的转换模板。
-
首先找到 Python 安装目录:
$ conda list nbconvert # packages in environment at /opt/homebrew/Caskroom/miniconda/base/envs/py311: # # Name Version Build Channel nbconvert 7.10.0 py311hca03da5_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main可以看到 Python 安装目录为
/opt/homebrew/Caskroom/miniconda/base/envs/py311。cd /opt/homebrew/Caskroom/miniconda/base/envs/py311 -
进入 LaTeX 模板目录。
LaTeX 模板存放在 Python 安装目录下的
share/jupyter/nbconvert/templates/latex处。cd share/jupyter/nbconvert/templates/latex -
编辑模板文件
base.tex.j2,在((* block packages *))行下面添加新的配置:((* block packages *)) % 在这行之后添加 \usepackage{xeCJK} \setCJKmainfont{STSong} -
再次尝试导出,你就会发现现在可以成功渲染中文了。

浙公网安备 33010602011771号