TransWikia.com

How to exclude label command in latexdiff

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).

One Answer

Your diff file is incomplete and if I run latex diff old.tex new.texI 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP