如何使用 expl3 暂停编译并将错误消息输出到控制台?

如何使用 expl3 暂停编译并将错误消息输出到控制台?

如果条件语句解析为真,如何停止编译并输出错误消息?

\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.varwidthstandalone\hbox! Missing } inserted.

编辑:更新后(2019 年 6 月 3 日) 版本的expl3\msg_fatal:nn(nnnn)无论从何处调用它,都会通过发出错误消息来结束编译,然后让底层 TeX 引擎因低级致命错误而停止。

相关内容