[О блоге] [наверх] [пред] [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.

    [оставить комментарий]