ConTeXt 是否需要多次编译?

ConTeXt 是否需要多次编译?

当我使用 编译我的 ConTeXt 文档时context file.tex,编译器似乎多次编译代码。我从未注意到 中常见的任何消息,pdflatex要求我再次编译代码。我是否需要多次运行此命令以确保文档中的所有内容都已解决?

答案1

ConText MkIV 使用 mtxrun 来管理“运行”——即使用适当的开关调用 luatex 多少次才能完成任务。但是,它足够聪明,可以理解实际完成任务需要多少次运行。第一次“编译”(好吧,luatex 是一个解释器而不是编译器,但我们使用这个词是因为这并不那么错误,毕竟我们可以说每个 *tex 都是一个“文档编译器”)这个例子

\开始文本
你好
\停止文本

有 3 次运行,但第二次编译这个

\开始文本
你好世界
\停止文本

有 1 次运行(仅当您不删除临时文件时)并且这个

\开始文本
\dorecurse{10}{\input knuth\page}
\停止文本

需要运行 2 次,只要您不删除临时文件即可。

另一方面,需要一些经验才能认识到

\开始文本
\开始TEX页面
\framed{\externalfigure[牛]\externalfigure[磨坊]}
\停止TEXpage
\停止文本

第一次使用 3 次运行,但在这里您可以安全地使用context --once --- 没有引用、新页面等等,--- 并保存两次运行。这里也是一样,如果我们假设有图片 cow1,..cow100 和 mill1,..mill100:

\开始文本
\dorecurse{100}{%
\开始TEX页面
\framed{\externalfigure[cow\recurselvel]\externalfigure[mill\recurselevel]}
\停止TEXpage
}
\停止文本

作为一个经验法则context <file>是可以的;context --once如果你不确定,请避免,因为你最终可能会得到未完成的临时文件,这可能会混淆上下文(最终使用context --purgecontext --purgeall)。

最后要说的是,您总能找到一个每次运行时都会自我修改的“邪恶”文档。为了避免无限循环,有一个“硬连线”限制(当然,您可以随时编辑 mtxrun 文件来更改它),即 8;如果您的文档确实需要 9 次或更多次传递,那么在最后一次运行结束时,您会看到类似“需要另一次运行”的内容 --- 对我来说,这意味着我的文档设计得不好。

答案2

不,不需要。context处理好它。

相关内容