我运行的是 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 命令会创建它。