VSCode中配置Jupyter插件,实现Jupyter Notebook转PDF
为什么需要这套配置
常见痛点
如果你尝试过在 VSCode 中将 Jupyter Notebook 导出为 PDF,可能遇到过这些问题:
- 中文乱码:导出的 PDF 中文字显示为方框或乱码
- 缺少 LaTeX:提示找不到 xelatex 或 pdflatex
- 字体问题:即使安装了 LaTeX,中文字体配置也很麻烦
- 环境混乱:不知道该在哪个 conda 环境安装依赖
本教程的解决方案
通过本教程,你将搭建一套完整的工具链:
1 | Jupyter Notebook (.ipynb) |
核心组件:
| 组件 | 作用 |
|---|---|
| TeX Live | 提供 xelatex 编译器 |
| nbconvert | 将 Notebook 转换为 LaTeX |
| ctex 宏包 | 提供中文排版支持 |
| 自定义字体 | 确保中文正确显示 |
本教程环境示例
本教程基于以下实际环境编写,已验证可行:
| 项目 | 配置 |
|---|---|
| 操作系统 | Ubuntu 24.04 LTS |
| IDE | VSCode / Cursor / Windsurf(Remote SSH) |
| Conda | miniforge3,路径 /home/cpu/miniforge3 |
| LaTeX | TeX Live 2023(APT 安装) |
| 字体 | Maple Mono NF CN(等宽编程字体,中英文统一) |
关于 IDE:本教程以 VSCode 为例,但同样适用于 Cursor、Windsurf 等基于 VSCode 的 AI IDE。
第一部分:安装 TeX Live
TeX Live 是 LaTeX 的发行版,提供编译 Notebook 为 PDF 所需的 xelatex 引擎。
Ubuntu/Debian 系统
1 | # 安装完整版 TeX Live(约 5GB,包含所有宏包) |
命令解释:
texlive-full:完整版 TeX Live,包含所有宏包和字体,避免后续缺包问题
磁盘空间紧张? 可以选择精简安装:
1 sudo apt install texlive texlive-latex-extra texlive-lang-chinese texlive-xetex latexmk精简版约 500MB,但后续可能遇到缺包问题。
验证安装
1 | # 检查 xelatex(中文编译必备) |
预期输出:
1 | XeTeX 3.141592653-2.6-0.999995 (TeX Live 2023/Debian) |
第二部分:安装中文字体
方案一:使用系统自带字体
Ubuntu 可以安装开源中文字体:
1 | # 安装 Google Noto CJK 字体(推荐) |
方案二:使用自定义字体(本教程示例)
本教程使用 Maple Mono NF CN 字体,这是一款支持中英文的等宽编程字体,中英文统一使用。
假设字体已安装在 /usr/local/share/fonts/MapleMono-NF-CN/ 目录下:
1 | # 刷新字体缓存 |
预期输出:
1 | /usr/local/share/fonts/MapleMono-NF-CN/MapleMono-NF-CN-Regular.ttf: Maple Mono NF CN:style=Regular |
重要:记住字体名称
Maple Mono NF CN,后面配置模板时会用到。
第三部分:创建专用 Conda 环境
为了不污染 base 环境,建议创建专门的 LaTeX 导出环境:
1 | # 创建名为 latex 的环境,安装必要依赖 |
组件说明:
| 包名 | 作用 |
|---|---|
| jupyter | Jupyter 核心组件 |
| nbconvert | Notebook 格式转换工具 |
| pandoc | 通用文档转换器 |
第四部分:修改 nbconvert 模板
这是关键步骤!默认的 nbconvert 模板不支持中文,需要修改 index.tex.j2 模板文件。
步骤 1:查找模板文件
1 | # 在 latex 环境中查找模板 |
示例输出:
1 | /home/cpu/miniforge3/envs/latex/share/jupyter/nbconvert/templates/latex/index.tex.j2 |
步骤 2:备份原始模板
1 | cp /home/cpu/miniforge3/envs/latex/share/jupyter/nbconvert/templates/latex/index.tex.j2 \ |
步骤 3:修改模板
使用文本编辑器打开 index.tex.j2,找到以下内容:
1 | ((*- block docclass -*)) |
替换为:
1 | ((*- block docclass -*)) |
配置项说明
| 配置 | 作用 |
|---|---|
\setmainfont{Maple Mono NF CN} |
设置英文主字体 |
\setmonofont{Maple Mono NF CN} |
设置英文等宽字体(代码) |
\usepackage[UTF8,fontset=none]{ctex} |
加载 ctex 宏包,禁用默认字体集 |
\setCJKmainfont{Maple Mono NF CN} |
设置中文主字体 |
\setCJKmonofont{Maple Mono NF CN} |
设置中文等宽字体 |
字体名称必须与系统中安装的字体完全一致! 可以用
fc-list命令查看。
其他常用字体配置示例
使用 Noto 字体(开源推荐):
1 | \setmainfont{DejaVu Sans} % 英文字体 |
使用微软雅黑(Windows 字体):
1 | \setmainfont{Consolas} % 英文字体 |
第五部分:安装 VSCode 插件
在 VSCode 中安装以下插件:
必需插件
Jupyter(Microsoft 官方)
- 提供 Notebook 编辑和运行功能
- 提供导出为 PDF 的入口
Python(Microsoft 官方)
- 提供 Python 语言支持
推荐插件
- LaTeX Workshop(James Yu)
- 提供 LaTeX 编辑和编译功能
- 可单独编辑
.tex文件
安装方式:
- 方式一:
Ctrl+Shift+X打开扩展市场搜索安装 - 方式二:
Ctrl+P输入ext install ms-toolsai.jupyter
第六部分:验证配置
方式一:直接导出 PDF
- 在 VSCode 中打开任意
.ipynb文件 - 确保选择了
latex环境作为内核 - 点击右上角的导出按钮(或右键菜单)
- 选择 “Export to PDF”
- 等待转换完成,检查生成的 PDF 文件
方式二:先导出 LaTeX 再编译
如果直接导出失败,可以分步操作:
- 选择 “Export to LaTeX”
- 生成的
.tex文件用 LaTeX-Workshop 打开 - 手动编译(
Ctrl+Alt+B) - 查看编译日志排查问题
命令行方式
1 | # 激活环境 |
常见问题与解决方案
问题 1:导出时提示找不到 xelatex
现象:
1 | xelatex not found on PATH |
解决方案:
确认 TeX Live 已安装:
1
which xelatex
如果是 Remote SSH 环境,确保环境变量在
~/.bash_profile中配置(而非.bashrc)重启 VSCode Server:
Ctrl+Shift+P→ “Remote-SSH: Kill VS Code Server on Host…”
问题 2:中文显示为方框或乱码
原因: 模板中的字体在系统中不存在
解决方案:
检查系统中文字体:
1
fc-list :lang=zh
修改
index.tex.j2中的\setmainfont{}为已安装的字体名刷新字体缓存:
1
fc-cache -fv
问题 3:提示缺少 LaTeX 宏包
现象:
1 | ! LaTeX Error: File `xxx.sty' not found. |
解决方案:
1 | # 安装完整版 TeX Live |
问题 4:多个 conda 环境的模板都需要修改
如果你有多个环境都安装了 nbconvert,需要分别修改每个环境的 index.tex.j2:
1 | # 查找所有模板文件 |
建议修改所有找到的文件,确保兼容性。
与 LaTeX-Workshop 插件联动
如果你同时使用 LaTeX-Workshop 插件编写 .tex 文档,可以参考我的另一篇教程进行完整配置:
VSCode中配置LaTeX-Workshop插件,实现LaTeX编译为PDF
联动优势:
- Jupyter 导出的
.tex文件可以用 LaTeX-Workshop 进一步编辑 - 共享同一套 TeX Live 环境和字体配置
- 统一的中文支持方案
总结
通过本教程,你已经配置好了完整的 Jupyter Notebook 转 PDF 环境:
- TeX Live:提供 xelatex 编译引擎
- 中文字体:Maple Mono NF CN(或其他中文字体)
- latex conda 环境:隔离的 Python 环境,包含 nbconvert 和 pandoc
- 修改后的模板:
index.tex.j2支持中文排版
现在你可以:
- 在 VSCode 中直接将 Notebook 导出为带中文的 PDF
- 先导出为 LaTeX,再用 LaTeX-Workshop 精细调整
- 使用命令行批量转换多个 Notebook
有问题或建议?欢迎留言!