使用 latexdiff 突出显示变化:灵魂的替代品?

使用 latexdiff 突出显示变化:灵魂的替代品?

我在用latexdiff创建一个 pdf,突出显示两个 .tex 之间的变化以及hg diff 乳胶,以便与 Mercurial 一起使用。

然而,问题是删除线格式(它使内容更容易阅读)似乎在多个段落下中断。这一点被指出这个 SE 问题没有得到回答作者:@levesque。

给出了解决办法这里@Keks Dose 建议人们

\providecommand{\DIFadd}[1]{{\protect\color{blue}#1}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\protect\scriptsize{#1}}}

到文件的前言中。这会将 scriptsize 中的删除线突出显示替换为红色文本。虽然这似乎有效,但问题是它不是一个非常有吸引力的解决方案。

现在距离最初的问题已经过去了 2-3 年,有没有办法解决使用损坏的 \sout 和 latexdiff 组合的问题?如果没有,有没有办法更好地突出显示文本?


这是一个简单的例子:

创建文件testdiff1.tex

\documentclass{article}

\begin{document}
\section{Introduction}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sit amet scelerisque diam, at eleifend dolor. Aliquam id neque placerat, posuere quam vitae, vulputate mauris. Morbi eu aliquam quam, ut posuere mauris. Vestibulum sit amet nisl felis. Proin in felis mauris. Etiam sed egestas velit. Donec pellentesque hendrerit lacus, in rhoncus dolor dignissim condimentum. Nullam sagittis tellus a hendrerit interdum. Duis risus est, semper eu feugiat posuere, interdum sit amet ante. Etiam porta enim quis quam imperdiet suscipit. Donec vel egestas quam, sit amet ullamcorper orci.

Vivamus in augue sit amet erat viverra bibendum at at eros. Donec dignissim aliquet mauris, non pellentesque odio luctus eu. Nunc placerat, sem in hendrerit placerat, risus leo aliquet quam, id tincidunt leo augue vel nisl. Phasellus pharetra felis vitae metus laoreet bibendum. Integer vitae ultricies libero. Proin egestas cursus justo. Ut viverra leo non nunc condimentum suscipit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi suscipit malesuada ultricies. Aliquam a tempor lorem, quis varius lorem. Morbi aliquet dignissim est. Nulla et nibh vel ligula consectetur laoreet quis at neque.

Mauris ornare leo vel sem feugiat lacinia. Mauris placerat tortor eget felis pharetra, quis eleifend odio malesuada. Ut non interdum purus. Donec auctor ante sed erat iaculis convallis. Aliquam convallis laoreet erat, et placerat dolor. Nunc condimentum neque dui, eget malesuada orci bibendum eget. Ut a odio interdum, ullamcorper tellus eget, vehicula orci. Sed congue sem non diam tristique, id sagittis ante congue. Praesent sagittis mi vitae ligula faucibus, et pellentesque eros auctor. Nunc erat est, vehicula eu risus in, semper tincidunt augue. Nam eu eleifend felis, quis dictum urna. Vestibulum eget purus vel lectus tempor ultrices sit amet in ligula. Suspendisse et libero a turpis volutpat vestibulum sit amet porttitor dolor. Etiam pellentesque pretium massa, a vehicula mi ullamcorper quis. Morbi eros nunc, semper quis augue porttitor, posuere interdum tellus.

Vestibulum ultrices vel nibh non consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla in mollis eros, in iaculis magna. Vestibulum fermentum non sem nec laoreet. Maecenas sit amet sapien metus. Maecenas consectetur gravida ornare. Nam vel risus nec turpis rutrum viverra ut et augue.

Quisque mattis, libero nec dictum pretium, mauris libero interdum erat, eu pulvinar turpis velit ac velit. Phasellus tempor orci quis aliquet tincidunt. Fusce pharetra, lorem a pellentesque pulvinar, ante ipsum pellentesque quam, et porttitor odio orci ut ligula. Donec ullamcorper eros et fringilla sodales. Curabitur faucibus dui sed ipsum tincidunt congue. Maecenas vel egestas mauris. Proin augue nisi, rutrum et consequat nec, fringilla sed lacus. Phasellus vitae vulputate velit. Nunc ut luctus mi. 
\end{document}

现在创建一个文件testdiff2.tex

\documentclass{article}

\begin{document}
\section{Introduction}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sit amet scelerisque diam, at eleifend dolor. Aliquam id neque placerat, posuere quam vitae, vulputate mauris. Morbi eu aliquam quam, ut posuere mauris. Vestibulum sit amet nisl felis. Proin in felis mauris. Etiam sed egestas velit. Donec pellentesque hendrerit lacus, in rhoncus dolor dignissim condimentum. Nullam sagittis tellus a hendrerit interdum. Duis risus est, semper eu feugiat posuere, interdum sit amet ante. Etiam porta enim quis quam imperdiet suscipit. Donec vel egestas quam, sit amet ullamcorper orci.


Mauris ornare leo vel sem feugiat lacinia. Mauris placerat tortor eget felis pharetra, quis eleifend odio malesuada. Ut non interdum purus. Donec auctor ante sed erat iaculis convallis. Aliquam convallis laoreet erat, et placerat dolor. Nunc erat est, vehicula eu risus in, semper tincidunt augue. Nam eu eleifend felis, quis dictum urna. Vestibulum eget purus vel lectus tempor ultrices sit amet in ligula. Suspendisse et libero a turpis volutpat vestibulum sit amet porttitor dolor. Etiam pellentesque pretium massa, a vehicula mi ullamcorper quis. Morbi eros nunc, semper quis augue porttitor, posuere interdum tellus. Inserting a new sentence here. Quisque nisi nisl, malesuada at convallis ac, condimentum ac nulla. Suspendisse tempus quam id commodo laoreet. Maecenas vitae diam ornare, vehicula est id, ultricies justo. Quisque a felis ipsum. Mauris suscipit tincidunt enim nec auctor. Nam sem ipsum, sodales ut sollicitudin ut, adipiscing at metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut nulla ac lectus malesuada rhoncus. Vestibulum eget felis lacus. Etiam at erat nec est iaculis cursus. 

Vestibulum ultrices vel nibh non consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla in mollis eros, in iaculis magna. Vestibulum fermentum non sem nec laoreet. Maecenas sit amet sapien metus. Maecenas consectetur gravida ornare. Nam vel risus nec turpis rutrum viverra ut et augue.

Quisque mattis, libero nec dictum pretium, mauris libero interdum erat, eu pulvinar turpis velit ac velit. Phasellus tempor orci quis aliquet tincidunt. Fusce pharetra, lorem a pellentesque pulvinar, ante ipsum pellentesque quam, et porttitor odio orci ut ligula. Curabitur faucibus dui sed ipsum tincidunt congue. Maecenas vel egestas mauris. Proin augue nisi, rutrum et consequat nec, fringilla sed lacus. Phasellus vitae vulputate velit. Nunc ut luctus mi. 
\end{document}

称呼

latexdiff testdiff1.tex testdiff2.tex > diff.tex

输出diff.tex将包含

%DIF 1a1-12
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL testdiff1.tex   Sun Oct 13 18:36:20 2013
%DIF ADD testdiff2.tex   Sun Oct 13 18:36:21 2013
% This is file JFM2esam.tex
 %DIF > 
% first release v1.0, 20th October 1996
 %DIF > 
%       release v1.01, 29th October 1996
 %DIF > 
%       release v1.1, 25th June 1997
 %DIF > 
%       release v2.0, 27th July 2004
 %DIF > 
%   (based on JFMsampl.tex v1.3 for LaTeX2.09)
 %DIF > 
% Copyright (C) 1996, 1997 Cambridge University Press
 %DIF > 
 %DIF > 
%\NeedsTeXFormat{LaTeX2e}
 %DIF > 
 %DIF > 
%\documentclass{jfm}
 %DIF > 
%\usepackage{natbib}
 %DIF > 
%DIF -------
\documentclass{article}

%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
%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 END PREAMBLE EXTENSION ADDED BY LATEXDIFF

\begin{document}


\section{Introduction}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sit amet scelerisque diam, at eleifend dolor. Aliquam id neque placerat, posuere quam vitae, vulputate mauris. Morbi eu aliquam quam, ut posuere mauris. Vestibulum sit amet nisl felis. Proin in felis mauris. Etiam sed egestas velit. Donec pellentesque hendrerit lacus, in rhoncus dolor dignissim condimentum. Nullam sagittis tellus a hendrerit interdum. Duis risus est, semper eu feugiat posuere, interdum sit amet ante. Etiam porta enim quis quam imperdiet suscipit. Donec vel egestas quam, sit amet ullamcorper orci.


\DIFdelbegin \DIFdel{Vivamus in augue sit amet erat viverra bibendum at at eros. Donec dignissim aliquet mauris, non pellentesque odio luctus eu. Nunc placerat, sem in hendrerit placerat, risus leo aliquet quam, id tincidunt leo augue vel nisl. Phasellus pharetra felis vitae metus laoreet bibendum. Integer vitae ultricies libero. Proin egestas cursus justo. Ut viverra leo non nunc condimentum suscipit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi suscipit malesuada ultricies. Aliquam a tempor lorem, quis varius lorem. Morbi aliquet dignissim est. Nulla et nibh vel ligula consectetur laoreet quis at neque.

}%DIFDELCMD < 

%DIFDELCMD < %%%
\DIFdelend Mauris ornare leo vel sem feugiat lacinia. Mauris placerat tortor eget felis pharetra, quis eleifend odio malesuada. Ut non interdum purus. Donec auctor ante sed erat iaculis convallis. Aliquam convallis laoreet erat, et placerat dolor. Nunc \DIFdelbegin \DIFdel{condimentum neque dui, eget malesuada orci bibendum eget. Ut a odio interdum, ullamcorper tellus eget, vehicula orci. Sed congue sem non diam tristique, id sagittis ante congue. Praesent sagittis mi vitae ligula faucibus, et pellentesque eros auctor. Nunc }\DIFdelend erat est, vehicula eu risus in, semper tincidunt augue. Nam eu eleifend felis, quis dictum urna. Vestibulum eget purus vel lectus tempor ultrices sit amet in ligula. Suspendisse et libero a turpis volutpat vestibulum sit amet porttitor dolor. Etiam pellentesque pretium massa, a vehicula mi ullamcorper quis. Morbi eros nunc, semper quis augue porttitor, posuere interdum tellus. \DIFaddbegin \DIFadd{Inserting a new sentence here. Quisque nisi nisl, malesuada at convallis ac, condimentum ac nulla. Suspendisse tempus quam id commodo laoreet. Maecenas vitae diam ornare, vehicula est id, ultricies justo. Quisque a felis ipsum. Mauris suscipit tincidunt enim nec auctor. Nam sem ipsum, sodales ut sollicitudin ut, adipiscing at metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut nulla ac lectus malesuada rhoncus. Vestibulum eget felis lacus. Etiam at erat nec est iaculis cursus. 

}\DIFaddend 

Vestibulum ultrices vel nibh non consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla in mollis eros, in iaculis magna. Vestibulum fermentum non sem nec laoreet. Maecenas sit amet sapien metus. Maecenas consectetur gravida ornare. Nam vel risus nec turpis rutrum viverra ut et augue.

Quisque mattis, libero nec dictum pretium, mauris libero interdum erat, eu pulvinar turpis velit ac velit. Phasellus tempor orci quis aliquet tincidunt. Fusce pharetra, lorem a pellentesque pulvinar, ante ipsum pellentesque quam, et porttitor odio orci ut ligula\DIFdelbegin \DIFdel{. Donec ullamcorper eros et fringilla sodales}\DIFdelend . Curabitur faucibus dui sed ipsum tincidunt congue. Maecenas vel egestas mauris. Proin augue nisi, rutrum et consequat nec, fringilla sed lacus. Phasellus vitae vulputate velit. Nunc ut luctus mi. 
\end{document}

该错误与注释前插入的空行有关%DIFDELCMD <。删除这些空行后,即可编译。如果不删除,则无法编译。

正如旧帖子中指出的那样,我们如何在不手动操作的情况下解决这个问题?

答案1

正如链接问题所示,我没有收到 soul 和\ststrikeout 命令的错误。我只是将生成的文件编辑成如下形式

\usepackage{soul}
%\RequirePA%ackage[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}\ul{#1}}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\st{#1}}}   

在此处输入图片描述


在全:

\documentclass{article}

\listfiles
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL testdiff.tex    Sun Oct 13 18:46:33 2013
%DIF ADD testdiff2.tex   Sun Oct 13 18:46:18 2013


%DIF PREAMBLE EXTENSION ADDED BY LATEXDIFF
%DIF UNDERLINE PREAMBLE %DIF PREAMBLE
\usepackage{soul}
%\RequirePA%ackage[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}\ul{#1}}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\st{#1}}}                      %DIF PREAMBLE
%DIF SAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddbegin}{} %DIF PREAMBLE
\providecommand{\DIFaddend}{} %DIF PREAMBLE
\providecommand{\DIFdelbegin}{} %DIF PREAMBLE
\providecommand{\DIFdelend}{} %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 END PREAMBLE EXTENSION ADDED BY LATEXDIFF

\begin{document}

\section{Introduction}


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sit amet scelerisque diam, at eleifend dolor. Aliquam id neque placerat, posuere quam vitae, vulputate mauris. Morbi eu aliquam quam, ut posuere mauris. Vestibulum sit amet nisl felis. Proin in felis mauris. Etiam sed egestas velit. Donec pellentesque hendrerit lacus, in rhoncus dolor dignissim condimentum. Nullam sagittis tellus a hendrerit interdum. Duis risus est, semper eu feugiat posuere, interdum sit amet ante. Etiam porta enim quis quam imperdiet suscipit. Donec vel egestas quam, sit amet ullamcorper orci.




\DIFdelbegin \DIFdel{Vivamus in augue sit amet erat viverra bibendum at at eros. Donec dignissim aliquet mauris, non pellentesque odio luctus eu. Nunc placerat, sem in hendrerit placerat, risus leo aliquet quam, id tincidunt leo augue vel nisl. Phasellus pharetra felis vitae metus laoreet bibendum. Integer vitae ultricies libero. Proin egestas cursus justo. Ut viverra leo non nunc condimentum suscipit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi suscipit malesuada ultricies. Aliquam a tempor lorem, quis varius lorem. Morbi aliquet dignissim est. Nulla et nibh vel ligula consectetur laoreet quis at neque.


}%DIFDELCMD < 

%DIFDELCMD < %%%
\DIFdelend Mauris ornare leo vel sem feugiat lacinia. Mauris placerat tortor eget felis pharetra, quis eleifend odio malesuada. Ut non interdum purus. Donec auctor ante sed erat iaculis convallis. Aliquam convallis laoreet erat, et placerat dolor. Nunc \DIFdelbegin \DIFdel{condimentum neque dui, eget malesuada orci bibendum eget. Ut a odio interdum, ullamcorper tellus eget, vehicula orci. Sed congue sem non diam tristique, id sagittis ante congue. Praesent sagittis mi vitae ligula faucibus, et pellentesque eros auctor. Nunc }\DIFdelend erat est, vehicula eu risus in, semper tincidunt augue. Nam eu eleifend felis, quis dictum urna. Vestibulum eget purus vel lectus tempor ultrices sit amet in ligula. Suspendisse et libero a turpis volutpat vestibulum sit amet porttitor dolor. Etiam pellentesque pretium massa, a vehicula mi ullamcorper quis. Morbi eros nunc, semper quis augue porttitor, posuere interdum tellus. \DIFaddbegin \DIFadd{Inserting a new sentence here. Quisque nisi nisl, malesuada at convallis ac, condimentum ac nulla. Suspendisse tempus quam id commodo laoreet. Maecenas vitae diam ornare, vehicula est id, ultricies justo. Quisque a felis ipsum. Mauris suscipit tincidunt enim nec auctor. Nam sem ipsum, sodales ut sollicitudin ut, adipiscing at metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut nulla ac lectus malesuada rhoncus. Vestibulum eget felis lacus. Etiam at erat nec est iaculis cursus. 


}\DIFaddend 

Vestibulum ultrices vel nibh non consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla in mollis eros, in iaculis magna. Vestibulum fermentum non sem nec laoreet. Maecenas sit amet sapien metus. Maecenas consectetur gravida ornare. Nam vel risus nec turpis rutrum viverra ut et augue.


Quisque mattis, libero nec dictum pretium, mauris libero interdum erat, eu pulvinar turpis velit ac velit. Phasellus tempor orci quis aliquet tincidunt. Fusce pharetra, lorem a pellentesque pulvinar, ante ipsum pellentesque quam, et porttitor odio orci ut ligula\DIFdelbegin \DIFdel{. Donec ullamcorper eros et fringilla sodales}\DIFdelend . Curabitur faucibus dui sed ipsum tincidunt congue. Maecenas vel egestas mauris. Proin augue nisi, rutrum et consequat nec, fringilla sed lacus. Phasellus vitae vulputate velit. Nunc ut luctus mi. 

\end{document}

其中\listfiles产生:

 *File List*
 article.cls    2007/10/19 v1.4h Standard LaTeX document class
  size10.clo    2007/10/19 v1.4h Standard LaTeX file (size option)
    soul.sty    2003/11/17 v2.4 letterspacing/underlining (mf)
   color.sty    2005/11/14 v1.0j Standard LaTeX Color (DPC)
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
  pdftex.def    2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/error messages (HO)
 ltxcmds.sty    2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
supp-pdf.mkii
 ***********

如果你也需要数学模式,你可以这样做

\providecommand{\DIFadd}[1]{{\protect\color{blue}%
 \ifmmode#1\else\ul{#1}\fi}} 

如果是数学题,则只显示颜色,不显示下划线,或者

\providecommand{\DIFadd}[1]{{\protect\color{blue}%
\ifmmode\hbox{\ul{{\mbox{$#1$}}}}\else\ul{#1}\fi}}

它强调但不太注意保留数学最初是处于显示模式还是下标模式(它总是使用内联数学样式来设置它)

它可以变得更智能,并且大概也需要对 DIFdel 变体进行处理,但其中任何一个都可以与您的测试文件一起使用,如注释中修改的那样。

相关内容