VS Code + LaTeX Workshop 是最可控、易维护的论文排版工作流,但配置错误(如 autoBuild.run 设为 never、根文件未识别、-synctex=1 缺失、tools 与 recipes 不匹配)会导致 xelatex 静默失败、PDF 不更新且无报错。

直接上结论:VS Code + LaTeX Workshop 是当前最可控、最易维护的论文排版工作流,但配置错一个参数,xelatex 就会静默失败,PDF 不更新,错误也不报——这不是你代码写错了,是工具链没对齐。
为什么xelatex编译不生成PDF却没报错
常见现象:保存 .tex 文件后,右下角状态栏显示 “Building…” 然后消失,PDF 标签页没刷新,也没弹出错误提示。根本原因通常是 latex-workshop.latex.autoBuild.run 被设为 never 或 onSave,而你实际用的是 onFileChange 触发机制,但监听路径没覆盖主文件。
- 确认主文档是否被识别:VS Code 左下角应显示 “Root file: xxx.tex”,否则插件不知道编译谁
-
latex-workshop.latex.rootFile如果手动指定,路径必须用正斜杠/(Windows 也一样),比如"./main.tex",不能写".\main.tex" - 如果项目含子目录(如
chapters/intro.tex),需在主文件顶部加注释:% !TEX root = ../main.tex - 禁用
latex-workshop.message.error.show后,编译失败会被吞掉——临时打开它,看终端输出里有没有! Undefined control sequence或字体缺失警告
ctex 和 xeCJK 中文支持怎么选
中文论文必须用 XeLaTeX 引擎,但宏包选错会导致标点挤压、段落缩进异常、章节标题乱码。现在唯一推荐方案是只用 ctex,别混用 xeCJK。
-
ctex是封装层,自动处理字体、断行、标题编号等,一行\usepackage{ctex}就够 - 若手动加载
xeCJK,再加ctex,会触发字体重复注册,XeLaTeX 报fontspec error: "font-not-found" - 系统字体路径不一致:Windows 用
"SimSun",macOS 用"PingFang SC",Linux 用"Noto Sans CJK SC";但ctex默认已适配,无需显式指定 - 若要微调中文字体,改
ctex选项即可:\usepackage[fontset=ubuntu]{ctex}(Ubuntu)、[fontset=macos](macOS)
bibtex 和 biber 参考文献工具怎么配才不崩
IEEE、ACM、国标 GB/T 7714 等模板对参考文献引擎敏感。bibtex 只支持 ASCII,遇到中文作者名或 Unicode 期刊名就直接跪;biber 是现代替代,但 VS Code 插件默认 recipe 仍绑死 bibtex。
- 检查
.bib文件编码:必须是 UTF-8(无 BOM),用 VS Code 右下角确认,不是 ANSI 或 GBK - 在
settings.json中定义biber工具,并替换 recipe:
{
"name": "xelatex -> biber -> xelatex*2",
"tools": ["xelatex", "biber", "xelatex", "xelatex"]
}
biber 的 args 必须带 --input-format=bibtex,否则读不到 .bib 文件.bbl、.aux、.out 辅助文件——残留旧格式会误导 biber
PDF预览卡顿、跳转不同步的真实原因
不是电脑慢,是 SyncTeX 映射失效。VS Code 的正向搜索(Ctrl+Alt+J)和反向搜索(PDF 点击跳回源码)依赖 -synctex=1 参数与精确的文件路径匹配。
-
xelatex的args里必须包含"-synctex=1",漏掉这个,PDF 里点不动 - 路径含空格或中文时,
%DOC%变量可能被截断——改用%DOCFILE%更稳(它返回不含路径的文件名,配合 root file 机制更可靠) - PDF 查看器设为
"tab"时,VS Code 内置查看器对大文档(>50页)渲染慢;可临时切到"external"并指定 SumatraPDF(Windows)或 Skim(macOS) - 如果 PDF 打开是空白页,检查是否启用了“硬件加速”:VS Code 设置里关掉
hardwareAcceleration,尤其在远程开发或高 DPI 屏幕上
最常被忽略的一点:LaTeX Workshop 的 recipes 和 tools 是两套独立配置,改了 tools 里的 xelatex 命令,但 recipes 还在用旧的 pdflatex,结果就是你调了半天字体,编译出来的还是 pdfLaTeX 的效果。











