我想在已更改图表标签的文档上使用 latexdiff。有没有办法忽略命令ref
和的更改label
?以下是示例:
旧版本.tex
\documentclass{article}
\begin{document}
\begin{figure}
\caption{Caption}
\label{fig:my_label}
\end{figure}
\ref{fig:my_label}
\end{document}
新版本.tex
\documentclass{article}
\begin{document}
\begin{figure}
\caption{Caption}
\label{fig:my_new_label}
\end{figure}
\ref{fig:my_new_label}
\end{document}
在这两种情况下,\ref{...}
都会打印1
,即输出没有变化。我可以配置 latexdiff 来反映这一点吗?
我尝试过latexdiff --exclude-textcmd="ref" old_version.tex new_version.tex
,但它仍然将更改后的标签突出显示为更改:
\documentclass{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL old_version.tex Sun Jan 5 05:57:46 2020
%DIF ADD new_version.tex Sun Jan 5 05:58:01 2020
%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}
\begin{figure}
\caption{Caption}
\DIFdelbeginFL %DIFDELCMD < \label{fig:my_label}
%DIFDELCMD < %%%
\DIFdelendFL \DIFaddbeginFL \label{fig:my_new_label}
\DIFaddendFL \end{figure}
\DIFdelbegin \DIFdel{\ref{fig:my_label}
}\DIFdelend \DIFaddbegin \DIFadd{\ref{fig:my_new_label}
}\DIFaddend
\end{document}
答案1
您必须使用选项 --exclude-safecmd=ref
,而不是 --exclude-textcmd。textcmd 用于参数为文本的命令。请注意,您可以使用它--show-all
来获取安全和文本命令的默认设置列表。
答案2
这不是一个解决方案,而是一个针对我的情况的解决方法:我找到了凯特并使用以下模式用对新图形标签的引用替换每个出现的替换图形引用。
寻找: \\DIFdelbegin[ \t\n\r]*\\DIFdel\{[ \t\n\r]*\\ref\{fig:[a-zA-Z0-9_\:\-]*\}[ \t\n\r]*\}[ \t\n\r]*\\DIFdelend[ \t\n\r]*\\DIFaddbegin[ \t\n\r]*\\DIFadd\{[ \t\n\r]*\\ref\{fig:([a-zA-Z0-9_\:\-]*)\}[ \t\n\r]*\}[ \t\n\r]*\\DIFaddend
代替: \\ref{fig:\1}
(请注意 find-pattern 中的最后一个空格)。
所有这些[ \t\n\r]*
都在那里,因为latexdiff
会在随机位置产生换行符,并且至少我的 Kate 版本与换行符不匹配\s*
。