Cách loại trừ lệnh nhãn trong latexdiff
Trong một số trường hợp, tệp do latexdiff tạo ra sẽ chứa các nhãn do nhiều nhân xác định, điều này có thể gây ra lỗi biên dịch. Dưới đây là một ví dụ:
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]{{\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}
Như bạn có thể thấy, vấn đề là nó \labelđược bao gồm trong phạm vi của \DIFdel. Tôi đã cố gắng thêm tùy chọn --exclude-safecmd=labelnhư được đề xuất ở đây , nhưng không giúp được gì. Làm cách nào để tránh vấn đề này?
Cập nhật
Tôi đang sử dụng lệnh
latexdiff old.tex new.tex > diff.tex
với LATEXDIFF 1.3.1.1 (Thuật toán :: Diff 1.15 so, Perl v5.30.1).
Trả lời
Tệp khác biệt của bạn chưa hoàn chỉnh và nếu tôi chạy, latex diff old.tex new.textôi nhận được một định dạng khác không bị lỗi, rất khó để kiểm tra nhưng tôi cho rằng nếu preampbe của bạn có
\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}} %DIF PREAMBLE
Bạn có thể thay đổi điều đó thành
\providecommand{\DIFdel}[1]{{\def\label##1{}\protect\color{red}\sout{#1}}} %DIF PREAMBLE
để tắt các nhãn trong các vùng đã xóa.