latexdiff 破碎 \frac

latexdiff 破碎 \frac

我有方程式来显示差异。不幸的是,它们包含 \frac。即使在 --math-markup=1 时,这些方程式也会被分解。有什么办法可以解决这个问题吗?例如我有:

\begin{equation}
0.5  = \frac {1} {2}
\end{equation}

更改为:

\begin{equation}
0.3  = \frac {10} {30}
\end{equation}

我得到:

\DIFdelbegin \MATHBLOCKdisplaymath{
\DIFdel{0.5  = \frac }{\DIFdel{1}} {\DIFdel{2}}
}
%DIFAUXCMD
\DIFdelend \DIFaddbegin \begin{equation}
\DIFadd{0.3  = \frac }{\DIFadd{10}} {\DIFadd{30}}
\end{equation}
\DIFaddend 

这给了我:

l.40 \DIFdel{0.5  = \frac }
                           {\DIFdel{1}} {\DIFdel{2}}
? 
Runaway argument?

我尝试了 --config "MATHENV=equation",结果显示:

\DIFdelbegin \MATHBLOCKdisplaymath{
\DIFdel{0.5  = \frac }{\DIFdel{1}} {\DIFdel{2}}
}
%DIFAUXCMD
\DIFdelend \DIFaddbegin \begin{equation}
\DIFadd{0.3  = \frac }{\DIFadd{10}} {\DIFadd{30}}
\end{equation}
\DIFaddend 

编译时:!未定义的控制序列。l.39 \DIFdelbegin \MATHBLOCKdisplaymath {?!缺少{插入。

答案1

问题是由 \frac 命令及其参数之间的空格引起的。您可以使用选项--allow-spaces,它将忽略命令及其参数之间的空格(由花括号识别)。不过,这可能会产生副作用,因为有时如果块出现在无参数命令之后,此选项可能会导致不适当的关联。

答案2

我还创建了一个 Perl 脚本来处理这些问题:

#!/usr/bin/perl


use strict;
use warnings;

my $inBlockDel=0;
my $inBlockAdd=0;

open(FILE,$ARGV[0]) or die "cannot open ".$ARGV[0];
while(my $line = <FILE>){
  chomp($line);
  if($line =~ /^\\DIFdelbegin \%DIFDELCMD < \\begin{equation}/){
    print " \\begin{displaymath}\n \\DIFdel{";

    $inBlockDel=1;
  }elsif($inBlockDel>0 &&
     $line =~ /^\%DIFDELCMD < \\end{equation}/){
    print "";

    $inBlockDel=0;
    print "} \\end{displaymath} \n";

  }elsif($inBlockDel!=0 ){

    if($line =~ /^\%DIFDELCMD/){
        print " ".substr($line,12)." \n";
    }else{
      print " ".$line." \n";
    }


    $inBlockDel+=1;
  }elsif($line =~ /^\\DIFdelend \\DIFaddbegin \\begin{equation}/){
    $inBlockAdd=1;


    print "\\DIFaddbegin\n\\begin{equation} \\DIFadd{  \n";
  }elsif($inBlockAdd>0 &&
     $line =~ /^\\end{equation}/){
    print " } \\end{equation} \n";
    $inBlockAdd=0;
  }elsif($inBlockAdd!=0 ){
    if($inBlockAdd==1){
      print " ".$line." \n";
    }else{
      print " ".$line." \n";
    }
    $inBlockAdd+=1;
  }else{
    print $line."\n";
  }


}
close(FILE);

相关内容