|
|
feca7cd |
diff -up ./latexdiff.pl.orig ./latexdiff.pl
|
|
|
feca7cd |
--- ./latexdiff.pl.orig 2015-12-28 19:15:33.000000000 -0500
|
|
|
feca7cd |
+++ ./latexdiff.pl 2016-06-22 15:46:24.444571914 -0400
|
|
|
feca7cd |
@@ -1465,7 +1465,7 @@ sub flatten {
|
|
|
feca7cd |
$bblfile=~s/\.tex$//;
|
|
|
feca7cd |
$bblfile.=".bbl";
|
|
|
feca7cd |
|
|
|
feca7cd |
- if ( ($includeonly) = ($preamble =~ m/\\includeonly{(.*?)}/ ) ) {
|
|
|
feca7cd |
+ if ( ($includeonly) = ($preamble =~ m/\\includeonly\{(.*?)}/ ) ) {
|
|
|
feca7cd |
$includeonly =~ s/,/|/g;
|
|
|
feca7cd |
} else {
|
|
|
feca7cd |
$includeonly = '.*?';
|
|
|
feca7cd |
@@ -1474,7 +1474,7 @@ sub flatten {
|
|
|
feca7cd |
print STDERR "DEBUG: includeonly $includeonly\n" if $debug;
|
|
|
feca7cd |
|
|
|
feca7cd |
# recursively replace \\input and \\include files
|
|
|
feca7cd |
- 1 while $text=~s/(^(?:[^%\n]|\\%)*)\\input{(.*?)}|\\include{(${includeonly}(?:\.tex)?)}/{
|
|
|
feca7cd |
+ 1 while $text=~s/(^(?:[^%\n]|\\%)*)\\input\{(.*?)}|\\include\{(${includeonly}(?:\.tex)?)}/{
|
|
|
feca7cd |
$begline=(defined($1)? $1 : "") ;
|
|
|
feca7cd |
$fname = $2 if defined($2) ;
|
|
|
feca7cd |
$fname = $3 if defined($3) ;
|
|
|
feca7cd |
@@ -1491,7 +1491,7 @@ sub flatten {
|
|
|
feca7cd |
"$begline$newpage$replacement$newpage";
|
|
|
feca7cd |
}/exgm;
|
|
|
feca7cd |
# replace bibliography with bbl file if it exists
|
|
|
feca7cd |
- $text=~s/(^(?:[^%\n]|\\%)*)\\bibliography{(.*?)}/{
|
|
|
feca7cd |
+ $text=~s/(^(?:[^%\n]|\\%)*)\\bibliography\{(.*?)}/{
|
|
|
feca7cd |
if ( -f $bblfile ){
|
|
|
feca7cd |
$replacement=read_file_with_encoding(File::Spec->catfile($bblfile), $encoding);
|
|
|
feca7cd |
} else {
|
|
|
feca7cd |
@@ -1502,7 +1502,7 @@ sub flatten {
|
|
|
feca7cd |
"$begline$replacement";
|
|
|
feca7cd |
}/exgm;
|
|
|
feca7cd |
# replace subfile with contents (subfile package)
|
|
|
feca7cd |
- $text=~s/(^(?:[^%\n]|\\%)*)\\subfile{(.*?)}/{
|
|
|
feca7cd |
+ $text=~s/(^(?:[^%\n]|\\%)*)\\subfile\{(.*?)}/{
|
|
|
feca7cd |
$begline=(defined($1)? $1 : "") ;
|
|
|
feca7cd |
$fname = $2;
|
|
|
feca7cd |
# # add tex extension unless there is a three letter extension already
|
|
|
feca7cd |
@@ -2244,7 +2244,7 @@ sub take_comments_and_enter_from_frac()
|
|
|
feca7cd |
sub preprocess {
|
|
|
feca7cd |
for (@_) {
|
|
|
feca7cd |
# Change \{ to \QLEFTBRACE, \} to \QRIGHTBRACE, and \& to \AMPERSAND
|
|
|
feca7cd |
- s/(?
|
|
|
feca7cd |
+ s/(?
|
|
|
feca7cd |
s/(?
|
|
|
feca7cd |
s/(?
|
|
|
feca7cd |
# replace {,} in comments with \\CLEFTBRACE,\\CRIGHTBRACE
|
|
|
feca7cd |
@@ -2258,29 +2258,29 @@ sub preprocess {
|
|
|
feca7cd |
s/\\begin\{(verbatim\*?)\}(.*?)\\end\{\1\}/"\\${1}{". tohash(\%verbhash,"${2}") . "}"/esg;
|
|
|
feca7cd |
# Convert _n or _\cmd into \SUBSCRIPTNB{n} or \SUBSCRIPTNB{\cmd} and _{nnn} into \SUBSCRIPT{nn}
|
|
|
feca7cd |
1 while s/(?
|
|
|
feca7cd |
- 1 while s/(?
|
|
|
feca7cd |
+ 1 while s/(?
|
|
|
feca7cd |
# Convert ^n into \SUPERSCRIPTNB{n} and ^{nnn} into \SUPERSCRIPT{nn}
|
|
|
feca7cd |
1 while s/(?
|
|
|
feca7cd |
- 1 while s/(?
|
|
|
feca7cd |
+ 1 while s/(?
|
|
|
feca7cd |
# Convert \sqrt{n} into \SQRT{n} and \sqrt nn into SQRTNB{nn}
|
|
|
feca7cd |
1 while s/(?
|
|
|
feca7cd |
- 1 while s/(?
|
|
|
feca7cd |
+ 1 while s/(?
|
|
|
feca7cd |
# Convert $$ $$ into \begin{DOLLARDOLLAR} \end{DOLLARDOLLAR}
|
|
|
feca7cd |
s/\$\$(.*?)\$\$/\\begin{DOLLARDOLLAR}$1\\end{DOLLARDOLLAR}/sg;
|
|
|
feca7cd |
# Convert \[ \] into \begin{SQUAREBRACKET} \end{SQUAREBRACKET}
|
|
|
feca7cd |
s/(?
|
|
|
feca7cd |
s/\\\]/\\end{SQUAREBRACKET}/sg;
|
|
|
feca7cd |
# Convert all picture environmentent (\begin{PICTUREENV} .. \end{PICTUREENV} \PICTUREBLOCKenv
|
|
|
feca7cd |
- s/\\begin{($PICTUREENV)}(.*?)\\end{\1}/\\PICTUREBLOCK$1\{$2\}/sg;
|
|
|
feca7cd |
+ s/\\begin\{($PICTUREENV)}(.*?)\\end\{\1}/\\PICTUREBLOCK$1\{$2\}/sg;
|
|
|
feca7cd |
# For --block-math-markup option -convert all \begin{MATH} .. \end{MATH}
|
|
|
feca7cd |
# into \MATHBLOCKMATH{...} commands, where MATH is any valid math environment
|
|
|
feca7cd |
# Also convert all array environments into ARRAYBLOCK environments
|
|
|
feca7cd |
if ( $mathmarkup != FINE ) {
|
|
|
feca7cd |
- s/\\begin{($ARRENV)}(.*?)\\end{\1}/\\ARRAYBLOCK$1\{$2\}/sg;
|
|
|
feca7cd |
+ s/\\begin\{($ARRENV)}(.*?)\\end\{\1}/\\ARRAYBLOCK$1\{$2\}/sg;
|
|
|
feca7cd |
|
|
|
feca7cd |
take_comments_and_enter_from_frac();
|
|
|
feca7cd |
|
|
|
feca7cd |
- s/\\begin{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end{\1}/\\MATHBLOCK$1\{$2\}/sg;
|
|
|
feca7cd |
+ s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/\\MATHBLOCK$1\{$2\}/sg;
|
|
|
feca7cd |
}
|
|
|
feca7cd |
# add final token " STOP"
|
|
|
feca7cd |
$_ .= " STOP"
|
|
|
feca7cd |
@@ -2566,15 +2566,15 @@ sub postprocess {
|
|
|
feca7cd |
# environments) are between the \begin{$MATHENV} and \end{MATHMODE} commands. This is necessary as the minimal matching
|
|
|
feca7cd |
# is not globally minimal but only 'locally' (matching is beginning from the left side of the string)
|
|
|
feca7cd |
if ( $mathmarkup == FINE ) {
|
|
|
feca7cd |
- 1 while s/\\begin{((?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}((?:.(?!(?:\\end{(?:(?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}|\\begin{MATHMODE})))*?)\\end{MATHMODE}/\\begin{$1}$2\\end{$1}/s;
|
|
|
feca7cd |
- 1 while s/\\begin{MATHMODE}((?:.(?!\\end{MATHMODE}))*?)\\end{((?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}/\\begin{$2}$1\\end{$2}/s;
|
|
|
feca7cd |
- # convert remaining \begin{MATHMODE} \end{MATHMODE} (and not containing & or \\ )into MATHREPL environments
|
|
|
feca7cd |
- s/\\begin{MATHMODE}((?:(.(?!(?
|
|
|
feca7cd |
+ 1 while s/\\begin\{((?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}((?:.(?!(?:\\end\{(?:(?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}|\\begin\{MATHMODE})))*?)\\end\{MATHMODE}/\\begin{$1}$2\\end{$1}/s;
|
|
|
feca7cd |
+ 1 while s/\\begin\{MATHMODE}((?:.(?!\\end\{MATHMODE}))*?)\\end\{((?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}/\\begin{$2}$1\\end{$2}/s;
|
|
|
feca7cd |
+ # convert remaining \begin\{MATHMODE} \end{MATHMODE} (and not containing & or \\ )into MATHREPL environments
|
|
|
feca7cd |
+ s/\\begin\{MATHMODE}((?:(.(?!(?
|
|
|
feca7cd |
# others into MATHARRREPL
|
|
|
feca7cd |
- s/\\begin{MATHMODE}(.*?)\\end{MATHMODE}/\\begin{$MATHARRREPL}$1\\end{$MATHARRREPL}/sg;
|
|
|
feca7cd |
+ s/\\begin\{MATHMODE}(.*?)\\end\{MATHMODE}/\\begin{$MATHARRREPL}$1\\end{$MATHARRREPL}/sg;
|
|
|
feca7cd |
|
|
|
feca7cd |
# now look for AUXCMD math-mode pairs which have only comments (or empty lines between them), and remove the added commands
|
|
|
feca7cd |
- s/\\begin{((?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}$AUXCMD\n((?:\s*%.[^\n]*\n)*)\\end{\1}$AUXCMD\n/$2/sg;
|
|
|
feca7cd |
+ s/\\begin\{((?:$MATHENV)|(?:$MATHARRENV)|SQUAREBRACKET)}$AUXCMD\n((?:\s*%.[^\n]*\n)*)\\end{\1}$AUXCMD\n/$2/sg;
|
|
|
feca7cd |
} else {
|
|
|
feca7cd |
# math modes OFF,WHOLE,COARSE: Convert \MATHBLOCKmath{..} commands back to environments
|
|
|
feca7cd |
s/\\MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{($pat_n)\}/\\begin{$1}$2\\end{$1}/sg;
|
|
|
feca7cd |
@@ -2652,19 +2652,19 @@ sub postprocess {
|
|
|
feca7cd |
# undo renaming of the \begin and \end,{,} and dollars in comments
|
|
|
feca7cd |
1 while s/(%.*)DOLLARDIF/$1\$/mg ;
|
|
|
feca7cd |
# Convert \begin{SQUAREBRACKET} \end{SQUAREBRACKET} into \[ \]
|
|
|
feca7cd |
- s/\\end{SQUAREBRACKET}/\\\]/sg;
|
|
|
feca7cd |
- s/\\begin{SQUAREBRACKET}/\\\[/sg;
|
|
|
feca7cd |
+ s/\\end\{SQUAREBRACKET}/\\\]/sg;
|
|
|
feca7cd |
+ s/\\begin\{SQUAREBRACKET}/\\\[/sg;
|
|
|
feca7cd |
# 4. Convert \begin{DOLLARDOLLAR} \end{DOLLARDOLLAR} into $$ $$
|
|
|
feca7cd |
s/\\begin\{DOLLARDOLLAR\}(.*?)\\end\{DOLLARDOLLAR\}/\$\$$1\$\$/sg;
|
|
|
feca7cd |
# 5. Convert \SUPERSCRIPTNB{n} into ^n and \SUPERSCRIPT{nn} into ^{nnn}
|
|
|
feca7cd |
- 1 while s/\\SUPERSCRIPT(\s*{($pat_n)})/^$1/g ;
|
|
|
feca7cd |
- 1 while s/\\SUPERSCRIPTNB{(\s*$pat0)}/^$1/g ;
|
|
|
feca7cd |
+ 1 while s/\\SUPERSCRIPT(\s*\{($pat_n)})/^$1/g ;
|
|
|
feca7cd |
+ 1 while s/\\SUPERSCRIPTNB\{(\s*$pat0)}/^$1/g ;
|
|
|
feca7cd |
# Convert \SUBSCRIPNB{n} into _n and \SUBCRIPT{nn} into _{nnn}
|
|
|
feca7cd |
- 1 while s/\\SUBSCRIPT(\s*{($pat_n)})/_$1/g ;
|
|
|
feca7cd |
- 1 while s/\\SUBSCRIPTNB{(\s*$pat0)}/_$1/g ;
|
|
|
feca7cd |
+ 1 while s/\\SUBSCRIPT(\s*\{($pat_n)})/_$1/g ;
|
|
|
feca7cd |
+ 1 while s/\\SUBSCRIPTNB\{(\s*$pat0)}/_$1/g ;
|
|
|
feca7cd |
# Convert \SQRT{n} into \sqrt{n} and \SQRTNB{nn} into \sqrt nn
|
|
|
feca7cd |
- 1 while s/\\SQRT(\s*{($pat_n)})/\\sqrt$1/g ;
|
|
|
feca7cd |
- 1 while s/\\SQRTNB{(\s*$pat0)}/\\sqrt$1/g ;
|
|
|
feca7cd |
+ 1 while s/\\SQRT(\s*\{($pat_n)})/\\sqrt$1/g ;
|
|
|
feca7cd |
+ 1 while s/\\SQRTNB\{(\s*$pat0)}/\\sqrt$1/g ;
|
|
|
feca7cd |
|
|
|
feca7cd |
1 while s/(%.*)\\CRIGHTBRACE (.*)$/$1\}$2/mg ;
|
|
|
feca7cd |
1 while s/(%.*)\\CLEFTBRACE (.*)$/$1\{$2/mg ;
|