答案1
您需要安装 LaTeX workshop 包并对其进行配置,以便反向搜索正常工作。说明概述在LaTeX 研讨会维基。
你需要做什么
首先,你需要确保你有扩展LaTeX 工作坊 安装在 VSCode 中。
- 更改中的以下几行
Settings > Advanced Options...
,替换<YOUR_USERNAME>
和<OS_DRIVE>
以指向正确的 VSCode 可执行文件(并确保覆盖值,不要仅将其添加到末尾,否则设置将不会被使用):
InverseSearchCmdLine = "<OS_DRIVE>:\Users\<YOUR_USERNAME>\AppData\Local\Programs\Microsoft VS Code\Code.exe" -r -g "%f:%l"
EnableTeXEnhancements = true
- 完成此操作后,进入 VSCode 设置 JSON(
CTRL + SHIFT + P
> selectPreferences: Open User Settings (JSON)
),然后添加以下行:
"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.external.synctex.command": "<OS_DRIVE>:/Users/<YOUR_USERNAME>/AppData/Local/SumatraPDF/SumatraPDF.exe",
"latex-workshop.view.pdf.external.synctex.args": [
"-forward-search",
"%TEX%",
"%LINE%",
"-reuse-instance",
"-inverse-search",
"\"<OS_DRIVE>:\\Users\\<YOUR_USERNAME>\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -r -g \"%f:%l\"",
"%PDF%"
],
就是这样...
settings.json
如果您想在苏门答腊打开预览,您也可以将其添加到您的:
"latex-workshop.view.pdf.external.viewer.command": "<OS_DRIVE>:/Users/<YOUR_USERNAME>/AppData/Local/SumatraPDF/SumatraPDF.exe"
此设置对我而言适用于 Windows 上的 SumatraPDFv3.4.6 (64-bit)
和 VSCode 1.78.2
。
答案2
正向/反向搜索是 PDFTeX 的一种“PDFsync”机制(非常类似于 PDF 中的临时超链接)
ForwardSearch [
HighlightOffset = 0
HighlightWidth = 15
HighlightColor = #6581ff
HighlightPermanent = false
]
它只需要:-
- 一个 PDF 和一个同时编译的配套 PDFSync 或 SyncTeX 文件。
- PDF 阅读器可以理解这些关系,并标记出要将回复发送给哪个编辑器。
因此任何已知的编辑器都可以,并且可以在 Windows 中在 MS Notepad 中编写 LaTeX,因此双击一行即可触发“默认 MS Notepad”中的文件,如图所示。
然而
MS 记事本不知道哪一行需要外部“goto”命令,该对话框需要 VBS 代码才能运行,参见脚注因此 Notepad.exe 的引用只是文件级别的信心测试,SyncTeX 在查看器中完美运行,任何问题都归结为配置。
有许多数十个 LaTeX 编辑器因此只有少数会通过 SumatraPDF 应用程序检测进行自动配置,当EnableTeXEnhancements = true
,并且 VSCode.exe 带有 LaTeX 扩展器时,其方法已经改变了好几次!
从技术上讲,LaTeX-Workshop 不支持调用 SumatraPDF!请参阅https://github.com/James-Yu/LaTeX-Workshop/wiki/View#using-synctex-with-an-external-viewer
因此,大多数 LaTeX 编辑器(如 NotePad++ (notepad++.exe "%f" -n%l) 等)都可以在编译时发送其位置,这就是查看器只需要一次 -inverse-search 命令来重新配置该编辑器的原因。因此无需第一次调用后对于编辑器中的“-inverse-search”和以下 exe 行,如果整天重复发送,就会引起问题。同样-reuse-instance
应该像ReuseInstance = true
在设置中一样设置,不要重复发送。见https://github.com/sumatrapdfreader/sumatrapdf/issues/1197
反向搜索器可以由 TeX 编辑器发送一次,也可以通过任何外部命令(如批处理文件)或手动轻松发送给多个编辑器,然后存储在 PDF 查看器设置中直到再次更改。对于 VSCode.exe,您可以使用
-g or --goto When used with file:line{:character}, opens a file at a specific line and optional character position. This argument is provided since some operating systems permit : in a file name.
还
-r or --reuse-window Forces opening a file or folder in the last active window.
因此正常的逆向搜索命令通常是
"c:\path...\.\.\...to\code.exe" -r -g "%f:%l"
(即小写字母 L 表示线)
对于其他使用 electron 的人来说,可能需要按照 Wiki 中的 json 格式https://github.com/James-Yu/LaTeX-Workshop/wiki/View#sumatrapdf
"C:\Users\<Username>\AppData\Local\Programs\Microsoft VS Code\Code.exe" "C:\Users\<Username>\AppData\Local\Programs\Microsoft VS Code\resources\app\out\cli.js" --ms-enable-electron-run-as-node -r -g "%f:%l"
然而 SumatraPDF 并不运行 JS,因此可能会有所不同。
请注意(YMMV)
SumatraPDF 3.4.6(安装有 64 位)在读取某些 SyncTeX 压缩格式时会出现问题,因此请使用安装有 32 位或 64 位便携版,或者删除 PDFTeX 压缩 synctex.gz 标志。
大多数/所有 ? 这些问题应该在预发布版本 3.5.15388 及更高版本中得到修复
[脚注] 要了解 SyncTeX 在未启用 LaTeX 的情况下如何工作,可以在评论底部的 zip 文件中查看记事本 TeXtPaD 演示脚本 https://github.com/sumatrapdfreader/sumatrapdf/discussions/3489#discussioncomment-6018474