配置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文件而不是执行它。
虽说不是很懂具体原因,但是这样做可以做对。