VS Code + LaTex + SumatraPDF联合使用指南

🧸 VS Code 与 TexLive + SumatraPDF 下载安装

我们就以TexLive为排版系统,用VS Code做编辑器,我本来也是有安装TexStudio的,但因为一直用的VS Code,比较习惯,并且VS Code的界面个人感觉要比TexStudio要好看一些,最重要的是VS Code可以用Copilot,对于我来说就很方便。只是需要在VS Code上配置一下Latex环境就好。

💻 VS Code下载安装没有任何限制,安装即用。

📚 TexLive的下载安装可参考我的另一篇博客

TexLive和TeXstudio的下载与安装。其中涉及正常安装和非正常安装两种场景。

⬇️ SumatraPDF的下载

下载地址: Download SumatraPDF

点进下载网址之后,每个系统都有两个选项:

复制代码
SumatraPDF-3.6-64-install.exe
SumatraPDF-3.6-64.zip

我先下载了 .zip版 的:这个是轻量版本,解压即用,不会影响到电脑的环境变量。但我用这个版本时,每次打开都很慢,还会弹出一个提示,我觉得很烦,就由下载了 -install.exe,完成安装。

🖥️ SumatraPDF的使用

VS Code有内置PDF阅读器插件,可以安装插件使用,但有这样几个原因导致我换上了SumatraPDF:

  1. 打破文件占用
  • 当然,这一点针对的并不是VS Code的内置PDF,而是使用外部PDF阅读器。外部PDF阅读器打开了PDF后,就会把这个文件**"锁死"**。LaTeX 编译器根本没有权限去覆盖和更新它,必须手动关掉阅读器,重新编译,再重新打开。

  • SumatraPDF 是极其罕见的**"不锁文件"的阅读器。它只把 PDF 读进内存,然后就松手了。当 LaTeX 在后台偷偷把 main.pdf 覆盖更新后,SumatraPDF 会敏锐地察觉到变化,并在零点几秒内自动无缝刷新**!你连闪烁都感觉不到,画面就已经更新了。

  1. 方便双屏协作
  • VS Code的内置PDF是没办法双屏的,对于我来说就很难受,我喜欢一个屏幕放代码,另一个屏幕放PDF,这样代码也显得整齐,好看一些,不坏眼睛。

  • 如果用外置阅读器,其它阅读器就会遇到"文件占用"的问题。而SumatraPDF作为一个独立的轻量级原生程序,你可以把它直接甩到第二块屏幕上,或者在单屏幕上用 Alt + Tab 极其丝滑地切屏。代码视窗想拉多大就拉多大,这才是真正的生产力布局。

  1. 方便双向跳转
  • 虽然 VS Code 的内置阅读器也能跳转,但由于它是基于浏览器内核的,渲染极其复杂的超大几百兆 PDF 时,不仅容易卡顿掉帧,跳转定位也经常漂移。而 SumatraPDF 是用底层 C++ 写的纯粹阅读器,极度轻量(只有几 MB),几千页的博士论文秒开,双击跳转的精准度更是指哪打哪。

  • 在 SumatraPDF 里看到哪里有错别字,直接双击鼠标左键,VS Code 会像被施了魔法一样,光标瞬间跳到那一行源代码!

🔑 VS Code的Latex环境配置

环境配置我参考了这个博主的博客:Visual Studio Code (vscode)配置LaTeX

更多的避坑参考我的另一篇博客:VS Code + LaTeX 终极避坑与配置指南

🧩 安装LaTeX Workshop插件

在VS Code的插件市场里搜索LaTeX Workshop,安装即可。安装后会自动识别系统中安装的TeX发行版(如TeX Live),并且会自动配置好编译器路径。此时放入一个工程,看看能不能编译成功。

👀 打开PDF预览界面

在编译成功后,按下Ctrl + Alt + V快捷键,查看是否正常出现PDF预览界面。如果此时不正常,就要查看一下自己的设置了。

我遇到的一个坑 :我在电脑A上建立了一个Latex工程,其中包含一个文件夹.vscode,下面有setting.json文件,里面是电脑A中关于VS Code的设置。我将这个Latex工程移到电脑B后,并未更改电脑B中关于VS Code的设置,即setting.json文件。也就是说,我在电脑B上的Latex工程中有来两个setting.json文件,但其优先以工程中的配置文件运行,这样就导致打开PDF预览冲突。出现了编译成功,但没有PDF显示的现象。

此时有两个解决方法 :一是直接删除工程中的setting.json文件或其中关于Latex-workshop的设置;二是将其中关于PDF的路径设置正常。

🪟 实现SumatraPDF预览

此时需要在自己的setting.json进行配置。

  1. 快捷键ctrl + ,(逗号)打开设置(Settings);

  2. 点击设置界面右上角的Edit as JSON,进入setting.json文件;

  3. 你看的可能是{ },花括号中可能是空的,也可能有代码。如果是空的,就直接把配置复制进去,如果有代码,记得将上面的最后一行代码后加上逗号,,然后再复制粘贴配置代码 (代码在后面)

🔁 实现SumatraPDF的双向跳转

在代码配置完成后,实现 正向跳转 (Latex代码到PDF对应段落)是比较简单的,比较难实现的是 方向跳转。而反向跳转又比较重要,方便在预览PDF中发现错误后直接跳转到对应代码进行修改。

