我想检查自定义命令中的变量是否为空。只要它包含“普通文本”,这种方法就很好,但是一旦有 itemize 环境,我就会收到一条错误消息:
\documentclass[11pt, a4paper]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{ifthen, paralist}
\begin{document}
\begin{compactitem}
\item Item 1
\item Item 2
\end{compactitem}
\newcommand{\equalsNothing}[1]{
\ifthenelse{\equal{#1}{}}{true}{false}
}
\equalsNothing{}
\equalsNothing{1}
\equalsNothing{
\begin{compactitem}
\item Item 1
\item Item 2
\end{compactitem}
}
\end{document}
我怎样才能更改 \equalsNothing 命令,以便它也能与 itemize-content 正确配合使用?
答案1
的论点\equal
是完全展开这当然会导致脆弱的命令出现问题,例如\begin
。
说
\newcommand{\equalsNothing}[1]{%
\ifthenelse{\equal{\unexpanded{#1}}{}}{true}{false}%
}
通过这种方式,你就能准确地看出论证中是否存在某些问题\equalsNothing
。
不要忘记用 遮盖不需要的空格%
。我还建议使用西弗森代替如果那么。 例如,西弗森\isempty
提供测试没有展开其论点:
\newcommand{\equalsNothing}[1]{%
\ifthenelse{\isempty{#1}}{true}{false}%
}