某些情况下,latexdiff 生成的文件会包含多次定义的标签,这可能会导致编译错误。以下是示例:
旧文本
\documentclass{article}
\usepackage{amsmath}
\begin{document}
Two remarks on the marvelous formula.
\begin{equation}\label{eq:mass_energy}
E = mc^2
\end{equation}
\end{document}
新特克斯
\documentclass{article}
\usepackage{amsmath}
\usepackage{theorem}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}\label{thm:mass}
We have
\begin{equation}\label{eq:mass_energy}
E = mc^2
\end{equation}
\end{theorem}
Two remarks on the marvelous formula.
\end{document}
差异文本
\documentclass{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL old.tex Sun Dec 20 16:19:03 2020
%DIF ADD new.tex Sun Dec 20 16:21:10 2020
\usepackage{amsmath}
\usepackage{theorem} %DIF >
\newtheorem{theorem}{Theorem} %DIF >
%DIF PREAMBLE EXTENSION ADDED BY LATEXDIFF
%DIF UNDERLINE PREAMBLE %DIF PREAMBLE
\RequirePackage[normalem]{ulem} %DIF PREAMBLE
\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1} %DIF PREAMBLE
\providecommand{\DIFadd}[1]{{\protect\color{blue}\uwave{#1}}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}} %DIF PREAMBLE
%DIF SAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddbegin}{} %DIF PREAMBLE
\providecommand{\DIFaddend}{} %DIF PREAMBLE
\providecommand{\DIFdelbegin}{} %DIF PREAMBLE
\providecommand{\DIFdelend}{} %DIF PREAMBLE
\providecommand{\DIFmodbegin}{} %DIF PREAMBLE
\providecommand{\DIFmodend}{} %DIF PREAMBLE
%DIF FLOATSAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddFL}[1]{\DIFadd{#1}} %DIF PREAMBLE
\providecommand{\DIFdelFL}[1]{\DIFdel{#1}} %DIF PREAMBLE
\providecommand{\DIFaddbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFaddendFL}{} %DIF PREAMBLE
\providecommand{\DIFdelbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFdelendFL}{} %DIF PREAMBLE
%DIF LISTINGS PREAMBLE %DIF PREAMBLE
\RequirePackage{listings} %DIF PREAMBLE
\RequirePackage{color} %DIF PREAMBLE
\lstdefinelanguage{DIFcode}{ %DIF PREAMBLE
%DIF DIFCODE_UNDERLINE %DIF PREAMBLE
moredelim=[il][\color{red}\sout]{\%DIF\ <\ }, %DIF PREAMBLE
moredelim=[il][\color{blue}\uwave]{\%DIF\ >\ } %DIF PREAMBLE
} %DIF PREAMBLE
\lstdefinestyle{DIFverbatimstyle}{ %DIF PREAMBLE
language=DIFcode, %DIF PREAMBLE
basicstyle=\ttfamily, %DIF PREAMBLE
columns=fullflexible, %DIF PREAMBLE
keepspaces=true %DIF PREAMBLE
} %DIF PREAMBLE
\lstnewenvironment{DIFverbatim}{\lstset{style=DIFverbatimstyle}}{} %DIF PREAMBLE
\lstnewenvironment{DIFverbatim*}{\lstset{style=DIFverbatimstyle,showspaces=true}}{} %DIF PREAMBLE
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF
\begin{document}
\DIFaddbegin
\begin{theorem}\label{thm:mass}
\DIFadd{We have
}\begin{equation}\DIFadd{\label{eq:mass_energy}
E = mc^2
}\end{equation}
\end{theorem}
\DIFaddend Two remarks on the marvelous formula.
\DIFdelbegin %DIFDELCMD <
%DIFDELCMD < %%%
\begin{displaymath}\DIFdel{\label{eq:mass_energy}
E = mc^2
}\end{displaymath}%DIFAUXCMD
%DIFDELCMD < %%%
\DIFdelend\end{document}
如您所见,问题在于\label
包含在 的范围内。我尝试按照建议\DIFdel
添加选项--exclude-safecmd=label
这里,但这没有帮助。我该如何避免这个问题?
更新
我正在使用命令
latexdiff old.tex new.tex > diff.tex
使用 LATEXDIFF 1.3.1.1(Algorithm::Diff 1.15,Perl v5.30.1)。
答案1
您的 diff 文件不完整,如果我运行,latex diff old.tex new.tex
我会得到一个不同的格式,但不会出错,所以很难测试,但我认为如果您的 preampbe 有
\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}} %DIF PREAMBLE
您可以将其更改为
\providecommand{\DIFdel}[1]{{\def\label##1{}\protect\color{red}\sout{#1}}} %DIF PREAMBLE
禁用已删除区域中的标签。