我意识到这是和 LaTeX-2e 的不正当混合expl3
,但不幸的是,目前我的大部分代码都是这样的。
我希望在无法设置特定变量时收到警告。更具体地说,我希望每次输入空变量时都收到一条警告。
我还想在tabularx
环境中排版变量。不幸的是,这会使警告数量增加三倍,我认为这是由于tabularx
计算表格中列宽的方式所致。
每次在环境中触发警告时,什么是最优雅和有效的方法,可以防止警告被写入控制台/日志三次而不是一次tabularx
?
\documentclass{article}
\usepackage{xparse,tabularx}
\ExplSyntaxOn
\bool_new:N \l_some_empty_bool
\msg_new:nnn { mod } { oh-dear }
{
mod ~:~#1~:~\msg_line_context: ~:~thing~not~set.
}
\cs_new_protected_nopar:Npn \some_thing:n #1
{
\bool_set_false:N \l_some_empty_bool
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_if_empty:NTF \l_tmpa_tl
{
\bool_set_true:N \l_some_empty_bool
}
{
}
\bool_if:NTF \l_some_empty_bool
{% how can I stop this being issued 3 times inside a tabularx?
\msg_warning:nnn { mod } { oh-dear }
{ \some_thing:n } % command context
\textbf { ?? }
}
{
}
}
\AtBeginDocument{
\begin{tabularx}{\linewidth}{XX}
Date & \some_thing:n { }\\
\end{tabularx}
}
\ExplSyntaxOff
\begin{document}
\end{document}
(如果有人知道如何说服编辑将expl3
警告视为警告,请提出意见。但我认为这就是生活。)
答案1
tabularx 抑制试验期间的所有类型的 tex 警告,特别是它设置
\hbadness\@M
然后禁用任何设置它的人
\let\hbadness\@tempcnta
所以你可以使用
\ifx\hbadness\@tempcnta
% do nothing in trials
\else
do something in the final run
\fi