使用 Visual Studio Code 和 SumatraPDF 打开 LaTeX 源文件

使用 Visual Studio Code 和 SumatraPDF 打开 LaTeX 源文件

当您双击在 Windows 操作系统中使用 SumatraPDF 打开的 PDF 文件时,它将调用一个命令(参见下图中的蓝色矩形)。

在此处输入图片描述

如果 PDF 文件和其 LaTeX 源文件位于同一文件夹中,则双击 PDF 文件将使用记事本打开源文件。但是,我不知道该输入什么,以便notepad %f在 Visual Studio Code 中打开源文件。有什么想法吗?

答案1

您需要安装 LaTeX workshop 包并对其进行配置,以便反向搜索正常工作。说明概述在LaTeX 研讨会维基


你需要做什么

首先,你需要确保你有扩展LaTeX 工作坊 安装在 VSCode 中。

  1. 更改中的以下几行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
  1. 完成此操作后,进入 VSCode 设置 JSON(CTRL + SHIFT + P> select Preferences: 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 表示线)

使用短开关并省略 {:%c},因为通常不起作用 在此处输入图片描述

对于其他使用 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 在此处输入图片描述

相关内容