Я пытаюсь определить, когда требуется повторный запуск Xe (La) TeX из-за неопределенных ссылок.Я разместил соответствующий вопрос в списке рассылки SCons , и проблема заключается в следующем:
Число страниц и другие ссылки, требующие многократного запуска XeLaTeX, иногда в настоящее время не обнаруживаютсяSCons и другие системы сборки.Вот пример файла (который мы назовем job.tex
):
\documentclass[oneside,12pt]{memoir}
\usepackage{xltxtra}
\usepackage[T1]{fontenc}
\makepagestyle{plain}
\makeoddfoot{plain}{}{}{Page \thepage\ of \arabic{lastpage}}
\makeevenfoot{plain}{}{}{Page \thepage\ of \arabic{lastpage}}
\begin{document}
\pagestyle{plain}
Page 1
\newpage
Page 2
\newpage
Page 3
\newpage
\end{document}
Если вы запустите xelatex job
, полученный файл .pdf будет иметь номера страниц «Страница 1 из 0», «Страница 2 из0 "и" Страница 3 из 0 "для трех страниц.Если вы запускаете xelatex job
во второй раз, вы получаете «Страница 1 из 3» и т. Д. (Т. Е. Правильный счетчик страниц).
Чтобы это исправить, я предложил в списке рассылки SCons проверитьзапускать xelatex для разрешения неопределенных ссылок - это изменить следующее регулярное выражение (в SCons.Tools.tex
в строке 71 версии 2.0.1.beta.20100627.r5064):
- warning_rerun_str = '(^LaTeX Warning:.*Rerun)|(^Package \w+ Warning:.*Rerun)'
+ warning_rerun_str = '(^LaTeX Warning:.*Rerun)|(^Package \w+ Warning:.*Rerun)'\
+ '|(^No file \w+\.\w{3}\.$)'
На практике этоэто проверка для "Нет файла job.aux".Оказывается, это работает во всех случаях, потому что Xe (La) TeX всегда печатает «No file job.aux» при первом запуске, и, следовательно, Xe (La) TeX всегда запускается дважды.По сути, это то же самое, что job.aux
стать промежуточной целью сборки между job.tex
и job.pdf
.
В этом и заключается проблема: даже если нет неопределенной ссылки (например, удалить * 1022)* с job.tex
выше) Xe (La) TeX вызывается дважды, один раз для получения .aux
, один раз для получения .pdf
.Очевидно, что если нет неопределенных ссылок, этот второй вызов является излишним.
Таким образом, мой вопрос: как можно обнаружить - предположительно путем проверки регулярного выражения на job.log
- когда есть или нетнеопределенные ссылки (например, \ arabic {lastpage}), требующие перекомпиляции.
Спасибо за чтение.
С уважением,
Брайан