我刚刚尝试编写一些命令,使用其参数检查它们是否为空(isempty{...}
来自包ifthen
)。问题是,要检查的文本包含换行符,这搞砸了整个系统并导致它产生非常奇怪的错误消息。
有没有办法解决这个问题并安全地将包含换行符的文本作为参数传递给命令或环境?
答案1
该etextools
包提供了一个\ifempty{<text>}{<true>}{<false>}
可与换行符一起使用的可扩展宏。
如果您不需要测试可扩展,您也可以使用以下代码:
\newcommand{\mymacro}[1]{%
\begingroup
\def\temp{#1}%
\ifx\temp\empty
\endgroup
% empty
\else
\endgroup
% not empty
\fi
}
答案2
\isempty 测试扩展了它的参数;你可以尝试
\ifthenelse{\isempty{\unexpanded{#1}}}{<true>}{<false>}
或者采取不同的测试,例如
\ifx\relax\detokenize{#1}\relax
<true>%
\else
<false>%
\fi
两种情况下都#1
代表您想要测试的论点。