XeTeX - 需要重新运行时检测
我正在尝试确定何时因未定义的引用而需要重新运行Xe(La)TeX。我在SCons邮件列表上发布了一个相关问题,问题如下:
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.20100627.r5064的第71行的SCons.Tools.tex
) :
- 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
,一次产生.pdf
。显然,如果没有未定义的引用,则第二次调用是多余的。
因此,我的问题是:当有或没有需要重新编译的未定义引用(例如 arabic {lastpage})时,如何检测 - 大概是通过对job.log
的正则表达式测试。
谢谢你的阅读。
最好的祝福,
布赖恩
没有找到相关结果
已邀请:
3 个回复
谷起
悸翠疮武昏
闪脖
(也就是说,如果4年后这仍然有用:-)