隐藏某个项目并删除左侧空行

隐藏某个项目并删除左侧空行

有没有办法定义一个新命令\noitem并隐藏其内容,就像我在 MWE 中输入的那样?

\documentclass{article}

\newcommand[2]{\noitem}{\item[]{}\vspace*{-\baselineskip}} % better define this

\begin{document}

\begin{description}
  \item[test 1] this line is to appear
  \noitem[test 2] this line is to be empty
\end{description}

\end{document}

我希望能够在描述环境中使用两种类型的构造:\noitem\item\item众所周知,这是常规的。\noitem简单的隐藏列表内的文本,而不留下多余的行。的目的\noitem在某种程度上类似于%当您想要隐藏部分代码时使用。此外,我希望能够在环境中的其他地方使用它:在开头、中间或结尾。环境内的位置对我来说是未知的,因为这将在其他命令中运行。

问题是如何正确定义\noitem描述中使用的命令,删除\item[]{}留下的多余的行?

答案1

这似乎有效,但仅适用于第一级description环境:如果存在,则不要嵌套它们\noitem

\documentclass{article}

\long\def\noitem#1\end{\noitemaux#1\item\end}
\makeatletter
\long\def\noitemaux#1\item#2\end{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\end}
  {\remove@item #2\@nil\end}%
}
\long\def\remove@item#1\item\@nil{\item #1}
\makeatother

\begin{document}

\begin{description}
  \noitem[test 0] this line is to be empty
  \item[test 1] this line is to appear
  \item[test 2] this line is to appear
  \noitem[test 3] this line is to be empty
  \noitem[test 4] this line is to be empty
  \item[test 5] this line is to appear
  \noitem[test 6] this line is to be empty
\end{description}

\end{document}

在此处输入图片描述

相关内容