Мой скрипт инициализации Lua открывает некоторые файлы, в которые производится запись в ходе выполнения. Я хотел бы дополнительно записать в них некоторые последние байты, когда LuaTeX закончит обработку всего кода.
Кажется, лучше всего это было бы сделать с помощью обратного вызова, но я не нашел ни одного, который бы полностью соответствовал моим потребностям:
stop_run
(§ 7.1.5.3) работает, но:- не запускается в черновом режиме (
--draftmode
); - заменяет стандартное сообщение о завершении работы, чего я бы предпочел избежать;
- похоже, что он предназначен для передачи информации, несмотря на свое заманчивое название.
- не запускается в черновом режиме (
finish_pdffile
(§ 7.1.6.1) работает, но:- также не запускается в черновом режиме;
- работает только с выходом PDF. Я бы очень предпочел решение, не зависящее от выходного файла.
Смотрите текущую версиюРуководство по LuaTeXдля более подробного описания этих обратных вызовов.
\AtEndDocument
не подходит, потому что:
- файлы по-прежнему могут быть записаны после
\end{document}
. - Код TeX пока не может быть обработан на момент инициализации скрипта Lua (т. е.
tex.sprint
и друзья недоступны). Хотя я мог бы подключиться к другому обратному вызову, чтобы сделатьtex.sprint( appropiate_catcode_table , [[\AtEndDocument{ \directlua{ work() } }]] )
, это кажется слишком косвенным.
Не могли бы вы мне помочь?