首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XeTeX -检测何时需要重新运行

XeTeX -检测何时需要重新运行
EN

Stack Overflow用户
提问于 2010-07-13 05:15:45
回答 3查看 1.8K关注 0票数 3

我正在尝试确定由于未定义的引用,何时需要重新运行Xe(La)TeX。我在SCons mailing list上发布了一个相关问题,问题如下:

SCons和其他构建系统目前有时无法检测到需要多次运行XeLaTeX的页数和其他引用。下面是一个示例文件(我们将其命名为job.tex):

代码语言:javascript
复制
\documentclass[ones​ide,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的页码分别为“Page1 of 0”、“Page2 of 0”和“Page3 of 0”。如果您第二次运行xelatex job,您会得到“第1页,共3页”等信息(即正确的页数)。

为了解决这个问题,我在SCons邮件列表上建议,检查是否运行xelatex来解析未定义的引用的方法是更改以下正则表达式(在2.0.1.beta.20100627.r5064版的SCons.Tools.tex中的第71行):

代码语言:javascript
复制
- 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.texjob.pdf之间的临时构建目标。

这就是问题所在:即使没有未定义的引用(例如,从上面的job.tex中删除\arabic{lastpage} ),Xe(La)TeX也会被调用两次,一次用来产生.aux,一次用来产生.pdf。显然,如果没有未定义的引用,则第二个调用是多余的。

因此,我的问题是:当存在或不存在需要重新编译的未定义引用(例如\阿拉伯语{lastpage})时,如何检测(假设通过对job.log的正则表达式测试)。

感谢您的阅读。

诚挚的问候,

布赖恩

EN

回答 3

Stack Overflow用户

发布于 2010-07-13 16:39:21

您是否可以只将.aux文件复制到备份,然后比较备份是否与在Xetex运行结束时新生成的.aux文件相同?

票数 2
EN

Stack Overflow用户

发布于 2010-07-13 16:44:48

你可能想要的解决方案是引用最后一页,这样当计数器"lastpage“未定义时就会给出一个警告。然后,这将被原始的重新运行正则表达式拾取。

我使用的另一种方法是继续运行LaTeX,直到aux-file不再更改(从概念上讲,aux-file既是LaTeX运行的输入也是输出,并且一直运行LaTeX,直到到达aux-file的固定点)。这应该保证重新运行LaTeX不会再更改结果文档。

我不知道你能不能把这种行为融入到scons中。在Makefile中,使用一些shell逻辑是相当简单的。

票数 1
EN

Stack Overflow用户

发布于 2014-11-15 06:51:16

Rubber就是这样做的。它不是防弹的,但它在大多数情况下都是有效的,并且输出是干净的,使得更容易发现错误。例如,我会像这样运行它:

代码语言:javascript
复制
$ rubber --pdf [my-file]

(也就是说,如果4年后这仍然有用:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3232334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档