我有一个自定义环境,有时里面可能什么都没有。在这种情况下,我需要采取一些特殊措施。有没有办法检查我的环境是否为空?
这是第一个想法,尽管我担心它不是很有用。
\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}