如何在 tabularx 环境中精确生成一个警告?

如何在 tabularx 环境中精确生成一个警告?

我意识到这是和 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

相关内容