Latexdiff TexStudio 宏之谜

Latexdiff TexStudio 宏之谜

我运行的是 Windows 7,64 位。
为了生成一个包含同一文档两个版本之间差异的新 .tex 文件,请按照在线教程操作https://www.youtube.com/watch?v=IAWEywCx9hQ,我已经在 Tex Studio 中创建了一个 latexdiff 宏,其脚本与此答案中显示的完全一致,https://tex.stackexchange.com/a/464270/228739,即

%SCRIPT

var cf = app.getCurrentFileName();

var ld = new String(cf);
ld=ld.substring(0,ld.lastIndexOf("/"));

information("old version");
fileChooser.setDir(ld);
fileChooser.setFilter("TeX files (*.tex)");
fileChooser.exec();
var fold=new String();
fold=fileChooser.fileName();
fold=fold.substring(fold.lastIndexOf("/")+1);

information("new version");
fileChooser.setDir(ld);
fileChooser.setFilter("TeX files (*.tex)");
fileChooser.exec();
var fnew=new String();
fnew=fileChooser.fileName();
fnew=fnew.substring(fnew.lastIndexOf("/")+1);

information("diff file by Chas");
fileChooser.setDir(ld);
fileChooser.setFilter("TeX files (*.tex)");
fileChooser.exec(fout);
var fout=new String();
fout=fileChooser.fileName();
fout=fout.substring(fout.lastIndexOf("/")+1);

ldfout = ld+"\\"+fout;

var cmdstr = new String();
cmdstr = "latexdiff-so "+fold+" "+fnew+" > /dev/null";
var proc = system("cmd /C "+cmdstr,ld);
proc.waitForFinished();
writeFile(ldfout, proc.readAllStandardOutputStr());
app.load(ldfout); // load diff file
buildManager.runCommand("txs:///quick", ldfout);

delete(cmdstr);
delete(dialog);
delete(fold);
delete(fnew);
delete(fout);
delete(ld);
delete(ldfout);

我能够使用视频教程的示例文件(极其简单的文件)成功运行 latexdiff TexStudio 宏。因此,基本安装设置((Active)Perl、MikTek 中的 latexdiff)似乎没问题。宏似乎需要打开文件才能成功运行。

但,我一直无法使用我自己的 .tex 文件(\documentclass{article},其中包含数学、图形、表格和参考资料)来运行它。“初始”版本和“修订”版 .tex 文件在编译时都只生成“\hbox 过满/不足”日志注释,并且消息为“进程正常退出”。它们本身可以编译成功,也可以在 .pdf 中构建和查看。

但是当我尝试使用我的文件运行 latexdiff TexStudio 宏时,它会立即中止并显示以下消息

! 紧急停止。<*> "./trackchanges.tex"

***(作业中止,未找到合法的 \end)”

“Trackchanges.tex” 是应由 latexdiff 脚本填充的完全空的 .tex 文件的名称,它曾是当我使用教程中的示例文件时,可以正确填充。但我自己的 .tex 文件从来都不能。

问题:是否有任何一般性知识可以解释为什么会发生这种情况,或者我必须将其视为过于特定于文件的事情,与我的文件中的前言/其他内容和上面的脚本之间存在一些不兼容性有关?

答案1

我无法解决这个问题。但是,无法通过 TexStudio 宏处理的相同文件,通过从命令提示符运行 latexdiff 命令就可以很好地处理。这意味着安装正常(MikTex 和 Active Perl),并且脚本中的某些内容对我的文件中的内容非常敏感。

要从命令提示符运行 latexdiff,唯一的要求是初始文件和修订文件都位于同一文件夹中。一旦进入该文件夹(使用古老的 DOS 语言),只需输入

latexdiff initial.tex revised.tex > trackchanges.tex

其中“initial”、“revised”和“trackchanges”是实际文件名的替代。

请注意,“trackchanges.tex”文件不需要预先创建 - latexdiff 命令会创建它。

相关内容