latexdiff 实战:三步对比两个 LaTeX 文档的全部改动
【免费下载链接】latexdiffCompares two latex files and marks up significant differences between them. Releases on www.ctan.org and mirrors项目地址: https://gitcode.com/gh_mirrors/la/latexdiff
latexdiff 是用 Perl 写的命令行工具,专门对比两个 .tex 文件,把改动标记回 LaTeX 源码,编译后 PDF 里直接看到下划线和删除线的增删内容,不用人肉翻补丁。
它和系统自带 diff 差在哪
普通 diff 把 .tex 当纯文本处理,一行里只要变了一个词,整行就被标成不同,输出里塞满 \section、\begin 这类结构行,很难读。latexdiff 会解析 LaTeX 语法,把命令、参数、环境拆开处理:只改了表格里的一个词,标记就落在词本身,不会牵连整行。它还直接输出一份可编译的 .tex 文件,而不是一份补丁文件,省掉"看补丁"这个环节。
从零跑通:装好、对比、编译
仓库自带完整脚本,先克隆并装进 PATH:
git clone https://gitcode.com/gh_mirrors/la/latexdiff cd latexdiff make install装完用which latexdiff确认能查到路径,说明就绪。
然后对比两个文件,生成带标记的差异文档:
latexdiff example-old.tex example-new.tex > example-diff.tex输出仍是普通 .tex 文件,直接编译即可:
pdflatex example-diff.texPDF 里新增文字带下划线,删除的文字带下划线加删除线,改动一眼可见。
核心能力:它对比的三层内容
词级标记。改动被包进 \DIFadd 和 \DIFdel 两个命令,段落里只有真正变动的词被高亮;整段重写则整段标出,两种粒度自动切换。
公式与环境的特殊处理。数学环境有独立的标记粒度,小改动可精确到局部;导言区 \usepackage 的变化虽不影响正文,也会在源码里留下标记,不会被漏掉。
批量接受或拒绝改动。同捆的 latexrevise 脚本读取 diff 文件,accept 模式留下全部新增并清掉删除,decline 模式还原为旧版,不用手动一个个删标记。
标记样式与公式粒度:两个值得调的选项
默认是下划线样式,想改成粗体显示改动,加一个参数即可:
latexdiff --type=BOLD example-old.tex example-new.tex > example-diff.tex新增内容加粗、删除内容不显示,适合快速扫读。
公式标记默认是 coarse 粒度,整个公式环境只要动过就整体标出。只改一两个符号时,把粒度调到 fine 能精确到局部:
latexdiff --math-markup=fine old.tex new.tex > diff.tex只有公式内实际变化的部分被标记,整段公式不会连坐。
编译报错?两个高频问题的解法
现象:编译时报 Misplaced \noalign 或表格相关的错误。原因:默认的图片标记会给 \includegraphics 加蓝色边框,在某些浮动体环境里会冲突。解法:加--graphics-markup=none关掉图片标记,就能正常编译。
现象:对比老文档时乱码或直接报错。原因:latexdiff 默认按 utf8 读文件,而不少老文档是 latin1 编码。解法:加--encoding=latin1显式指定编码,输出就正常了。
写在最后
仓库根目录自带 example-draft.tex 和 example-rev.tex 一对示例,建议先拿它跑一遍完整流程,把下划线、删除线和公式标记都过目一遍。之后每次交稿前对上一版跑一次对比,改动记录就自动留下了。
【免费下载链接】latexdiffCompares two latex files and marks up significant differences between them. Releases on www.ctan.org and mirrors项目地址: https://gitcode.com/gh_mirrors/la/latexdiff
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考