来自GPT,仅是个人笔记,别无他意!
如何比较 main.tex 的两个不同版本(旧版和新版),并生成一个带有修改标记(删除线、高亮、修订注释)的 PDF 或文本输出?
这个问题的标准解决方案是使用一个名为 latexdiff 的专用工具。latexdiff 能够智能地分析两个 LaTeX 源文件的差异,并生成一个全新的、可编译的 LaTeX 文件,其中包含了所有修改的视觉标记。
🛠 解决方案:使用 latexdiff 工具
latexdiff 不是一个 LaTeX 宏包,而是一个独立的命令行程序。它的工作原理是:
- 读取两个 .tex 文件(旧版和新版)。
- 逐行、逐词地进行比较。
- 生成一个新的 .tex 文件,这个文件包含了原始内容,并用特定的 LaTeX 命令标记出所有差异。
- 编译这个新生成的 .tex 文件,就能得到一份带有清晰修改标记的 PDF。
📋 详细操作步骤
第一步:安装 latexdiff
latexdiff 通常已经包含在主流的 LaTeX 发行版中。
TeX Live (Linux, macOS, Windows):
打开终端或命令提示符,输入:
bash
latexdiff --version
如果显示版本信息,说明已安装。
如果未安装,使用包管理器:tlmgr install latexdiff
MiKTeX (Windows):
打开 MiKTeX Console,搜索 latexdiff 并安装。
验证安装:
运行 latexdiff --help 应该能显示帮助信息。
第二步:准备你的两个版本文件
将 main.tex 的两个版本分别保存为两个独立的文件。例如:
main_old.tex (旧版本)
main_new.tex (新版本)
💡 提示:使用版本控制系统(如 Git)可以轻松管理这些版本。你可以用 git checkout main.tex 和 git checkout main.tex 来获取不同历史版本。
第三步:运行 latexdiff 命令
打开命令行(Terminal、Command Prompt 或 PowerShell),导航到你的 .tex 文件所在的目录,然后执行:
bash
latexdiff main_old.tex main_new.tex > diff_output.tex
命令解释:
latexdiff: 调用 latexdiff 程序。
main_old.tex: 旧版本文件名。
main_new.tex: 新版本文件名。
diff_output.tex: 将 latexdiff 的输出重定向并保存到一个新文件 diff_output.tex 中。
执行成功后,会在目录下看到一个名为 diff_output.tex 的新文件。
第四步:编译生成带标记的 PDF
现在,你需要像编译普通 LaTeX 文件一样编译 diff_output.tex。
bash
xelatex diff_output.tex
或者根据你的需求使用 pdflatex 或 lualatex
xelatex diff_output.tex
pdflatex diff_output.tex
lualatex diff_output.tex
可能需要运行两次 xelatex 命令来确保交叉引用和目录正确生成。
编译完成后,会生成 diff_output.pdf。
第五步:查看结果
打开 diff_output.pdf,你会看到:
被删除的内容:显示为带有 红色删除线 (\sout{...})。
新增的内容:显示为 蓝色背景高亮 (\DIFadd{...})。
修改过的内容:旧内容被删除线划掉,新内容被高亮显示,位置清晰对应。
格式和命令的变化:latexdiff 也能处理 LaTeX 命令的增删改,比如 \section 标题的修改。
🎨 自定义修改标记样式(可选)
latexdiff 提供了多种预设样式和自定义选项,让你可以改变标记的外观。
使用预设样式:
bash
用粗体代替高亮,删除线用波浪线
latexdiff --type=UNDERLINE main_old.tex main_new.tex > diff_output.tex
更紧凑的标记,适合大段修改
latexdiff --type=CLOSE main_old.tex main_new.tex > diff_output.tex
只用颜色标记,不加删除线或高亮
latexdiff --type=CHANGEBAR main_old.tex main_new.tex > diff_output.tex
自定义颜色:
可以在 diff_output.tex 的导言区找到 \definecolor 和 \DIFadd/\DIFdel 的定义,手动修改颜色。例如,把新增内容改成绿色:
latex
\definecolor{added}{rgb}{0,0.5,0} % 定义深绿色
\renewcommand{\DIFadd}[1]{{\protect\textcolor{added}{#1}}} % 应用绿色
📌 重要说明
- branch.tex 的角色:在这个流程中,branch.tex 是一个被包含的文件。latexdiff 比较的是你指定的两个 .tex 文件。如果你想比较 branch.tex 本身的修改,你应该直接比较 branch_old.tex 和 branch_new.tex。如果你修改了 main.tex 中的 \input{branch} 相关代码,latexdiff 也会标记出这些结构性的修改。
- 生成的是 .tex 文件,不是直接的 PDF:latexdiff 的输出是一个新的 LaTeX 源文件,你需要自己编译它才能得到 PDF。
- 处理复杂修改:对于非常复杂的修改(如重排段落、修改宏定义),latexdiff 的结果可能需要人工检查,但绝大多数情况下都非常准确。
✅ 总结
要比较 main.tex 的两个版本并生成带修改标记的输出,请使用 latexdiff 工具。
核心命令三步走:
- latexdiff old_version.tex new_version.tex > diff.tex
- xelatex diff.tex
- xelatex diff.tex (第二次运行以确保正确)
- 查看 diff.pdf
这是 LaTeX 社区公认的标准做法,高效、准确且功能强大。