目录
1. 前述
本人有基于vscode
的长期使用经验,日常使用开发代码是python
,最近出于博士论文写作需要想接触一下LATEX
编辑器,明显感觉前人用LATEX
编写的大论文要更加清晰,包括公式格式也要更加美观。因此本文写作的初衷只是想单纯记录一下个人安装、配置和使用LATEX
的主要过程。
主要配置环境条件:win10
我在安装的过程中,很多的内容参考了isual Studio Code (vscode)配置LaTeX,所以有些图片偷懒也直接截取的该文中,所以如有侵犯,请联系删除。
2. 软件安装
首先在官网下载TeX Live
,网址如下:TeX Live官网
点击下述图表中绿色链接。
再点击下述链接开始下载安装包,可以看到我进入的是北京大学的镜像网站:
下载完成以后,以管理员身份运行iso
文件,并运行下图所示批处理文件:
接着会出现下述图片,无需理会,等一会会自动消失。
做一些基本更改,首先是按照需求修改安装路径;其次是据大家反映TeX Live
自带的TeXworks
不怎么好用,因此我们主要是尝试将vscode
作为其编辑器,故取消了安装TeXworks
前端的选项,再点击安装。
当然如果想更个性化的一些选项,也可以点击Advanced
选择进一步的个性化配置。最后点击安装,就会出现下面的界面,时间可能会比较久…
最后检查是否正常安装,按win+R
打开运行,输入cmd
,打开命令行窗口,然后输出命令xelatex -v
,如下图所示:
如果要使用vscode
作为编辑器,那么首先需要安装vscode
,由于我已经安装了,所以此处不再赘述。
3. vscode中LaTeX的支持插件LaTeX Workshop安装与设置
在扩展应用中安装latex workshop
,如下所示:
打开LaTeX
环境设置界面进行设置:
在下图中打开json
文件,进入代码设置页面。
然后我参考了其他人的配置代码:
注意下述配置代码的设置中不包含外部PDF
查看器的设置。
{
"latex-workshop.latex.autoBuild.run": "never",
"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.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "XeLaTeX",
"tools": [
"xelatex"
]
},
{
"name": "PDFLaTeX",
"tools": [
"pdflatex"
]
},
{
"name": "BibTeX",
"tools": [
"bibtex"
]
},
{
"name": "LaTeXmk",
"tools": [
"latexmk"
]
},
{
"name": "xelatex -> bibtex -> xelatex*2",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "pdflatex -> bibtex -> pdflatex*2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
},
],
"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"
],
"latex-workshop.latex.autoClean.run": "onFailed",
"latex-workshop.latex.recipe.default": "lastUsed",
"latex-workshop.view.pdf.internal.synctex.keybinding": "double-click"
}
注意:UI 设置页面和JSON设置页面均为设置页面,其功能是一样的。不同的是,UI 设置页面交互能力较强,但一些设置需要去寻找,比较麻烦;而JSON设置页面虽然相对 UI 而言不那么直观,但却可以对自己想要的功能直接进行代码编写,且代码设置可以直接克隆别人的代码到自己的编辑器中,从而直接完成相应设置,比较便捷。
4. LaTeX配置代码解读
"latex-workshop.latex.autoBuild.run": "never"
设置何时使用默认的(第一个)编译链自动构建 LaTeX 项目,即什么时候自动进行代码的编译。有三个选项:
1. onFileChange:在检测任何依赖项中的文件更改(甚至被其他应用程序修改)时构建项目,即当检测到代码被更改时就自动编译tex文件;
2. onSave : 当代码被保存时自动编译文件;
3. never: 从不自动编译,即需编写者手动编译文档
"latex-workshop.showContextMenu": true
启用上下文LaTeX菜单。此菜单默认状态下停用,即变量设置为false,因为它可以通过新的 LaTeX 标记使用(新的 LaTeX 标记能够编译文档,将在下文提及)。只需将此变量设置为true即可恢复菜单。即此命令设置是否将编译文档的选项出现在鼠标右键的菜单中。
下两图展示两者区别,第一幅图为设置false情况,第二幅图为设置true情况。可以看到的是,设置为true时,菜单中多了两个选项,其中多出来的第一个选项为进行tex文件的编译,而第二个选项为进行正向同步,即从代码定位到编译出来的 pdf 文件相应位置,下文会进行提及。
"latex-workshop.intellisense.package.enabled": true
设置为true,则该拓展能够从使用的宏包中自动提取命令和环境,从而补全正在编写的代码。
"latex-workshop.message.error.show" : false,
"latex-workshop.message.warning.show": false
这两个命令是设置当文档编译错误时是否弹出显示出错和警告的弹窗。因为这些错误和警告信息能够从终端中获取,且弹窗弹出比较烦人,故而笔者设置均设置为false。
"latex-workshop.latex.tools": [...]
这些代码是定义在下文 recipes 编译链中被使用的编译命令,此处为默认配置,不需要进行更改。其中的name为这些命令的标签,用作下文 recipes 的引用;而command为在该拓展中的编译方式。可以更改的代码为,将编译方式: pdflatex 、 xelatex 和 latexmk 中的%DOCFILE更改为%DOC。%DOCFILE表明编译器访问没有扩展名的根文件名,而%DOC表明编译器访问的是没有扩展名的根文件完整路径。这就意味着,使用%DOCFILE可以将文件所在路径设置为中文,但笔者不建议这么做,因为毕竟涉及到代码,当其余编译器引用时该 tex 文件仍需要根文件完整路径,且需要为英文路径。笔者此处设置为%DOCFILE仅是因为之前使用 TeXstudio,导致路径已经是中文了。
"latex-workshop.latex.recipes": [...]
此串代码是对编译链进行定义,其中name是标签,也就是出现在工具栏中的链名称;tool是name标签所对应的编译顺序,其内部编译命令来自上文latex-workshop.latex.recipes中内容。
定义完成后,能够在 vscode 编译器中能够看到的编译顺序,具体看下图:
可以看到的是,在编译链中定义的命令出现在了vscode右侧的工具栏中。
注意 :PDFLaTeX 编译模式与 XeLaTeX 区别如下:
- PDFLaTeX 使用的是TeX的标准字体,所以生成PDF时,会将所有的非 TeX 标准字体进行替换,其生成的 PDF 文件默认嵌入所有字体;而使用 XeLaTeX 编译,如果说论文中有很多图片或者其他元素没有嵌入字体的话,生成的 PDF 文件也会有些字体没有嵌入。
- XeLaTeX 对应的 XeTeX 对字体的支持更好,允许用户使用操作系统字体来代替 TeX 的标准字体,而且对非拉丁字体的支持更好。
- PDFLaTeX 进行编译的速度比 XeLaTeX 速度快。
"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"
]
这串命令则是设置编译完成后要清除掉的辅助文件类型,若无特殊需求,无需进行更改。
"latex-workshop.latex.autoClean.run": "onFailed"
这条命令是设置什么时候对上文设置的辅助文件进行清除。其变量有:
- onBuilt : 无论是否编译成功,都选择清除辅助文件;
- onFailed : 当编译失败时,清除辅助文件;
- never : 无论何时,都不清除辅助文件。
由于 tex 文档编译有时需要用到辅助文件,比如编译目录和编译参考文献时,如果使用onBuilt命令,则会导致编译不出完整结果甚至编译失败;
而有时候将 tex 文件修改后进行编译时,可能会导致 pdf 文件没有正常更新的情况,这个时候可能就是由于辅助文件没有进行及时更新的缘故,需要清除辅助文件了,而never命令做不到这一点;
故而笔者使用了onFailed,同时解决了上述两个问题。
"latex-workshop.latex.recipe.default": "lastUsed"
该命令的作用为设置 vscode 编译 tex 文档时的默认编译链。有两个变量: 1. first : 使用latex-workshop.latex.recipes中的第一条编译链,故而您可以根据自己的需要更改编译链顺序; 2. lastUsed : 使用最近一次编译所用的编译链。笔者选择使用lastUsed。
"latex-workshop.view.pdf.internal.synctex.keybinding": "double-click"
用于反向同步(即从编译出的 pdf 文件指定位置跳转到 tex 文件中相应代码所在位置)的内部查看器的快捷键绑定。变量有两种:
- ctrl-click : 为默认选项,使用Ctrl/cmd+鼠标左键单击
- double-click : 使用鼠标左键双击
此处笔者使用的为double-click。
5. tex文件编译
我参考的链接中,作者还专门为此做了一个测试文档,以此测试其是否支持中英文,能否编译目录,能否插入图片,能否进行引用,能否编译参考文献(编译bixtex
文件)等功能。链接如下:Ali-loner/Ali-loner.github.io
5.1 tex测试文件编译
打开测试文件所在文件夹
打开 .text
文件,查看文件内容
开始编译文件。 由于进行测试的文件中涉及参考文献的引用(.bib
的编译),故而选择xelatex -> bibtex -> xelatex*2
编译链。
为了更方便编译,可以设置快捷键,设置快捷键步骤如下:
选中tex文件的代码页面(若未选中,则无法进行编译),然后按下该快捷键,在编辑器页面上端进行编译链选择,如下图:
当发现页面下方出现 √ 符号时,说明编译成功,相反,如果出现 × 符号,说明编译失败,就要找失败原因了。
5.2 正向同步测试
所谓的正向同步测试,即从代码定位到pdf
页面的相应位置,有以下三种方法:
5.2.1 使用侧边工具栏
5.2.2 使用右键菜单
5.2.3 使用快捷键
选中需要跳转的代码所在行,按Ctrl+Alt+J
,右侧就会跳转到相应行。这里的快捷键为默认设置,可自行通过上文方式设置为您想要的快捷键。
5.3 反向同步测试
即从pdf
页面定位到对应的代码位置。
在编译生成的 pdf 上,选中想要跳转行,鼠标左键双击或ctrl+鼠标左键单击,跳转到对应代码。此处快捷键的选择为上文设置,若使用笔者的代码,则为鼠标左键双击。
注意:截止到目前为止,使用的都是
vscode
的内部查看器对生成的
6. SumatraPDF 安装设置
有的时候,由于想要看到 pdf 文件的完整展现效果,使用内置查看器已无法满足需求,这时可以使用外部查看器进行查看。
外部查看器的优势是能够看到 pdf 文件在查看器中的目录,可以实时进行跳转;且根据笔者使用来看,外部查看器展示出来的 pdf 默认会放大一些,使得字体变大,要更加让人舒服一些。
笔者选择 SumatraPDF 作为外部查看器,该软件的优点在于在具有 pdf 阅读功能的同时很轻量,安装包不到 10MB 大小,且支持双向同步功能。通过调整其与 vscode 的窗口位置,能够在拥有这些优势的同时,达到与内置 pdf 查看具有相同的效果。
6.1 SumatraPDF下载与安装
6.2 使用SumatraPDF查看的代码配置
对其的配置代码如下所示:
"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.ref.viewer":"auto",
"latex-workshop.view.pdf.external.viewer.command": "C:/Program Files/SumatraPDF/SumatraPDF.exe", // 注意修改路径
"latex-workshop.view.pdf.external.viewer.args": [
"%PDF%"
],
"latex-workshop.view.pdf.external.synctex.command": "C:/Program Files/SumatraPDF/SumatraPDF.exe", // 注意修改路径
"latex-workshop.view.pdf.external.synctex.args": [
"-forward-search",
"%TEX%",
"%LINE%",
"-reuse-instance",
"-inverse-search",
"\"D:/Microsoft VScode/Microsoft VS Code/Code.exe\" \"D:/Microsoft VScode/Microsoft VS Code/resources/app/out/cli.js\" -r -g \"%f:%l\"", // 注意修改路径
"%PDF%"
]
上述代码也是要写到vscode
的settings.json
文件中的。各项代码的作用解读如下:
"latex-workshop.view.pdf.viewer": "external"
设置默认的pdf查看器,有三种变量参数:
- tab : 使用 vscode 内置 pdf 查看器;
- browser : 使用电脑默认浏览器进行 pdf 查看;
- external : 使用外部 pdf 查看器查看。
此处选择 external 参数,使用外部查看器。
注意:该参数就决定了vscode中的查看器是使用内部的,还是外部的。
"latex-workshop.view.pdf.ref.viewer":"auto"
设置
\ref
命令上的[View on PDF]
链接,此命令作用于\ref
引用查看。有三个参数变量:
- auto : 由编辑器根据情况自动设置;
- tabOrBrowser : 使用vscode内置pdf查看器或使用电脑默认浏览器进行pdf查看;
- external : 使用外部pdf查看器查看。
此处设置为auto
"latex-workshop.view.pdf.external.viewer.command": "C:/Program Files/SumatraPDF/SumatraPDF.exe", // 注意修改路径
使用外部查看器时要执行的命令,设置外部查看器启动文件
SumatraPDF.exe
文件所在位置,此处需要您根据自身情况进行路径更改,正常情况下只需更改磁盘盘符即可。
"latex-workshop.view.pdf.external.viewer.args": [
"%PDF%"
]
此代码是设置使用外部查看器时,
latex-workshop.view.pdf.external.view .command
的参数。%PDF%
是用于生成
"latex-workshop.view.pdf.external.synctex.command": "C:/Program Files/SumatraPDF/SumatraPDF.exe", // 注意修改路径
此命令是将生成的辅助文件
.synctex.gz
转发到外部查看器时要执行的命令,设置其位置参数,您注意更改路径,此路径为SumatraPDF.exe
文件路径。与上文相同。
"latex-workshop.view.pdf.external.synctex.args": [
"-forward-search",
"%TEX%",
"%LINE%",
"-reuse-instance",
"-inverse-search",
"\"D:/Microsoft VScode/Microsoft VS Code/Code.exe\" \"D:/Microsoft VScode/Microsoft VS Code/resources/app/out/cli.js\" -r -g \"%f:%l\"", // 注意修改路径
"%PDF%"
]
当
.synctex.gz
文件同步到外部查看器时latex-workshop.view.pdf.external.synctex
的参数设置。%LINE%
是行号,%PDF%
是生成%TEX%
是当触发syncTeX
被触发时,扩展名为.tex
的LaTeX
文件路径。
6.3 SumatraPDF 的使用
完成上述配置以后,便可以使用SumatraPDF
作为vscode
的外部查看器了。
按Ctrl+Alt+V
,即可打开编译后的PDF
文件。
且同样支持双向同步(正向同步和反向同步),其操作步骤与内嵌输出 pdf 时操作步骤相同,此处就不再赘述。查看效果图:
6.4 反向同步问题
经过上述步骤的设置,在使用SumatraPDF
作为外部查看器的时候,仍然存在无法通过SumatraPDF
跳转vscode
对应位置代码的情况,因此此处需要对其进行处理。
打开SumatraPDF
,进入 设置->选项->高级选项
会打开一个.txt
文件,直接在此处设置反向搜索的配置即可。将其对应位置的下述代码,改成下述格式:
InverseSearchCmdLine = "D:\Microsoft VScode\Microsoft VS Code\Code.exe" "D:\Microsoft VScode\Microsoft VS Code\resources\app\out\cli.js" --ms-enable-electron-run-as-node -r -g "%f:%l"
EnableTeXEnhancements = true
7. PDF
内部查看与外部查看的切换
以下展示由外部查看转为内部查看的操作,由内转外操作相同。
共有两种操作方式:UI界面设置 或 Json界面设置 。具体见下图: