前言
由于要进行毕业设计,配置了一套VSCode环境以便于“优雅的”书写代码和论文
LaTeX常用于排版学术论文,它可以让我们专心于内容而不用费心于排版或字体。LaTeX有TeX Studio等类似于IDE一类的编辑器,但是总感觉这类工具功能的确完善,但总有些别扭(好丑,界面回到上世纪),加上一些其他因素,我就把注意打到了VSCode上,期望打造一个一体化的开发写作环境。
内容
环境->基础配置->正反向搜索(使用外置PDF查看器)
环境及版本
注意:未来的版本更新可能导致本文章失效
-
操作系统:Windows 10
-
Visual Studio Code 1.14.1
-
Tex Live 2019(清华镜像)
建议下载离线DVD,在线版本对国内网络环境不友好,教育网用户可以考虑使用清华开源镜像站或其他高校提供的镜像。安装后在命令行内执行tex -v检查是否写入了所需的环境变量(安装目录/bin/win32/),不然需要自己写入Path中(基本上安装程序都会完成这一步)
- LaTeX Workshop 8.6.0 (VSCode扩展)
- SumatraPDF
一个简易的开源PDF阅读器,用于反向搜索,如要使用标记功能请下载pre-release版本
配置
首先在VSCode中安装LaTeX Workshop
之后进入首选项进行配置,找到扩展LaTeX中的
首先配置工具和编译链
将下方内容填充进
如果实在不知道应当放在那里可以查一下settings.json的格式,本文最后会放上一个完整的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | "latex-workshop.latex.tools": [ {// 编译工具和命令 "name": "pdflatex", "command": "pdflatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOCFILE%" ] }, { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "%DOCFILE%" ] }, { "name": "bibtex", "command": "bibtex", "args": [ "%DOCFILE%" ] } ], "latex-workshop.latex.recipes": [ {//编译链 "name": "xelatex", "tools": [ "xelatex" ] }, { "name": "pdflatex", "tools": [ "pdflatex" ] }, { "name": "xe->bib->xe->xe", "tools": [ "xelatex", "bibtex", "xelatex", "xelatex" ] } ] |
这里只是简单配置了几种编译链,具体写文章时应按需要到这里配置新的编译链。
此时可以新建tex文件,尝试一下编译生成pdf了,保存文件时会自动编译,点击右上方的预览按钮查看pdf,默认使用内置窗口。
1 2 3 4 5 | %test.tex \documentclass[UTF8]{ctexart} \begin{document} 你好,world! \end{document} |
根据我上方的配置文件,默认采用
或者在命令面板
至此,一个简易的LaTeX写作环境已经搭建完成,还需要根据需要再自定义编译工具和工具链。
通过SumatraPDF实现正反向搜索
最开始并不打算使用外置PDF阅读器,但内置PDF只能实现正向搜索,而Adobe Acrobat又不支持SyncTex,只能采用开源的SumatraPDF。
由于VSCode的子进程机制导致现在使用反向搜索有点奇怪,要么必须从VSCode右上角的预览按钮启动阅读器,要么必须自己启动PDF。下面会将两种配置写在一起供自己选择,配置里带cli.js的语句是只能在VSCode内启动预览,不带cli的必须在外面启动PDF阅读器,注释掉其中一句就行。这个问题具体可见Github上的issue:Synctex inverse search doesn't work half the time
打开VSCode的
注意下面所有的路径要修改为自己设备上的安装目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | "latex-workshop.view.pdf.viewer": "external", "latex-workshop.view.pdf.external.viewer.command": "D:/SumatraPDF/SumatraPDF.exe", // 注意修改路径 "latex-workshop.view.pdf.external.viewer.args": [ "%PDF%" ], "latex-workshop.view.pdf.external.synctex.command": "D:/SumatraPDF/SumatraPDF.exe", // 注意修改路径 "latex-workshop.view.pdf.external.synctex.args": [ "-forward-search", "%TEX%", "%LINE%", "-reuse-instance", "-inverse-search", //""D:\\Microsoft VS Code\\Code.exe" -r -g "%f:%l"", //无cli版本,需外界启动 ""D:\\Microsoft VS Code\\Code.exe" "D:\\Microsoft VS Code\\resources\\app\\out\\cli.js" -r -g "%f:%l"", //有cli,必须内部启动 "%PDF%" ] |
之后在SumatraPDF的设置中,设定反向搜索命令行,要和刚才的cli选择一致,注意更换安装目录
有cli.js:
1 | "D:\Microsoft VS Code\Code.exe" "D:\Microsoft VS Code\resources\app\out\cli.js" -r -g "%f:%l" |
无cli.js:
1 | "D:\Microsoft VS Code\Code.exe" -r -g "%f:%l" |
配置完之后最好将两个软件全关掉,使用“正常妥协的方法”:
- 命令行有cli的在VSCode内启动预览
- 没有cli的自行打开SumatraPDF
之后就能享受到正反向搜索了,正向在VSCode内的快捷键为
如果之后反向搜索功能间歇性抽搐的话还是要重启一下应用看看是不是没有用“正确的方法”。
总结
VSCode的扩展性的确很强,尽管在反向搜索上有点问题,但不影响它的主要功能,不需要反向搜索用内置的分屏浏览也完全足够。
在Windows上如果想要有更好的体验可以将编辑器的中文字体更换一下,这里推荐一个更纱黑体,其他操作系统也可以参考一下,毕竟VSCode是全平台的编辑器,只不过反向搜索的SumatraPDF只有Windows版,其他操作系统需要寻找替代品。
这里再放一个完整的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | "latex-workshop.view.pdf.viewer": "external", "latex-workshop.view.pdf.external.viewer.command": "D:/SumatraPDF/SumatraPDF.exe", // 注意修改路径 "latex-workshop.view.pdf.external.viewer.args": [ "%PDF%" ], "latex-workshop.view.pdf.external.synctex.command": "D:/SumatraPDF/SumatraPDF.exe", // 注意修改路径 "latex-workshop.view.pdf.external.synctex.args": [ "-forward-search", "%TEX%", "%LINE%", "-reuse-instance", "-inverse-search", //""D:\\Microsoft VS Code\\Code.exe" -r -g "%f:%l"", //无cli版本,需外界启动 ""D:\\Microsoft VS Code\\Code.exe" "D:\\Microsoft VS Code\\resources\\app\\out\\cli.js" -r -g "%f:%l"", //有cli,必须内部启动 "%PDF%" ], "latex-workshop.latex.tools": [ {// 编译工具和命令 "name": "pdflatex", "command": "pdflatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOCFILE%" ] }, { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "%DOCFILE%" ] }, { "name": "bibtex", "command": "bibtex", "args": [ "%DOCFILE%" ] } ], "latex-workshop.latex.recipes": [ {//编译链 "name": "xelatex", "tools": [ "xelatex" ] }, { "name": "pdflatex", "tools": [ "pdflatex" ] }, { "name": "xe->bib->xe->xe", "tools": [ "xelatex", "bibtex", "xelatex", "xelatex" ] } ] |