建议可以先按照文末的JSON设置进行,务必修改里面相应的路径 ,还一定要修改正确,并且里面的路径是 "/"

如果此时 反向跳转不成功 ,将其中latex-workshop.view.pdf.external.synctex.args中的下面两行注释掉:

json 复制代码
"-inverse-search",
"\"D:/VSCode/Microsoft VS Code/Code.exe\" \"D:/VSCode/Microsoft VS Code/resources/app/out/cli.js\" -r -g \"%f:%l\"", // 注意修改路径

最后在 SumatraPDF 中点击左上角的三条粗横线 图标,然后点击设置 ->选项,在弹出的选项框中,最下面填入:

cmd 复制代码
"D:\VSCode\Microsoft VS Code\bin\code.cmd" -r -g "%f:%l"

D:\VSCode\Microsoft VS Code记得修改为自己对应的路径


🛠️ VS Code 关于Latex + SumatraPDF 的完整配置

json 复制代码
    // ----------------------- Latex Workshop ----------------------- //
    // 设置是否自动编译,选项包括 "onSave"(保存时自动编译)、"onFileChange"(文件更改时自动编译)和 "never"(从不自动编译)
    "latex-workshop.latex.autoBuild.run": "onSave",
    "latex-workshop.showContextMenu": true,
    "latex-workshop.intellisense.package.enabled": true,
    "latex-workshop.message.error.show": false,
    "latex-workshop.message.warning.show": false,
    
    // 核心输出目录设置
    "latex-workshop.latex.outDir": "%DIR%/build",
    "latex-workshop.latex.autoClean.run": "onFailed",
    "latex-workshop.latex.recipe.default": "lastUsed",
    "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",
    "editor.unicodeHighlight.ambiguousCharacters": false,
    
    // 要清理的垃圾文件类型
    "latex-workshop.latex.clean.fileTypes": [
        "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot",
        "*.out", "*.toc", "*.acn", "*.acr", "*.alg", "*.glg", "*.glo",
        "*.gls", "*.ist", "*.fls", "*.log", "*.fdb_latexmk"
    ],
    
    // 编译器工具配置(必须每个都加上 output-directory 参数)
    "latex-workshop.latex.tools": [
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-output-directory=%OUTDIR%",
                "%DOC%"
            ]
        },
        {
            "name": "pdflatex",
            "command": "pdflatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-output-directory=%OUTDIR%",
                "%DOC%"
            ]
        },
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-xelatex",
                "-outdir=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%OUTDIR%/%DOCFILE%"
            ]
        }
    ],

    // 专门让 LaTeX 文件自动换行
    "[latex]": {
        "editor.wordWrap": "on"
    },
    
    // 编译配方组合
    "latex-workshop.latex.recipes": [
        {
            "name": "XeLaTeX",
            "tools": ["xelatex"]
        },
        {
            "name": "xelatex -> bibtex -> xelatex*2",
            "tools": ["xelatex", "bibtex", "xelatex", "xelatex"]
        },
        {
            "name": "PDFLaTeX",
            "tools": ["pdflatex"]
        },
        {
            "name": "pdflatex -> bibtex -> pdflatex*2",
            "tools": ["pdflatex", "bibtex", "pdflatex", "pdflatex"]
        },
        {
            "name": "LaTeXmk",
            "tools": ["latexmk"]
        }
    ],
    // ----------------------- End of Latex Workshop ----------------------- //

    // ------------------ 使用 SumatraPDF 预览编译好的PDF文件 ---------------- //
    // 设置VScode内部查看生成的pdf文件 
    // "tab":使用vscode内置pdf查看器;"browser":使用系统默认浏览器;"external":使用外部pdf查看器;"none":不打开pdf文件
    "latex-workshop.view.pdf.viewer": "external",
    // 设置编译后是否跳转到pdf的对应位置
    "latex-workshop.synctex.afterBuild.enabled": true,
    // 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": [
        "-forward-search",
        "%TEX%",
        "%LINE%",
        "-reuse-instance",
        "%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:/VSCode/Microsoft VS Code/Code.exe\" \"D:/VSCode/Microsoft VS Code/resources/app/out/cli.js\" -r -g \"%f:%l\"", // 注意修改路径
        "%PDF%"
    ]
    // ------------------ End of SumatraPDF 预览设置 ---------------- //
相关推荐
弦有三种苦难2 小时前
CCF-202412-T3缓存模拟90分
java·开发语言·spring
青槿吖2 小时前
SpringMVC通关秘籍(下):日期转换器、拦截器与文件上传的奇幻冒险
java·开发语言·数据库·sql·mybatis·状态模式
weixin_456321642 小时前
Java架构设计:Redis AOF持久化深度解析(原理+实战+避坑)
java·开发语言·redis
leaves falling2 小时前
数据结构-堆学习
java·数据结构·学习
Java水解2 小时前
Java 中实现多租户架构:数据隔离策略与实践指南
java·后端
不秃不少年2 小时前
Java 设计模式
java
魑魅魍魉都是鬼3 小时前
Java 适配器模式(Adapter Pattern)
java·开发语言·适配器模式
sinat_255487813 小时前
教授提供的有用链接 — 20·学习笔记
java
Java面试题总结3 小时前
2026Java面试八股文合集(持续更新)
java·spring·面试·职场和发展·java面试·java八股文