根本原因是xelatex缺失中文支持且默认latex模板未声明中文环境;需确认xelatex可用、配置path、使用含ctex和中文字体的自定义模板,并确保pandoc为原生安装。

直接导出中文 PDF 失败,根本原因不是 Jupyter 本身的问题,而是它依赖的底层工具链缺失中文支持——xelatex 找不到可用中文字体,nbconvert 用的默认 LaTeX 模板也不声明中文环境。只要补上这两环,问题就解了。
确认 xelatex 是否可用且路径正确
这是最常卡住的第一步。Jupyter 导出 PDF 实际调用的是 xelatex,不是 pdflatex;后者不支持系统字体,根本没法排中文。
- 终端运行
xelatex --version,有输出说明已安装;没反应就说明没装或没进PATH - Mac 用户装
mactex后,通常路径是/usr/local/texlive/2023/bin/universal-darwin(年份按实际版本调整),需手动加到 shell 配置里 - Windows 用户装
MiKTeX后,重点检查是否勾选了Install missing packages on-the-fly,并把C:\Program Files\MiKTeX\miktex\bin\x64加进系统环境变量 - 重启终端或 VSCode 再试,否则旧 PATH 不生效
修改或新建中文 LaTeX 模板(关键一步)
默认模板用 \documentclass{article},它不加载中文支持包。必须让 nbconvert 使用带 ctex 的模板,否则即使 xelatex 装好了,编译时仍会报 Missing character。
- 不要直接改
article.tplx(它在 site-packages 下,升级 nbconvert 会被覆盖) - 推荐做法:新建自定义模板目录,比如
~/.jupyter/nbconvert/templates/cn - 该目录下放两个文件:
conf.json(内容为{"base_template": "latex"})和index.tex.j2 -
index.tex.j2开头加上这三行:\usepackage{ctex}、\usepackage{fontspec}、\setmainfont{Noto Sans CJK SC}(Mac 推荐用这个开源字体,Windows 可换SimHei或Microsoft YaHei) - 导出时指定模板:
jupyter nbconvert --to pdf --template cn your_notebook.ipynb
避免 Pandoc 和字体路径引发的隐性错误
Pandoc 是 nbconvert 的中间转换器,它负责把 .ipynb 翻译成 .tex。很多“导出失败但无明确报错”的情况,其实是 Pandoc 在处理 Markdown 中文段落时因编码或字体声明缺失悄悄出错。
- 务必从 Pandoc 官网下载 Windows/macOS 原生安装包,别用
pip install pandoc—— 那只是个 Python 封装,不带完整二进制 - 如果 notebook 里用了 SVG 图片,导出可能中断;临时解决是把
matplotlib输出设为png:plt.rcParams['savefig.format'] = 'png' - Mac 上若用系统自带的“苹方-简”字体,需确认字体名拼写准确:
\setmainfont{PingFang SC},空格和大小写都不能错
真正麻烦的不是步骤多,而是每个环节都依赖前一个环节的输出状态——xelatex 报错可能源于模板缺 ctex,而模板生效又依赖 Pandoc 正确生成 .tex。建议先跑一次 jupyter nbconvert --to latex your.ipynb,手动打开生成的 .tex 文件,确认开头几行已有 \usepackage{ctex} 和正确的字体设置,再执行 PDF 编译,这样排查起来最直接。











