霍格沃茨特快列车
Semprahartlin's Hut
在Mac上用VScode超顺滑写作LaTex|从安装到写作

学术写作需要,Word太🌶 🐔,转战LaTex,Overleaf上的渲染速度慢,autocompile多来几次就suspend了(熄火太多次,发动机黄灯)。简略记录一下LaTex在本地(macOS)的安装过程。

平常撸代码都在用VScode,索性就使用VScode来写LaTex,工作流为 VScode(Writing + Preview) + BasicTex

0. 安装 BasicTex

在macOS上有MacTex,但是这玩意有3G多,转了一圈Google发现还有一个只有700多M的BasicTex(也可以在MacTex的homepage发现它) 下载地址

A Smaller Distribution, Basic TeX

TUG recommends the full MacTeX (管他个屁,3G多老子才不下), even for beginners. It contains all files most users ever need. Beginners using it don’t face the daunting task of searching for missing components and figuring out how to install them in the TeX distribution.

推荐使用Homebrew一键省心安装

$ brew update // 记得先要update一下避免出现问题
$ brew cask install basictex

一般情况,basictex会被安装到/usr/local/texlive/2020basic/2020basic代表版本号。

1. 安装第一个依赖

等会会需要用到自动编译七七八八的,我这缺省无latexmk,用tlmgr安装一下。

tlmgr是basictex自带的宏包管理(TexLive Manager,BasicTex和MacTex其实都是TexLive的发行版)

要用上sudo,有permission required

$ sudo tlmgr update --self // 先自我更新一下
$ sudo tlmgr install latexmk

在之后的编译过程中如果有缺失的宏包,就可以使用sudo tlmgr install 宏包名称来安装,有时候需要自己Google一下*.sty对应的宏包名称是什么,十分麻烦,后文会介绍一个自动寻找并安装缺失依赖的办法。

2. 配置VScode

打开VScode,搜索安装(快捷键Cmd+Shift+X)插件LaTex Workshop

ws

装完后侧边栏会出现TEX字样,每当保存.tex文件的时候就会自动编译。当前窗口是.tex文件时tabbar也会出现PDF view的小图标。

PDF的preview采用的是pdf.js,所以实际上是个webview

漂亮极了

这个webview在每次save文档的时候都会自动刷新,前提是要successfully built(会在log中发现),可能会有莫名其妙的编译问题(编译的recipe很重要,后文会提到),比如pdf有被写入完成,但是webview没有自动刷新,因为没有successfully built(refresh是发生在successfully built之后,但是pdf written可以发生在这之前)

当然还要做一点微小的工作。

2.1. 配置LaTex Workshop

按下你的Cmd+Shift+P,输入settings.json打开设置,加入以下配置并保存(注意json内容语法)

{
  ...
//latex begin
  "latex-workshop.latex.recipes": [
    {
      "name": "xelatex",
      "tools": ["xelatex"]
    },
    {
      "name": "latexmk",
      "tools": ["latexmk"]
    },

    {
      "name": "pdflatex -> bibtex -> pdflatex*2",
      "tools": ["pdflatex", "bibtex", "pdflatex", "pdflatex"]
    },
    {
      "name": "xelatex -> bibtex -> xelatex*2",
      "tools": ["xelatex", "bibtex", "xelatex", "xelatex"]
    }
  ],
  "latex-workshop.latex.tools": [
    {
      "name": "latexmk",
      "command": "latexmk",
      "args": ["-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "%DOCFILE%"]
    },
    {
      "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": "bibtex",
      "command": "bibtex",
      "args": ["%DOCFILE%"]
    }
  ],
  "latex-workshop.view.pdf.viewer": "tab",
  "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 end
  ...
}

这个json还是蛮重要的,workshop默认的recipe导致我的一些latex无法被正常编译,目前这个配置和我的文档相处的很好。

3. 开始写作

save之前的settings.json后重新开一个新的窗口,latex-workshop的tab应该如图所示:

自此,你就能开始用VScode在本地快乐写作Latex了,不过…

需要注意的是单纯使用xelatex是无法编译.bib文件(参考引用)的,需要来一个多重编译,选择编译的recipe如上图所示的 xelatex->bibtex->xelatex*2

考虑到你有可能把文档分成part1.tex, part2.tex…,可以在你的主文档(假设叫做main.tex)的第一行加上

% !TEX root = main.tex

我也不懂这叫啥 (Magic header?),总之complier会从main.tex开始complie

写作时候每次save,vscode插件都会自动完成从complie到pdf view的refresh操作(如果一切正常)

小朋友,当你开始用中文写作的时候,你是否有很多问号?不要着急,我们继续往下看。

4. 使用写作模板

自己搞好累, 你可以在很多地方找到模板,Overleaf上的模板就很不错,下载完后的模板请确保目录完整/一致性。

4.1. 自动安装缺失的依赖

宏包缺失是一个常见的编译失败问题。下载的模板往往带有很多宏包,如果在编译后多次出现依赖缺失,可以使用textliveonfly来一次性检查补装缺失的依赖并编译。同样的,使用tlmgr来安装。

sudo tlmgr install texliveonfly

安装后使用如下命令来编译123.tex并检查依赖缺失

sudo texliveonfly 123.tex

这个小工具不是每次都很好用,有时候还是需要自己手动安装。

遇到错误就再一次使用texliveonfly命令,还是出错的话就手动tlmgr install一下。我在安装过程中有几个包没有自动帮我装上(dk why..)宏包缺失是在编译过程中逐行检查的,所以一个没搞定就会一直卡在那一个。

5. 用中文写作

用中文写作Latex需要考虑到文档编码和引擎支持。tex文件可以被很多引擎编译,其中latexmk和xetex对中文支持还行(UTF-8)。另外还需要装一下中文支持宏包

如果没有latexmk可以参照前文所述的方法sudo tlmgr install latexmk

我用的是xetex(逃

5.1 安装中文宏包

决定因素是你的文章主要语言是中文还是英文。

两者的差别在于,注意文章头部的日期

整体为中文,使用ctex

整体为英文,使用xeCJK

这个日期用的是\today渲染出来的

\date{HEHEHEHEHE --- \today} % University, school and/or department name(s) and a date

另外还可以发现用ctex的Introduction后面第一行的中文被采取了缩进措施,间距也略有改变。

ctex

如果全文基本构成是中文,可以使用ctex宏包

估计你没有自带这个包,先安装一下

sudo tlmgr install ctex

然后在文章中引入

\usepackage[UTF8]{ctex}

参考:ctex作者在stackexchange上的回答

xeCJK

如果整体为英文,部分中文字体需要被正常渲染,则采取xeCJK

\usepackage{fontspec} % 字体包
\usepackage[slantfont, boldfont]{xeCJK} % 引入
\setCJKmonofont{Songti SC} % 设置中文字体

xeCJK的详细用法有很多,能力有限恕不介绍 (平常用不到)

更多用法请参考阅读


Last modified on 2020-05-19