问题和原因

jupyter notebook通过nbconvert调用Latex导出PDF,由于nvconvert中转换模版中并不包含中文支持的package申明,导致Latex渲染时无法识别中文字符和对应的字体。出现类似:

LaTeX Error: Unicode character 正 (U+6B63) not set up for use with LaTeX.

的报错。导出的PDF文件中,所有中文字符都显示为空白。

解决方案

有两种方法可以解决:

  1. 先从Notebook导出为Latex,再使用如TexShop等工具打开Latex文件并添加中文支持,之后导出
  2. 修改nbconvert的模版,直接添加中文支持,这样即可直接导出PDF

这里说第二种办法:

首先通过jupyter --paths获得Jupyter相关路径,

% jupyter --paths

输出类似:

config:
    /Users/xxx/.jupyter
    /Users/xxx/custom_path/venv/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /Users/xxx/Library/Jupyter
    /Users/xxx/custom_path/venv/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /Users/xxx/Library/Jupyter/runtime

找到...share/jupyter文件夹所在位置,并定位到...share/jupyter/nbconvert/templates/latex文件夹,里面有nbconvert转换LaTex模版,
nvconvert-latex.png
通过修改base.tex.j2模版文件,添加xeCJK包申明和相关字体即可影响所有相关模版:

    \usepackage{xeCJK}
    \setCJKmainfont{STSong}

添加完成后,模版文件应类似:

((*- block header -*))
    ((* block docclass *))\documentclass[11pt]{article}((* endblock docclass *))

    ((* block packages *))
    \usepackage{xeCJK}
    \setCJKmainfont{STSong}
    \usepackage{iftex}
    ...

注意,字体部分可以通过Mac的字体书(Font Book)找到合适的中文字体名称,不一定非得使用宋体(STSong)。另外除了主要字体,也可以定义其他情况的字体,若加粗和倾斜时应用的字体。

相关文章

github:jupyter/nbconvert
Mac环境下jupyter notebook导出PDF显示中文的解决方案 (nbconvert 6, python 3.9)
convert notebook (contains Chinese words) to PDF successfully but those Chinese words are missing

标签: latex, jupyter, notebook, MacOS

评论已关闭