我有方程式来显示差异。不幸的是,它们包含 \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);