前言
最近在学习使用LaTex写作,由于我目前使用Manjaro,Linux上目前没有优秀的LaTex写作软件,VS Code成为了我目前的一个好选择。
- 本文转载自 Ethlisan 由我重新排版,部分内容经过编辑
- Visual Studio Code (以下简称 VS Code)是微软推出的一款编辑器,在尝试为用他配置 Python 开发环境之后,我深深的被 VS Code的代码高亮和中文显示吸引了,以至于用了这么多年的 Sublime Text 都想迁移到 VS Code,搭建好 LaTeX 环境之后,我对比了下 Sublime Text 和 VS Code,感觉 Sublime Text 这块更成熟(特指 LaTeX),VS Code 属于追赶者,用过之后觉得还是很不错的~~
基本要求
-
TeXlive 或者 MiKTeX (本文以 TeXlive 2015 为例)
-
Visual Studio Code
-
LaTeX Workshop (VS Code 插件)
软件的安装
TeXlive 和 Visual Studio Code 的安装这里不赘述,需要注意的一个事情是,安装之后需要将 TeXlive 的 bin 目录(C:\texlive\2015\bin\win32)添加到系统的环境变量(PATH)中。
插件的安装
在安装 Visual Studio Code 之后,在左侧打开 扩展(快捷键 Ctrl+Shift+X),搜索 LaTeX Workshop,选择安装,并选择重启 VS Code 激活插件。
两种编译方式
- 使用可变 TeX 引擎
在我们编写 LaTeX 文档的时候,有两个命令很特殊,一个是 %!TEX program = xelatex,一个是 % !TEX root = relative/or/absolute/path/to/root/file.tex,前者指定编译方式,后者指定主(根)文件,借助这个,我们可以对不同文档设定不同的编译方式,这就简化了编译时的麻烦。如果我们指定了文档的编译方式,则只需要按照下面配置就可以编译 LaTeX 文档了。
具体做法是,在 VS Code 左下角,点击齿轮图案的按钮,选择 设置,在右侧添加 LaTeX Workshop 的配置命令
"latex-workshop.latex.clean.enabled": false,
"latex-workshop.view.pdf.hand": true,
// 可变编译方式
"latex-workshop.latex.toolchain": [
{
"command": "", // 注意这里是留空的
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}
],
"latex-workshop.latex.clean.enabled": false,
"latex-workshop.view.pdf.hand": true,
// 可变编译方式
"latex-workshop.latex.toolchain": [
{
"command": "", // 注意这里是留空的
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}
],
然后我们选择新建一个文档(前几天看到两个博主借鉴我们 2014 年 Sublime Text 搭建 LaTeX 编写环境博文的内容,连下面的代码都是一样的,但是在文中却没有引用我们的,呵呵),鉴于此,我决定加入一些个人信息。
%!TEX program = xelatex
% 使用 ctexart 文类,UTF-8 编码
\documentclass[UTF8]{ctexart}
\title{测试}
\author{ddswhu}
\date{\today}
\begin{document}
\maketitle
This is the context of the article.
这就是文章的所有内容。
\end{document}
将这个文件保存为 test.tex,然后使用快捷键 Ctrl+Alt+B 编译,或者在文档中,鼠标右键,选择 Build LaTeX Project,这样就能使用 xelatex 编译 test.tex 了。
其实,LaTeX Workshop 默认的编译方式是 latexmk,我们还可以仿造 MiKTeX 里面的 TeXify 命令,只需要将配置修改为
"latex-workshop.latex.toolchain": [
{
"command": "texify",
"args": [
"--synctex",
"--pdf",
"--tex-option=\"-interaction=nonstopmode\"",
"--tex-option=\"-file-line-error\"",
"%DOC%.tex"
]
}
]
- 指定编译方式
修改插件配置文件**(不推荐)**
说到指定单独的编译方式,这里还是有两个不同的方式,一种是在上述的配置基础上继续修改,可以将 command修改为 xelatex或者pdflatex以及bibtex。
以下是一个完整的 PDFLaTeX 编译(pdflatex->bibtex->pdflatex->pdflatex)
"latex-workshop.latex.toolchain": [
{
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}, {
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}, {
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}, {
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}
]
因为这里指定了具体的编译方式,所以在文档部分不需要指定编译方式。由于配置文件是全局的,所以这种方式对于不同文件,你需要临时配置文件,有点不太方便。
修改项目任务(tasks.json)文件(推荐) 在 VS Code 中,在操作时并不是以单个文件为依托,而是以项目或者工程为单位。对应的,在 VS Code,我们需要将这个文件夹导入到 VS Code 中,并为这个项目配置 tasks.json 文件,在 tasks.json 文件中指定编译方式等。
具体操作是,在任务栏选择 任务->运行任务,然后 VS Code 会提示没有任务,需要配置任务,然后选择使用模板创建任务,在模板选择的时候,选择 Others 。然后将 tasks.json文件内容修改如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
// Author: EthanDENG
// Homepage: http://ddswhu.com/
// Last Update: 2017/11/01
// Latest Version: http://ddswhu.com/download/
"version": "2.0.0",
"tasks": [
{
"taskName": "XeLaTeX",
"type": "shell",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"${file}"
],
"problemMatcher": "$tsc-watch"
},
{
"taskName": "PDF Preview",
"type": "shell",
"command": "SumatraPDF -reuse-instance ${fileBasenameNoExtension}.pdf",
"problemMatcher": "$tsc-watch"
},
{
"taskName": "PDFLaTeX",
"type": "shell",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"${file}"
],
"problemMatcher": "$tsc-watch"
},
{
"taskName": "BibTeX",
"type": "shell",
"command": "bibtex",
"args": [
"${fileBasenameNoExtension}.aux"
],
"problemMatcher": "$tsc-watch"
},
{
"taskName": "LaTeX",
"type": "shell",
"command": "latex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"${file}"
],
"problemMatcher": "$tsc-watch"
},
{
"taskName": "dvi2pdf",
"type": "shell",
"command": "dvipdfmx",
"args": [
"${fileBasenameNoExtension}.dvi"
],
"problemMatcher": "$tsc-watch"
},
{
"taskName": "dvi2ps",
"type": "shell",
"command": "dvips",
"args": [
"${fileBasenameNoExtension}.dvi"
],
"problemMatcher": "$tsc-watch"
},
{
"taskName": "ps2pdf",
"type": "shell",
"command": "ps2pdf",
"args": [
"${fileBasenameNoExtension}.ps"
],
"problemMatcher": "$tsc-watch"
}
]
}
这样,任务配置好了,接下来就只要运行就行了。依次选择 任务->运行任务,选择你所需要的编译方式,如果需要完整编译,假设文档有 bib 文件,则需要选择 PDFLaTeX->BibTeX->PDFLaTeX->PDFLaTeX。
这种配置的好处是,你可以完全控制编译方式,能选择编译 bib 文件,适用于大型项目,比如论文,笔记或者书籍等(推荐)。并且只要你配置好 tasks.json文件之后,以后打开文件就不用管编译方式和配置了,可以直接运行任务就行。
其他设置
修改配置文件编译快捷键 编译的默认快捷键是 Ctrl+Alt+B,由于我习惯了 Sublime Text 的 Ctrl+B,所以这里我们再提一下 VS Code 快捷键的设置,在 VS Code 左下角,点击齿轮图案的按钮,选择 键盘快捷方式,然后再搜索栏里面选择 LaTeX Workshop,将第一个 Build LaTeX Project 的快捷键修改为 Ctrl+B 即可。
为任务文件编译添加快捷键 上述的快捷键是修改默认的编译快捷键,为了能让我们更方便的编译,我推荐使用下面的快捷键设置
// Author: Ethan DENG
// Homepage: http://ddswhu.com/
// Last Update: 2017/11/01
// Latest Version: http://ddswhu.com/download/
{
"key": "ctrl+1",
"command": "workbench.action.tasks.runTask",
"when": "editorFocus && !findWidgetVisible && !replaceActive && !searchViewletVisible",
"args": "PDFLaTeX"
},
{
"key": "ctrl+2",
"command": "workbench.action.tasks.runTask",
"when": "editorFocus && !findWidgetVisible && !replaceActive && !searchViewletVisible",
"args": "XeLaTeX"
},
{
"key": "ctrl+3",
"command": "workbench.action.tasks.runTask",
"when": "editorFocus && !findWidgetVisible && !replaceActive && !searchViewletVisible",
"args": "BibTeX"
},
{
"key": "ctrl+4",
"command": "workbench.action.tasks.runTask",
"when": "editorFocus && !findWidgetVisible && !replaceActive && !searchViewletVisible",
"args": "PDF Preview"
}
将上述代码添加到 VS Code 的 keybindings.json 中即可。添加方法:文件->首选项->键盘快捷方式,在搜索框下方找到 keybindings.json文件并打开,将上述内容添加到末尾即可。上述配置了4个快捷键,
- Ctrl+1:PDFLaTeX
- Ctrl+2:XeLaTeX
- Ctrl+3:BibTeX
- Ctrl+4:PDF Preview (使用 SumatraPDF 预览)
区分配置文件设置与任务文件设置
这里有两个东西我们需要区分下,为了让 VS Code 能编译 tex 文件,我们有两种方法,一种是通过修改配置文件(latex-workshop.latex.toolchain),一种是修改文件夹内所在的任务文件(tasks.json),他们之间的区别是
- LaTeX Workshop 配置法:需要文件开头指定编译方式,即 %!TEX program = xelatex,可以使用 pdflatex与xelatex,不适用于含 bib 文档的编译,快捷键为 Ctrl+B,适用于单个文档或者小型项目。
- 项目任务文件配置法:无需指定文档编译方式,可以通过 Ctrl+1-4 自由选择编译方式,需要在项目文件夹内修改 tasks.json文件,原则上适用于任何项目。 tasks.json 文件 使用 tasks.json文件有两种方式。
- 第一种方法是,参照本文文末下载 .vscode.zip,将其解压放在每个需要添加 tasks.json的 LaTeX 项目(文件夹)下。
- 第二种方法是,将上述内容保存下来,在新建 LaTeX 项目的时候,按照上述过程添加 tasks.json即可。
为了简化第二种方法的工作量,我们这里借助 VS Code 里面的代码片段(code snippet)。VS Code 根据语言分类,将代码分类存放在不同的 json文件中,我们只需要将 tasks.json的内容转为 snippet,添加到 json.json下面即可,在下次需要修改 tasks.json文件的时候,输入latextask,然后按下 Tab键即可。具体的,文件->首选项->用户代码片段,键入 JSON,然后将下面内容添加到 json.json 中。
{
// Author: Ethan DENG
// Homepage: http://ddswhu.com/
// Last Update: 2017/11/01
// Latest Version: http://ddswhu.com/download/
"The content of tasks.json file of LaTeX files ": {
"prefix": "latextask",
"body": [
"{",
" // See https://go.microsoft.com/fwlink/?LinkId=733558",
" // for the documentation about the tasks.json format",
" \"version\": \"2.0.0\",",
" \"tasks\": [",
" {",
" \"taskName\": \"XeLaTeX\",",
" \"type\": \"shell\",",
" \"command\": \"xelatex\",",
" \"args\": [",
" \"-synctex=1\",",
" \"-interaction=nonstopmode\",",
" \"-file-line-error\",",
" \"\\${file}\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"PDF Preview\",",
" \"type\": \"shell\",",
" \"command\": \"SumatraPDF -reuse-instance \\${fileBasenameNoExtension}.pdf\",",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"PDFLaTeX\",",
" \"type\": \"shell\",",
" \"command\": \"pdflatex\",",
" \"args\": [",
" \"-synctex=1\",",
" \"-interaction=nonstopmode\",",
" \"-file-line-error\",",
" \"\\${file}\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"BibTeX\",",
" \"type\": \"shell\",",
" \"command\": \"bibtex\",",
" \"args\": [",
" \"\\${fileBasenameNoExtension}.aux\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"LaTeX\",",
" \"type\": \"shell\",",
" \"command\": \"latex\",",
" \"args\": [",
" \"-synctex=1\",",
" \"-interaction=nonstopmode\",",
" \"\\${file}\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"dvi2pdf\",",
" \"type\": \"shell\",",
" \"command\": \"dvipdfmx\",",
" \"args\": [",
" \"\\${fileBasenameNoExtension}.dvi\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"dvi2ps\",",
" \"type\": \"shell\",",
" \"command\": \"dvips\",",
" \"args\": [",
" \"\\${fileBasenameNoExtension}.dvi\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" },",
" {",
" \"taskName\": \"ps2pdf\",",
" \"type\": \"shell\",",
" \"command\": \"ps2pdf\",",
" \"args\": [",
" \"\\${fileBasenameNoExtension}.ps\"",
" ],",
" \"problemMatcher\": \"\\$tsc-watch\"",
" }",
" ]",
"}"
],
"description": "The content of tasks.json file of LaTeX files "
}
}
反向定位跳转
通过右侧的红色 PDF 按钮,我们可以打开 PDF 预览,我们在查看 PDF 的时候,可以通过快捷键 Ctrl+Shift+Left跳转到代码。