真正能闭环编译、实时预览、跳转定位、错误提示四件套齐备的仅LaTeX Workshop与LaTeX Utilities;前者是核心IDE级插件,后者专注写作辅助,其余如LaTeX Snippets和LaTeX Language Support可删。

VS Code 里想用 LaTeX 写论文,别装一堆插件堆砌功能——真正能闭环编译、实时预览、跳转定位、错误提示四件套齐备的,其实就 2 个够用;剩下 2 个要么维护停滞,要么只管渲染不管编译,容易卡在 latexmk 找不到或 PDF viewer 不联动上。
LaTeX Workshop 是唯一值得默认启用的核心插件
它不是“支持 LaTeX”,而是把 VS Code 变成轻量级 TeX Live IDE:自动探测 latexmk、xelatex 路径,绑定快捷键触发编译,点击 PDF 内容反向跳回源码(SyncTeX),出错时高亮 .log 里的第一处 ! LaTeX Error 并定位到行。
实操建议:
- 安装后必须检查设置里
latex-workshop.latex.recipes是否包含你常用的编译链(比如latexmk+-xelatex);默认 recipe 可能只配了pdflatex,而中文文档基本要xelatex - 若编译报
Command failed: latexmk -xelatex ... ENOENT,说明插件没找到latexmk—— 不是重装插件,而是去系统 PATH 加 TeX Live 的bin目录(macOS/Linux 检查which latexmk,Windows 看是否在C:\texlive\2023\bin\win32) - 预览 PDF 默认用内置浏览器,但缩放/翻页卡顿?改用
latex-workshop.view.pdf.viewer设为external,并指定已安装的SumatraPDF(Windows)或Skim(macOS)路径
LaTeX Utilities 插件只在特定场景有用
它不处理编译和预览,专注解决「写的时候」的麻烦:自动生成 \label{}、插入带编号的公式/图表环境、从 .bib 文件补全参考文献、一键清理辅助文件(.aux、.out)。
但注意:
- 和 LaTeX Workshop 共存时,禁用它的编译相关功能(关掉
latex-utilities.build.onSave),否则两个插件同时调latexmk会冲突,出现Another instance of latexmk is already running - 它的 BibTeX 补全依赖
biber或bibtex命令可用,如果ctrl+space没反应,先终端跑biber --version确认命令存在 - 生成 label 名称时默认用文件名+序号(如
sec:intro-1),想改成语义化名称(如sec:methodology)得手动改latex-utilities.label.generator配置项
LaTeX Snippets 和 LaTeX Language Support 属于“可删”类
前者提供 env、fig 等代码片段,后者只是给 .tex 文件加基础语法高亮和括号匹配——VS Code 自带的 Plain Text 模式 + LaTeX Workshop 已覆盖这两块。
容易踩的坑:
- LaTeX Snippets 插件的
eq片段展开后是equation环境,但现代写法多用align*;它不支持按需切换带星号/不带星号,反而增加删改成本 - LaTeX Language Support 会干扰 LaTeX Workshop 的错误解析逻辑,比如把
\ref{xxx}中未定义的xxx标成红色波浪线,但实际编译后可能正常(因为跨文件引用需要多遍编译)——这种误报会掩盖真错误
编译失败时,优先看 LaTeX Workshop 输出面板而非弹窗
VS Code 弹窗只显示“编译失败”,但真正的线索藏在 Output 面板 → 下拉选 LaTeX Workshop。这里能看到完整 latexmk 命令、工作目录、以及最顶上那行 === TeX engine is 'xelatex' 是否符合预期。
常见卡点:
- 看到
! Undefined control sequence. \documentclass?不是缺宏包,是文件编码不是 UTF-8 无 BOM,尤其 Windows 上用记事本保存过.tex文件 - 预览 PDF 一直不刷新?检查
latex-workshop.view.pdf.internal.synctex是否为true,且 PDF 查看器是否支持 SyncTeX(Adobe Reader 不支持,SumatraPDF / Skim 支持) - 中文乱码或字体报错?确认导言区用了
\usepackage{ctex}或\usepackage{xeCJK},而不是只写\usepackage{fontspec}—— 后者不处理中文断行和标点挤压
插件再多,救不了路径没配对、引擎选错、编码存错这三件事。编译链一断,所有“神仙功能”都变摆设。
















