如果条件语句解析为真,如何停止编译并输出错误消息?
\documentclass[varwidth]{standalone}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\bool_set_true:N\l_tmpa_bool % OUTPUT ERROR
\bool_if:NTF\l_tmpa_bool
{ % OUTPUT ERROR TO CONSOLE
}
{ NO ERROR
}
\ExplSyntaxOff
\end{document}
答案1
用于\msg_new:nnn(n)
声明错误消息,然后用于\msg_fatal:nn(nnnn)
引发致命错误消息,之后编译中止(参见l3msg
模块文档更多选项):
\documentclass[varwidth]{standalone}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
% Declare message
\msg_new:nnnn { bp2017 } { logical-error }
{ The~thing~that~wasn't~supposed~to~happen~happened. }
{ I~don't~know~how~to~help~you~further. }%
%
\bool_set_true:N \l_tmpa_bool % OUTPUT ERROR
\bool_if:NTF \l_tmpa_bool
{ \msg_fatal:nn { bp2017 } { logical-error } }
{ NO ERROR }
\ExplSyntaxOff
\typeout{I'm still here!}
\end{document}
之后终端显示(注意I'm still here!
没有打印):
! Fatal Package bp2017 Error: The thing that wasn't supposed to happen
(bp2017) happened.
For immediate help type H <return>.
...
l.14 { NO ERROR }
? h
I don't know how to help you further.
This is a fatal error: LaTeX will abort.
?
phelype@oleinik:~/home/phelype/tex.sx$
但是这不适用于,standalone
因为它在\vbox
(带有选项)中执行所有操作,而当您在 中varwidth
使用(TeX)时,您会得到:没有,然后使用,然后您得到一个\end
\vbox
! You can't use `\end' in internal vertical mode.
varwidth
standalone
\hbox
! Missing } inserted.
编辑:更新后(2019 年 6 月 3 日) 版本的expl3
,\msg_fatal:nn(nnnn)
无论从何处调用它,都会通过发出错误消息来结束编译,然后让底层 TeX 引擎因低级致命错误而停止。