我使用修订控制(确切地说是 Subversion)来跟踪我的 LaTeX 文档的编辑。是否有与修订控制接口的 LaTeX 软件包?具体来说,如果能在文档中看到修订号以及时间和日期,那就太好了。(显然,我会在最终版本中关闭此功能。)此外,如果能获得一份 PDF,显示在给定修订中添加和删除了哪些内容,那就太好了。
答案1
是的,有一个名为svn
和svninfo
以及一些适用于其他版本控制系统的版本。请参阅TeX 常见问题解答:您可以使用类似这样的代码\SVNdate $Date$
,它将使用文档中的 SVN 变量的值Date
,或者在文档的页脚中包含日期和版本号。不过,我认为它们都没有显示差异。
答案2
对于 CVS 或 Subversion 等修改源文件的系统,TeX 常见问题解答的简洁回答是我最喜欢的:
\def\RCS$#1: #2 ${\expandafter\def\csname RCS#1\endcsname{#2}}
\RCS$Revision: 1.13 $ % or any RCS keyword
\RCS$Date: 2010/04/02 18:20:00 $
...
\date{Revision \RCSRevision, \RCSDate}
它不是很复杂,但你只会将它用于草稿版本,因此在这种情况下简单和强大胜过漂亮。
Mercurial 或 Git 等系统不会修改源文件。在这种情况下,一个好的解决方案是生成一个可以\input
放入源文档的文件。对于 Mercurial,我使用如下 Makefile 规则:
hg.id: .hg
hg log -r'p1()' --template '\\def\\HgNode\{{node|short}}\n\\def\\HgDate\{{date|rfc3339date}}\n\\def\\HgAuthor\{{author|person}}\n' >$@
我\input
将该文件放入文档中,并在命令或脚注中使用\HgDate
和。\HgNode
\date
更新:原帖还提到了版本之间的变化。这在 LaTeX 中有点棘手,但TeX 常见问题解答对各种(并不完全令人满意的)可能性进行了讨论。
编辑:较新版本的 Mercurial 要求对{
模板中的字符进行转义。我修改了答案以包含该内容。
编辑:hg parent
比 更好hg tip
,因为如果您要格式化存储库的旧版本(已标记?),它会给出正确的结果。但(进一步编辑)hg log -r'p1()'
比两者都好,因为即使在工作目录有两个父目录的偶尔情况下(例如当您正在进行合并并解决合并冲突时),它也会产生单个结果。
答案3
对于你问题的最后一部分,我喜欢 Perl 脚本latexdiff
。这会生成显示不区分换行符的差异的 LaTeX 文档,其中包含更改栏和其他视觉标记。(遗憾的是,该实现相当复杂,依赖于复杂的正则表达式进行解析,因此值得确保安装了 Perl 5.8.10 或更高版本,以获得更大的正则表达式嵌套深度。)