如何避免 itemize/enumerate 中出现“可能缺少 \item。”消息

如何避免 itemize/enumerate 中出现“可能缺少 \item。”消息

如果有一个 itemize 环境,但其中没有项目:

\begin{itemize}
\end{itemize}

编译会抱怨“可能缺少 \item”。我想修改环境 itemize(或 enumerate),这样,如果没有\item,编译不会失败,只是不显示任何内容。

编辑 我认为,通过尝试从实际问题中提取 MWE,我错过了重点。因此,我重新表述了这个问题这里

答案1

您可以按如下方式停用它,尽管我不太清楚为什么有人会想这样做!

\documentclass{article}
\makeatletter
\let\@noitemerr\relax
\makeatother
\begin{document}
Some text.
\begin{itemize}
\end{itemize}
More text.
\end{document}

如果稍后需要重新激活它,则需要保存原始定义。

\documentclass{article}
\makeatletter
\let\@oldnoitemerr\@noitemerr %Save the command definition                      
\newcommand\noitemerroroff{\let\@noitemerr\relax}
\newcommand\noitemerroron{\let\@noitemerr\@oldnoitemerr}
\makeatother
\begin{document}
Some text.
\noitemerroroff
\begin{itemize}
\end{itemize}
More text.
%                                                                               
\noitemerroron
\begin{itemize}
\end{itemize}
\end{document}

答案2

你到底想要发生什么?

鉴于

xxx

aaa\begin{itemize}\end{itemize}bbb

yyy

那么您是否想获得中间段落,aaabbb就好像没有空环境一样?您是否想要(仅)一个段落分隔符,您是否想要一个段落分隔符和 itemize 环境通常会在上方和下方出现的显示间距?或者您是否想要(明显奇怪的)实际从 LaTeX 获得的输出,但没有错误消息?

所有这些事情(可能)都是可能的,但有些比其他的更容易。

答案3

这些环境是 LaTeX 内核的一部分,因此如果不深入研究实现,就无法轻易更改或调整。(参见 Ian 的回答。)一种解决方案是定义您自己的命令并使用包ifthen

\usepackage{ifthen}
\newcommand{\safeitemizecmd}[1]{%
  \ifthenelse{\equal{#1}{}}{}{\begin{itemize}#1\end{itemize}}}%
}

请注意,此解决方案将参数扩展#1两次,只是为了检查它是否为空。您可以通过使用包\expandonce中的方法来避免这种情况etoolbox

\usepackage{ifthen}
\usepackage{etoolbox}
\newcommand{\safeitemizecmd}[1]{%
  \ifthenelse{\equal{\expandonce{#1}}{}}{}{\begin{itemize}#1\end{itemize}}}%
}

然后,\safeitemizecmd{\item ...}将排版一个项目化环境,并且\safeitemizecmd{}不会排版任何内容。

如果要使用环境,请使用上面创建的命令:

\newenvironment{safeitemize}{\safeitemizecmd\bgroup}{\egroup}

\bgroup命令\egroup本质上相当于括号。

相关内容