TeX - LaTeX Asked by Ray30 on July 18, 2021
In some cases, the file produced by latexdiff will contain multiply-defined labels, which may cause compile error. Below is an example:
old.tex
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}
new.tex
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}
diff.tex
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]{{protectcolor{blue}uwave{#1}}} %DIF PREAMBLE
providecommand{DIFdel}[1]{{protectcolor{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 < %%%
DIFdelendend{document}
As you can see, the problem is that label
is included in the scope of DIFdel
. I tried to add the option --exclude-safecmd=label
as suggested here, but it doesn’t help. How can I avoid this issue?
Update
I am using the command
latexdiff old.tex new.tex > diff.tex
with LATEXDIFF 1.3.1.1 (Algorithm::Diff 1.15 so, Perl v5.30.1).
Your diff file is incomplete and if I run latex diff old.tex new.tex
I get a different format which does not error, so hard to test but I assume that if your preampbe has
providecommand{DIFdel}[1]{{protectcolor{red}sout{#1}}} %DIF PREAMBLE
You could change that to
providecommand{DIFdel}[1]{{deflabel##1{}protectcolor{red}sout{#1}}} %DIF PREAMBLE
to disable lables in deleted regions.
Correct answer by David Carlisle on July 18, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP