From: Sergey Matveev Date: Thu, 27 Jan 2022 17:58:15 +0000 (+0300) Subject: Redo и LaTeX X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=3e191a9e6d0eb90216c7bc640b698d7274c46f48;p=stargrave-blog.git 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. ---