脚本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: █