我有一份相当大的文档(约 60 页),包含两个版本(其中一个版本经过改进)的技术文档。不幸的是,我似乎丢失了旧版本的源代码(但我有最新文档的代码)。
我想比较该文档的两个版本(PDF 格式),看看两者之间有什么变化,最好是
diff
类似的格式。
两个版本之间没有太大的变化,但一些细节很重要,但很容易被忽视。
非常感谢您对如何高效、有效地实现此目标的建议。也欢迎非 TeX 相关的解决方案,包括非免费的解决方案。
我应该指出的是,这些文献仅包含文本,只有很少的图表和少量的公式。
编辑: 这些文档是我自己用 pdfLaTeX 创建的,如果您认为我使用的软件包中有相关信息,我也可以提供。
编辑2:很多好的、有希望的答案!我会努力在某一天尝试所有这些答案,并将结果发布在这里。这可能会成为一个很好的社区维基。
答案1
我对这里建议的一些方法进行了快速比较。这个答案将成为社区 wiki,我将把它作为公认的答案。希望没有人会介意失去 15 个声望。我赞成所有有用的答案,并敦促您也这样做——它们都是有潜力的想法。
Adobe Acrobat Professional -- 比较文件
我使用 Acrobat 8 进行此测试(这可能是我第一次感谢上级让我的组织主要使用 Windows)。设置非常简单 - 转到先进的->比较文件...,然后填空。我认为这很容易。嗯……
专业提示——不要选择详细分析(慢)。你以后会感谢我的。我第一次这样做,这东西已经运行了10分钟,我们可以这样说,Acrobat 现在是世界奖的骄傲拥有者内存消耗惊人,高达 750(七百五十,不是笔误)MB。这让我想起除了打印前校对外,我不使用 Acrobat 是有原因的。
我尝试过并排报告正常分析,如果我的修订版没有比原版多出 8 页左右,那么这种方法应该会很有效。它没有意识到文档中某处有相同的文本——据我所知,它只是将两份文档或多或少地并排放置,并添加了一些花哨而无用的颜色。天哪。我本可以自己做这件事,而不必拿出利比里亚的许可证赤字。此时,我不想再尝试进行详细分析,据说详细分析可以检测到此类情况。
我会给它一个-1/10,因为它有一个无用的选项,实际上不起作用,而且效果非常显著。
更新:Geoffrey 在处理一个看似相似的文档时,对 Acrobat 的使用体验有所不同,我尝试重复他的做法。第一次尝试时,我使用了逐页比较选项,这是如此不令人满意,而现在我尝试了文本差异。这正如他建议的那样,尽管如果选择综合报告选项,并且仍然难以解释并排报告。它仍然没有像人们习惯格式时所期望的那样,并排显示每个文档中相等的文本部分,
diff
而是以不同的方式突出显示通用文本和每个版本特有的文本。至少,有一个注释说明您可以在另一文档的哪一页找到匹配的文本,所以这很有用,尽管并不完全方便用户使用。此外,我注意到它在某些地方很混乱,匹配看似随机的单词和单词片段。这将显著提高 Acrobat 的得分,我认为7/10是合适的,扣除不菲的许可费后即可获得整整两个积分——我使用的公式是:
licensePenalty = max(0, len(str(licenseFeeInUSD))-1)
。除此之外,它运行良好,并且性能也与 Geoffrey 观察到的相似。
Adobe Acrobat Professional——以 .txt 格式导出。 +
diff
这还算管用。如果不是因为令人讨厌的连字符乱码,大部分文本都会正确显示。另外,我的文本是瑞典语,有相当多的变音符号也丢失了。连字符也偷偷溜了进来(相当烦人——瑞典人有时说的单词很长)。格式很糟糕,但可能可以用智能脚本修复
$FAVOURITE_INTERPRETED_LANGUAGE
。我会给6/10努力,但只是因为 diffing 确实有效。文本在某些地方不太可读,例如看起来
träff
像tr".
-
我在寻找可以在 Ubuntu 上安装的 diff 类程序时发现了这个小宝贝。可从http://www.qtrac.eu/diffpdf.html. 需要 Qt 和 Poppler。
这实际上比 Acrobat 的正常分析模式——差异被很好地突出显示,显而易见。它像 Acrobat 一样进行逐页比较,如果您知道在哪里插入了附加页面,似乎有一种方法可以进行更好的比较,但这样做并不简单,而且我懒得查看文档以找出究竟添加了哪些页面——这有点像使用工具来做这件事的意义,不是吗?
我会给它一个4/10对于这个特定的问题,虽然对于其他一些小的改变,它会工作得很好,值得一个8/10(用户界面可能有点混乱)。
pdftotext
+diff
对于那些不知道的人来说,pdftotext 是 xpdf 集合的一部分,可以从这里获得:http://www.foolabs.com/xpdf/home.html。我在Ubuntu上使用的是Linux版本。
这比 (2) 效果更好,但连字符被替换为看起来像 UTF-8 符号的符号,如
fi
、ff
、ffl
等。引号也被弄乱了,再次被替换为 UTF 符号(写作时,我总是使用“正确的” TeX``
和''
引号)。但是,即使使用这样的组合,文本搜索也能完美运行。如果您最喜欢的文本编辑器可以理解和呈现 UTF-8,那么可读性会好得多,格式也会得到改善,尽管只是一点点。但是,连字符得到了处理,这非常好。但是有一件烦人的事情——页眉和页脚以及页码会进入文本文档,这在比较版本时可能会令人沮丧。这值得一个艰难的9/10,其中 UTF-8 符号混乱会被扣分,转换过程中的页眉和页脚问题也会被扣分(最后一个问题会导致很多“误报”
diff
)。
答案2
我会尝试pdftotext
比较这两个文本文件。如果文件主要都是文本,这种方法可能会奏效。为了比较文本文件,您可能需要一个比 diff 更高级的程序,因为两个文件中的换行符可能不同。我不确定该推荐什么。
答案3
Adobe Acrobat Pro 可以直接比较 PDF。该工具位于菜单中:文档->比较文档...
您可以选择是否包含或忽略仅格式、仅页眉/页脚等的更改。假设两个 PDF 都是使用相同的工作流程生成的(例如,都使用 pdflatex 但源文件的版本略有不同),这是相当好的。
每次我从存储库更新我的 latex 包时,我都会重新整理一些大型文档(例如我自己的论文和我下载的一些其他论文),并以此方式比较生成的 PDF,以查看是否有任何变化。这是一种发现 latex 包中模糊错误的好方法,这些错误会因某种原因更改换行符或间距。
答案4
如果你正在寻找小的变化,那么pdfpagediff可能对你有用。该软件包覆盖了两个 pdf 文件,让你可以轻松发现细微的变化。
如果两个版本存在显著差异,它就没有用处。