正向搜索(源码→PDF)和反向搜索(PDF→源码)需满足:编译器带 -synctex=1 参数生成 .synctex.gz 文件;VSCode 的 LaTeX Workshop 配置正确;SumatraPDF 的 InverseSearchCmdLine 指向 code.cmd -r -g "%f:%l" 并重启生效;禁用内建与外部查看器混用;路径无空格/中文;且正向搜索前须成功编译一次。

正向搜索(源码→PDF)和反向搜索(PDF→源码)能用,前提是编译器必须生成 SyncTeX 信息,且 VSCode 和 SumatraPDF 的路径、参数、触发方式全部对齐——漏掉任一环,点击就失效。
确保 xelatex 或 pdflatex 带 -synctex=1 参数
这是整个双向搜索的底层前提。没有它,SumatraPDF 根本读不到位置映射关系,反向点击必然跳错或无响应。
-
latex-workshop.latex.tools中每个编译工具(如xelatex)的args数组里必须显式包含"-synctex=1" - 别依赖默认行为——某些旧版
LaTeX Workshop不自动加,必须手动写死 - 如果用
latexmk作为主工具,也要确认其调用的底层引擎传了该参数,例如在.latexmkrc中加:$synctex = 1; - Windows 上若提示
spawn xelatex ENOENT,大概率是PATH没配好,不是参数问题
SumatraPDF 的 InverseSearchCmdLine 必须指向真实可执行文件
反向搜索失败最常见原因:VSCode 能打开文件,但光标不跳行,或者弹出“无法启动编辑器”错误。根本原因是 SumatraPDF 配置里写的路径根本打不开 VSCode。
- Windows 下推荐用
code.cmd(而非Code.exe),路径类似:"D:/IDE/Microsoft VS Code/bin/code.cmd" - 必须带
-r -g "%f:%l":其中-r复用窗口,-g表示跳转到指定文件与行号 - 这个配置不在 VSCode 里设,而是在
SumatraPDF自身的settings.txt文件中修改(菜单 → Settings → Options → Advanced options) - 改完保存后要重启
SumatraPDF,否则不生效
VSCode 的 latex-workshop.view.pdf.external.* 配置不能混用内建与外部查看器
一旦启用了外部 PDF 查看器("latex-workshop.view.pdf.viewer": "external"),所有 SyncTeX 相关行为都必须走外部路径。混用会导致正向搜索失效或打开两个 PDF 窗口。
-
latex-workshop.view.pdf.external.synctex.command和.args必须完整填入SumatraPDF.exe路径和-forward-search参数 - 不要同时设置
latex-workshop.view.pdf.internal.synctex.keybinding—— 内建 PDF 查看器的双击跳转和外部查看器的 Ctrl+Click 是两套逻辑,冲突 -
%TEX%和%LINE%是 LaTeX Workshop 提供的变量,只在.args中有效;手写绝对路径时不能用它们 - 路径中含空格或中文?立刻改掉。比如
"C:/Program Files/..."必须用引号包裹,但更稳妥的是移到D:/Tools/SumatraPDF/这类干净路径
正向搜索快捷键与实际触发条件经常被忽略
很多人按了 Alt+S 没反应,不是快捷键没绑,而是当前光标不在可编译的主文件里,或没保存更改。
- 正向搜索只对当前活动的
.tex文件生效,且该文件需是编译链中的主文档(即含\documentclass) - 必须先成功编译一次(生成
.synctex.gz),之后再按快捷键才有位置可跳 - 默认快捷键是
Alt+S,但可在 VSCode 键盘快捷键设置中搜latex-workshop.synctex.fromcursor手动绑定 - 如果用了
outputDir: "./build",确保SumatraPDF打开的是./build/main.pdf,而不是根目录下旧的 PDF
最容易被绕过去的一点:SumatraPDF 的反向搜索只响应 Ctrl+Click,不是单击、双击或右键;而 VSCode 的正向搜索只响应光标在代码行内时的快捷键,不在行首/行尾空白处也无效。这些细节不验证,配置写得再全也没用。


















