【发布时间】:2010-07-12 21:15:44
【问题描述】:
由于未定义的引用,我正在尝试确定何时需要重新运行 Xe(La)TeX。我在SCons mailing list上发过相关问题,问题如下:
SCons 和其他构建系统目前有时无法检测到需要多次运行 XeLaTeX 的页数和其他引用。这是一个示例文件(我们称之为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 的三个页面的页码为“Page 1 of 0”、“Page 2 of 0”和“Page 3 of 0”。如果您第二次运行xelatex job,您会得到“第 1 页,共 3 页”等(即正确的页数)。
为了解决这个问题,我在 SCons 邮件列表中建议检查是否运行 xelatex 来解析未定义的引用是更改以下正则表达式(在 2.0.1.beta 版第 71 行的 SCons.Tools.tex .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}\.$)'
实际上,这是对“No file job.aux”的检查。事实证明这在所有情况下都有效,因为 Xe(La)TeX 在第一次运行时总是会打印“No file job.aux”,因此 Xe(La)TeX 总是运行两次。实际上,这与让job.aux 成为job.tex 和job.pdf 之间的临时构建目标相同。
这就是问题所在:即使没有未定义的引用(例如,从上面的 job.tex 中删除 \arabic{lastpage})Xe(La)TeX 被调用两次,一次生成 .aux,一次生成 @ 987654334@。显然,如果没有未定义的引用,那么第二次调用是多余的。
因此我的问题是:当存在或不存在需要重新编译的未定义引用(例如 \arabic{lastpage})时,如何检测 - 大概是通过针对 job.log 的正则表达式测试。
感谢您的阅读。
最好的问候,
布赖恩
【问题讨论】:
标签: latex scons tex xetex xelatex