论文写作过程中,通过涉及投稿、修改、改投等各种环节,正好tex文件是文本格式的,那么git就成为了不二之选的版本控制工具。对于一般的latex文档写作,vscode结合LaTeX Workshop
插件,足以应付。但是,如果我们需要生成当前版本和上一个commit之间的,包含修改内容、位置信息的PDF文件,就需要进行额外的设置了。这里我们以vscode为载体,讲解如何实现这一过程。
软件准备
工欲善其事必先利其器,vscode结合以下插件,非常有帮助。
- LaTeX Workshop (插件)
- LaTeX language support (插件)
- LaTeX Utilities (插件)
- LTex - English support (插件)
- Template Generator
- LaTeX Snippets
其中LaTeX Workshop
是基本。LaTeX Utilities
可以提供字数统计的功能。Template Generator
可以提供模板的功能。写作过程中,如果有模板功能,那么一些重复的、繁琐的设置就可以统一解决了。LaTeX Snippets
可以在模板的基础上,为一些代码较多的环境提供帮助,比如figure
、table
等等。
软件设置
软件设置部分就是最耗时耗力的地方了。好在,设置一次之后,就不用再次设置。默认你使用的git进行版本控制。假设当前文件的相对路径为${relativeFile}
,全名为${fileBaseName}
,不包含后缀的为${fileBaseNameWithoutExtension}
,其父路径为${relativeDir}
。一般来说,得到校对格式的PDF需要经过以下步骤:
- 获得上一个commit的文件的tex代码,在git里边可以使用^head代表上一个commit(另外一种表示head~x代表倒数第x次commit)。可以使用如下代码实现该功能:
git show ^head:${relativeFile} > tmp.tex
然而,由于${relativeFile}
在windows中使用的路径分割符号为\
,但是git是无法识别这个的。解决的办法为,将路径传导一个自定义的bat文件中,在其中将路径的分隔符进行替换,然后再执行操作。一个示例的文件如下:
@echo off
@REM modify source path
set source=%1
set uSource=%source:\=/%
@REM modify dest path
set dest=%2
set uDest=%dest:\=/%
git show ^head:%uSource% > %uDest%
- 将上一个版本的tex文件和当前版本的tex进行校对,使用latexdiff工具。
latexdiff tmp.tex ${relativeFile} > tmpdiff.tex
- 编译校对后的tex文件,生成pdf文件。这里我们使用latexmk工具。
latexmk --xelatex -interaction=nonstopmode ${relativeDir}\\tmpdiff.tex
xdvipdfmx ${relativeDir}\\tmpdiff
- 清理残余的文件,如果是在windows下,直接使用del命令
del /s *.aux *.bbl...
将这四个命令,分别使用vscode的task功能变成4个task,然后再新建一个task,依次运行即可。
"dependsOrder": "sequence",
"dependsOn": [
"Export Previous LaTeX Version",
"Create LaTeX Diff File",
"Compfile Diff File with LatexMK",
"Clean Compiled Files"
],
需要额外注意dependsOrder
项,这个必须设置,否则依赖项的执行变成并行和随机的了,将产生错误。
文件预览
文件预览可以使用系统默认的软件打开,使用如下命令:
explorer `${relativeFile}`
也可以使用vscode进行打开,例如:
code `${relativeFile}`
但是这些打开方式均有一个缺点,就是如果我更新了PDF文件,无法自动更新。其实,如果我们将PDF文件使用右侧打开的功能之后,只要不关闭,那么下次重新编译tex文件,PDF的内容会自动更新到tab中,这样还解决了反复开关PDF软件的繁琐问题。
额外的经验
如何安装bst文件。如果我们自定义了一些bst文件,需要按照并全局使用,可以先搜索其他bst文件所在的文件,我的在C:\texlive\2019\texmf-dist\bibtex\bst
。那么创建一个自定义的文件夹,然后将bst文件拷贝到这个自定义的文件夹中,最后使用mktexlsr
命令安装。
latexmk结合xelatex选项,默认可以识别是否需要增加编译次数,产生文献引用的内容。然而,如果tex的文件名是中文的时候,将导致无法找到bbl文件的错误,使得引用部分无法变成成功。