怎么想到用latexmk的呢?写论文呗!

本来呢,我一直习惯于使用命令行手敲

pdflatex someting.tex

千万别小看这种重复劳动,它不仅帮你加深记忆,还有最完整的输出,让你一窥Tex排版系统的内裤(→_→,一本正经胡说八道中……)。还记得Archlinux的哲学名言吗?—Keep it simple and stupid (KISS)—说得太对了呀!

但是啊说到写论文,肯定要有引用文献的啦,这就麻烦了,每次更新参考文献和交叉引用都需要四步走:

pdflatex a.tex  # 生成aux文件,下一步bibtex才能知道需要引用哪几个文献
bibtex a        # 生成bbl文件,及将.bib里面的元数据展开成符合tex语法的bibitem
pdflatex a.tex  # 刷新引用,可能残留一些问号
pdflatex a.tex  # 产生最终结果,所有引用正确显示

这就忍不了了吧?其实我还是能忍的,因为不是每次更新文献就重新编译,可以写一大段再更新一次,这就省事儿多了。真正原因是我像用VS code写latex,下了一个插件叫Latex Workshop,它默认使用pdflatex编译,但我写中文必须要用xelatex编译,而且必须要完成自动化。

我看到可以用latexmk,所以就去简单研究了下,下面进入正题。

命令行使用

latexmk

默认情况下会自动编译当前文件夹下所有tex文件,默认使用pdflatex引擎。

如果想编译得到PDF文件,则直接加上选项:

latexmk -pdf

如果想编译单个文件:

latexmk single_file.tex

要删除临时文件:

latexmk -c
latexmk -C ## 删除(包含输出文件)

配置文件

  • ~/.latexmkrc:用户全局配置
  • $PWD/latexmkrc:局部文件夹配置

一个简单的配置文件:

$dvi_previewer = 'start xdvi -watchfile 1.5';
$ps_previewer  = 'start gv --watch';
$pdf_previewer = 'start evince';
 
$pdf_mode = 1;                              # tex -> pdf
# $pdf_mode = 2;                            # tex -> ps -> pdf
# $pdf_mode = 5;                            # use xelatex, see `man latexmk`
$postscript_mode = 1;                       # tex -> ps
@defalut_files = ('main.tex', 'niam.tex');  # 指定要编译的文件
 
$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S';
$xelatex = 'xelatex -no-pdf -interaction=nonstopmode -synctex=1 %O %S';

References