如果 compactitem 是参数,则命令 \equal{#1}{} 会产生错误

如果 compactitem 是参数,则命令 \equal{#1}{} 会产生错误

我想检查自定义命令中的变量是否为空。只要它包含“普通文本”,这种方法就很好,但是一旦有 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}%
}

相关内容