Тайна макроса Latexdiff TexStudio

Тайна макроса Latexdiff TexStudio

Я использую Windows 7, 64bit.
Чтобы создать новый .tex-файл с различиями между двумя версиями одного и того же документа, следуя онлайн-руководствуhttps://www.youtube.com/watch?v=IAWEywCx9hQЯ создал макрос latexdiff в Tex Studio со скриптом, как показано в этом ответе,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, latexdiff в MikTek) в порядке. Похоже, что макрос требует, чтобы файлы были открыты для успешного запуска.

НО,Мне совершенно не удалось запустить его с помощью моих собственных файлов .tex, которые являются \documentclass{article}, с математикой, рисунками, таблицами и ссылками в них. Как "исходная" версия, так и "исправленные" файлы .tex при компиляции выдают только "overfull / underful \hbox" log-комментарии и сообщение "process terminated normal". Сами по себе они компилируются нормально и также строятся и просматриваются в .pdf нормально.

Но когда я пытаюсь запустить макрос latexdiff TexStudio с моими файлами, он немедленно прерывается с сообщением

! Аварийная остановка. <*> "./trackchanges.tex"

*** (задание прервано, не найдено законного \end)"

«Trackchanges.tex» — это имя полностью пустого .tex-файла, который должен быть заполнен скриптом latexdiff, и онбылзаполнялись правильно, когда я использовал файлы примеров учебника. Но никогда с моими собственными файлами .tex.

Вопрос: Есть ли какие-либо общие сведения о том, почему это может происходить, или мне следует считать, что это связано с какой-то файловой спецификой, связанной с некоторой несовместимостью между преамбулой/чем-то еще в моих файлах и приведенным выше скриптом?

решение1

Я не смог решить эту проблему. Но те же файлы, которые не удалось обработать через макрос TexStudio, были обработаны просто отлично с помощью команды latexdiff из командной строки. Это означает, что установка прошла нормально (MikTex и Active Perl), и что-то в скрипте было смертельно чувствительно к чему-то в моих файлах.

Для запуска latexdiff из командной строки единственное требование — чтобы и исходный файл, и измененный файл находились в одной папке. Когда вы туда переходите (используя архаичный язык DOS), то просто вводите

latexdiff initial.tex revised.tex > trackchanges.tex

где «initial», «revised» и «trackchanges» — это фактические имена файлов.

Обратите внимание, что файл «trackchanges.tex» не нужно создавать заранее — его создает команда latexdiff.

Связанный контент