解决MacOS中Jupyter Notebook通过Latex导出PDF中文无法显示的问题
问题和原因
jupyter notebook
通过nbconvert调用Latex
导出PDF,由于nvconvert中转换模版中并不包含中文支持的package申明,导致Latex渲染时无法识别中文字符和对应的字体。出现类似:
LaTeX Error: Unicode character 正 (U+6B63) not set up for use with LaTeX.
的报错。导出的PDF文件中,所有中文字符都显示为空白。
解决方案
有两种方法可以解决:
- 先从Notebook导出为Latex,再使用如TexShop等工具打开Latex文件并添加中文支持,之后导出
- 修改
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模版,
通过修改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