🧸 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:
- 打破文件占用
-
当然,这一点针对的并不是VS Code的内置PDF,而是使用外部PDF阅读器。外部PDF阅读器打开了PDF后,就会把这个文件**"锁死"**。LaTeX 编译器根本没有权限去覆盖和更新它,必须手动关掉阅读器,重新编译,再重新打开。
-
SumatraPDF 是极其罕见的**"不锁文件"的阅读器。它只把 PDF 读进内存,然后就松手了。当 LaTeX 在后台偷偷把 main.pdf 覆盖更新后,SumatraPDF 会敏锐地察觉到变化,并在零点几秒内自动无缝刷新**!你连闪烁都感觉不到,画面就已经更新了。
- 方便双屏协作
-
VS Code的内置PDF是没办法双屏的,对于我来说就很难受,我喜欢一个屏幕放代码,另一个屏幕放PDF,这样代码也显得整齐,好看一些,不坏眼睛。
-
如果用外置阅读器,其它阅读器就会遇到"文件占用"的问题。而SumatraPDF作为一个独立的轻量级原生程序,你可以把它直接甩到第二块屏幕上,或者在单屏幕上用 Alt + Tab 极其丝滑地切屏。代码视窗想拉多大就拉多大,这才是真正的生产力布局。
- 方便双向跳转
-
虽然 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进行配置。
-
快捷键
ctrl + ,(逗号)打开设置(Settings); -
点击设置界面右上角的
Edit as JSON,进入setting.json文件; -
你看的可能是
{ },花括号中可能是空的,也可能有代码。如果是空的,就直接把配置复制进去,如果有代码,记得将上面的最后一行代码后加上逗号,,然后再复制粘贴配置代码 (代码在后面)。
🔁 实现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 预览设置 ---------------- //