Sky's Octopress Blog

为者常成,行者常至

LaTeX 结合 Git 的修订模式

| Comments

LaTeX 写作的时候,尤其是经过一番修改之后,会遇到这样的问题:怎样标出哪些部分修改了哪些地方,也就是类似MS Word 的修订功能?

单纯的修订标记工具——latexdiff

TeXLive 自带的工具其实可以做到这一点,但是单纯的使用它,需要注意一些地方。比如说,你有一个修改好的文件 new.tex,那么在进行修改之前,记得要备份未修改文件,比如说修改前的内容保存在 old.tex。那么,接下来,可以使用latexdiff工具生成附带修订的文件:

latexdiff old.tex new.tex > revised.tex

这样,就得到了一个附带修改标记的revised.tex文件。需要注意的是,直接进行编译revised.tex可能会出错,需要根据提示查找问题并进行改动。

此外,对于比较长的文档,大多会采用\input{}等导入其他章节内容的命令,那么需要使用--expand 选项。

注意事项

  1. 修改文件前,要保存。
  2. 排查修订标记文件的错误。
  3. --expand 选项应对\input{}\include{}等命令。

结合版本控制的修订标记工具——latexdiff-vc

一般情况下,修改的次数很多,每一个版本都保存的话,虽然不占什么空间,但是很啰嗦。现存很多版本控制软件能很好地控制版本,所以也就出现了升级工具:latexdiff-vc

这个命令默认用git作为版本控制工具,对于svn等其他主流版本控制工具也适用。这里以git为例子,对文件main.tex的修订版本控制的大致工作流程是这样:

1. 设置标签。

在每次完成文档编辑和修改,添加到版本控制系统并提交后,对这次提交(也就是这次修改好的文档版本)进行标签设置:

git tag '[type any information you like]'

其中,中括号中的内容自己定,这是对这次版本进行标记。

2. 切换版本

假设你在写作的过程中,有许多标签已经设定好了,你要比较ver_newver_old两个标签对应的版本的修订区别,首先切换到要修改后的标签ver_new:

git checkout ver_new

当前工作版本如果已经是ver_new就可以跳过这步操作。

3. 输出修订标记

最后,输出修订标记文档即可:

latexdiff-vc -r ver_old --flatten main.tex

这样一来,如果没有出错,会输出名为main-diffver_old.tex的文档。其中--flatten选项和前面--expand是同一个作用,不再多说。

此外,可以直接加上--pdf选项直接编译生成带修订的文档。但个人经验来看,不适合这么做,因为生成的修订标记文档常常不能编译通过,需要看报错来修改,尤其是在浮动体、图片、表格比较多的时候。

注意事项

  1. git commit之后要git tag
  2. 切换到修改后的版本。
  3. 排查修订标记文档中的编译错误。

Comments