脚本xelatex

脚本xelatex

脚本xelatex

我知道halt-on-error可以在脚本的循环中使用 xelatex,而不会导致脚本在文档无法编译时挂起,但是我们为什么需要呢nonstopmode

xelatex -interaction=nonstopmode -halt-on-error

或者

xelatex --interaction=nonstopmode --halt-on-error

答案1

这两个设置控制不同的行为。设置-interaction=nonstopmode告诉 TeX 引擎以最少的用户交互运行,并尽可能“忽略”错误。因此它在自动化中非常有用。设置-halt-on-error告诉引擎在第一次出现错误时停止处理文档,而不是继续运行。因此,设置两者将导致运行在第一次出现错误后终止,而仅设置-interaction=nonstopmode将导致 TeX 继续运行但不要求您“帮助”。

列举组合:

  • 两种选择都不是:如果发生错误(“错误”包含\show或类似内容),TeX 将会提示用户进行交互(当然,用户可以使用相关原语改变 TeX 内的运行模式。)

  • -interaction=nonstopmode:TeX 无需用户交互即可运行,但会继续运行,直到出现任何错误消息(最多 100 条错误)。如果出现“严重”错误(例如文件丢失),TeX 将中止。

  • -halt-on-error:TeX 将在第一次错误时中止运行

  • -interaction=nonstopmode -halt-on-error-halt-on-error一旦出现错误,运行就会中止

值得注意的是,在交互模式中还有其他可能的选择,使用组合可能会有用:-interaction=batchmode使 TeX '更安静',因此在批处理文件中,加上这个选项-halt-on-error对于'制作 PDF 或提前中止'运行是有意义的。

答案2

似乎-halt-on-error仍然-interaction如果您已设置为scrollmode(默认) 或,则会不断要求您输入errorstopmode。因此,-halt-on-error仅凭这一点似乎不足以避免脚本挂起。

我还没有确认这一点,但我相信 -interaction=nonstopmode本身就足以防止挂起。唯一的区别-halt-on-error在于它会在出现第一个错误时放弃,而不是在出现最多 100 个错误时继续尝试。

例子:

$ echo '\input{nonexistentfile}' >bad.tex
$ tex -halt-on-error bad.tex
This is TeX, Version 3.14159265 (TeX Live 2016/Arch Linux) (preloaded format=tex)
(./bad.tex
! I can't find file `{nonexistentfile}'.
l.1 \input{nonexistentfile}

(Press Enter to retry, or Control-D to exit)
Please type another input file name: █

相关内容