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 无法显示中文。我们需要新增一个支持中文的转换模板。

  1. 首先找到 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
    
  2. 进入 LaTeX 模板目录。

    LaTeX 模板存放在 Python 安装目录下的 share/jupyter/nbconvert/templates/latex 处。

    cd share/jupyter/nbconvert/templates/latex
    
  3. 编辑模板文件 base.tex.j2,在 ((* block packages *)) 行下面添加新的配置:

        ((* block packages *))  % 在这行之后添加
        \usepackage{xeCJK}
        \setCJKmainfont{STSong}
    
  4. 再次尝试导出,你就会发现现在可以成功渲染中文了。

参考:How to have convert notebook command support Chinese character on Mac? I am willing to contribute some code to jupyter notebook | Stack Overflow

posted @ 2024-09-29 13:36  Undefined443  阅读(349)  评论(0)    收藏  举报