[О блоге]
[наверх]
[пред]
[2022-01-27 20:58:15+03:00]
[3e191a9e6d0eb90216c7bc640b698d7274c46f48]
Темы: [redo][tip]
Redo и LaTeX
В d0ffbdd295c1583abde17388553038f39747b0cc упоминал о redo цели которая
смотрит на .log файл результата работы TeX и повторяет сборку пока там
не исчезнет сообщение о том что хватит. Доработал эту default.pdf.do
цель, которая ещё и BibTeX запускает:
redo-ifchange $2.tex db.bib
exec >&2
jobname=${3#.}
trap "rm -f ${jobname}*" HUP PIPE INT QUIT TERM EXIT
pdflatex --draftmode --jobname=$jobname $2.tex
bibtex $jobname
while grep -q "Rerun to get" $jobname.log ; do
pdflatex --jobname=$jobname $2.tex
done
mv $jobname.pdf $3
В отличии от первой версии скрипта, эта использует честный jobname для
создания всего вывода полностью во временных файлах, подчищая за собой
при ошибке или выходе. Прежде, если я запустил redo, то первое
исполнение pdflatex команды уже перезатрёт report.pdf, но может выйти с
ошибкой при этом (или на bibtex упадёт) -- с точки зрения redo файл $1
был затронут, но в его базу данных знаний о нём не занесено. Поэтому при
следующем запуске после упавшего, redo сообщит о том что .pdf уже был
externally modified. Плюс оставался всякий мусор после сборки. С этой
новой версией default.pdf.do все эти проблемы решены. Эмпирически
обнаружил что jobname не может начинаться с точки, поэтому отрезаю её,
используя в качестве имени уже имеющееся временное название $3.
[оставить комментарий]