LaTeX + GIT - 标记自特定提交以来的差异

LaTeX + GIT - 标记自特定提交以来的差异

我将 LaTeX 文档存储在本地 GIT 存储库中。完成文档的适当部分后,我会将其编译为 PDF 并将其发送给不熟悉 LaTeX 或 GIT 的主管。

但是,他要求我用红色标记自上一个 PDF 以来所做的所有更改。目前,我手动执行此操作,因此一旦更改被接受,我也需要将其从文档中删除。这很耗时,而且容易出错。

是否有任何自动化的方法来:

  • 选择 GIT 提交或特定日期,用于与当前文档版本进行比较,
  • 将当前文档复制到临时文件,并在该临时文件中用红色字体标记所有差异,
  • 将临时文件编译为 PDF?

答案1

git show我使用和的组合完成了此操作latexdiff。需要注意的是:这适用于单文件文档,如果您将文档拆分为多个文件并使用\input/ ,则可能会更复杂\include

  1. 首先从以前的提交中获取文件的版本,使用

    git show <commit>:filename.tex > tmp.tex
    
  2. 运行latexdiff生成一个新.tex文件,其中突出显示了差异:

    latexdiff tmp.tex filename.tex > tmpdiff.tex
    
  3. tmpdiff.tex照常编译。

我认为git show您需要在存储库中指定完整路径,因此如果它放在子文件夹中,则需要path/to/filename.tex

我写了一个脚本来自动化这个过程,并清理残余部分。诚然,我还没有用过这个脚本,但它可能是一个起点。

#!/bin/bash    
git show $1:file.tex > tmp.tex
latexdiff tmp.tex file.tex > tmpdiff.tex
latexmk -pdf -interaction=nonstopmode tmpdiff.tex
mv -v tmpdiff.pdf Diffed.pdf
rm -v tmp.tex tmpdiff.*

答案2

作为替代方案,这是我过去做过的事情。它很简单,但不是特定于 git 的(碰巧我当时正在使用 git,尽管不太好)。它更接近您的手动方法,但使用适当的工具来减少错误:

我用的是变化标记更改的包当我制作它们时。它需要进行一些定制才能满足我的需求(类似于我需要将突出显示的 pdf 交给非 LaTeX 用户):

\usepackage[authormarkup=none]{changes}
\setaddedmarkup{{\color{blue!75!black}#1}}
\setdeletedmarkup{\protect{\color{blue!25!gray}\sout{#1}}}
\definechangesauthor[name={Chris}]{CH}
\DeclareRobustCommand{\add}[1]{\added[id=CH]{#1}}
\DeclareRobustCommand{\del}[1]{\deleted[id=CH]{#1}}
\DeclareRobustCommand{\rep}[2]{\replaced[id=CH]{#1}{#2}}
\setremarkmarkup{\footnote{#1:\textcolor{blue}{#2}}}

这三行\DeclareRobustCommand仅仅是方便的宏。

\listofchanges这也允许我使用。

但是它没有发现我所做的自动(基于查找和替换/正则表达式)更改(equation~\ref-> Equation~\ref,很多acronym \acs ->\acl等)。我本可以编写一个正则表达式查找/替换来执行此操作,但在这种情况下,这会产生不必要的混乱(并产生巨大的listofchanges)。

请注意,通过传递[final]\documentclass或通过\usepackage[final]{changes}不会显示更改。

基于 git diff插入 和 宏的脚本\added无疑\deleted\replaced可行的,但这几乎会重新发明一个糟糕的 latexdiff 版本,所以我不推荐它。

答案3

git-latexdiff正是为此而写的:https://gitlab.com/git-latexdiff/git-latexdiff

由于我是主要作者,因此我显然有强烈的偏见,但它似乎是迄今为止最先进的工具。

另请参阅此问题:将 latexdiff 与 git 结合使用

答案4

我认为latex-diff可以做到这一点。您可能需要更新才能获得此特定功能。基本上,就像Torbjørn T. 的回答作为 的一部分实现latex-diff。还有一些依赖项可能在 Windows 上不可用。

你需要做类似的事情

    latexdiff-vc --git --pdf -r rev file.tex

rev您要比较的提交的哈希值在哪里。它甚至可以与标签一起使用

手册有详细信息。

相关内容