配置LaTex的过程中反向搜索是配的最长时间的了,其他的直接照抄网上配置就行,反向搜索总是出点bug,所以现在记录一下最终的配置以及中间的过程。

错误表现

错误表现是双击pdf某地方之后vscode弹出了cli.js文件,但是应该是光标出现在对应的tex文件的那个地方

曲折经历

在配置的过程中,一开始我按照参考博客中的说法配置了SumatraPDF的高级选项,但是发现保存完了之后高级选项是这样的:

# Settings after this line have not been recognized by the current version
InverseSearchCmdLine = "D:\Code\VS code\Microsoft VS Code\Code.exe" "D:\Code\VS code\Microsoft VS Code\resources\app\out\cli.js"  --ms-enable-electron-run-as-node -r -g "%f:%l"

也就是说我写的这个配置没有被识别到,可能是版本没有兼容(这时SumatraPDF的最高版本了)
所以后来我把这句话放到了vscode里面,之后就可以正确运行了。

最终配置

vscode配置

vscode里面的关于SumatraPDF的配置如下所示

//使用 SumatraPDF 预览编译好的PDF文件
    // 设置VScode内部查看生成的pdf文件
    "latex-workshop.view.pdf.viewer": "external",
    // PDF查看器用于在\ref上的[View on PDF]链接
    "latex-workshop.view.pdf.ref.viewer":"auto",
    // 使用外部查看器时要执行的命令。此功能不受官方支持。
    "latex-workshop.view.pdf.external.viewer.command": "D:/SumatraPDF/SumatraPDF.exe", // 注意修改路径
    // 使用外部查看器时,latex-workshop.view.pdf.external.view .command的参数。此功能不受官方支持。%PDF%是用于生成PDF文件的绝对路径的占位符。
    "latex-workshop.view.pdf.external.viewer.args": [
        "%PDF%"
    ],
    // 将synctex转发到外部查看器时要执行的命令。此功能不受官方支持。
    "latex-workshop.view.pdf.external.synctex.command": "D:/SumatraPDF/SumatraPDF.exe", // 注意修改路径
    // latex-workshop.view.pdf.external.synctex的参数。当同步到外部查看器时。%LINE%是行号,%PDF%是生成PDF文件的绝对路径的占位符,%TEX%是触发syncTeX的扩展名为.tex的LaTeX文件路径。
    "latex-workshop.view.pdf.external.synctex.args": [
        "-forward-search",
        "%TEX%",
        "%LINE%",
        "-reuse-instance",
        "-inverse-search",
        "\"D:/Microsoft VS Code/Code.exe\"  \"D:/Microsoft VS Code/resources/app/out/cli.js\" --ms-enable-electron-run-as-node -gr \"%f\":\"%l\"", // 注意修改路径
        "%PDF%"
    ],

其中比较重要的应该是倒数第三行(有文件目录的那行),那行中的–ms-enable-electron-run-as-node应该比较关键的。
因为据知乎某评论所说,真正的原因是vscode设置了环境变量ELECTRON_RUN_AS_NODE,由vscode启动的sumatrapdf进程也继承了这个变量,如果是外部启动的sumatra反向搜索就会打开cli.js文件而不是执行它。
虽说不是很懂具体原因,但是这样做可以做对。

参考教程

VScode+Latex+SumatraPDF反向搜索失败解决办法(Version 1.63)(评论中有原理)