检查环境是否为空

检查环境是否为空

我有一个自定义环境,有时里面可能什么都没有。在这种情况下,我需要采取一些特殊措施。有没有办法检查我的环境是否为空?

这是第一个想法,尽管我担心它不是很有用。

\documentclass{article}

\newenvironment{abletocheckempty}
{
  % Do this if the environment is not empty
  Not empty

  % And do this if the environment is empty
  Empty
}
{
  % No change in closing behavior 
}                              

\usepackage{lipsum}

\begin{document}

\begin{abletocheckempty}
  There is some text or even command here.
  \lipsum[1]
\end{abletocheckempty}

\begin{abletocheckempty}
\end{abletocheckempty}

\end{document}

如果我们更进一步,使用environ包,我们可以制定这样的代码。

\documentclass{article}

\usepackage{environ}

\usepackage{etoolbox}
\makeatletter
\NewEnviron{abletocheckempty}
{\notblank{\BODY}{Not empty}{Empty}}
\makeatother

\usepackage{lipsum}

\begin{document}

\begin{abletocheckempty}
  There is some texts or even commands here.
  \lipsum[1]
\end{abletocheckempty}

\begin{abletocheckempty}
\end{abletocheckempty}

\end{document}

上面的代码编译得很好,但是我得到,

Not empty
Not empty

作为输出。

我在这里可能遗漏了什么?

我理解,正如手册中所述etoolbox

\ifblank{<string>}{<true>}{<false>}

<true>如果<string>为空白(空或空格),则扩展为,<false>否则扩展为 。<string>在测试中不会扩展 。

因此,我尝试使用\expandafter之前的 方法\notblank,但没有任何效果。

答案1

您可以使用评论中提到的其他 etoolbox 功能,或者直接测试\BODY,这样就不会空、空、空

\documentclass{article}

\usepackage{environ}

\usepackage{etoolbox}
\makeatletter
\NewEnviron{abletocheckempty}
{\ifx\BODY\@empty
 Empty%
\else
 Not empty%
\fi}
\makeatother

\usepackage{lipsum}

\begin{document}

\begin{abletocheckempty}
  There is some texts or even commands here.
  \lipsum[1]
\end{abletocheckempty}

\begin{abletocheckempty}
\end{abletocheckempty}

\begin{abletocheckempty}\end{abletocheckempty}

\end{document}

相关内容