\item 的可选参数

\item 的可选参数

我正在排版一个有序列表,其中的条目可能看起来无序,但其他情况下应该假定是有序的。我不想\setcounter为了做到这一点而费尽周折。也就是说,我想要类似

\begin{enumerate}
  \item First
  \item Second
  \item[8] Eighth!
  \item Ninth!
  \item[4] Fourth
\end{enumerate}

给出以下 Good 输出,而不是 Bad 输出:

好的和坏的输出,如下面 MWE 给出的

以下是一个最小工作示例。

\documentclass{article}
\usepackage{enumitem} % preferably something compatible with this guy
\begin{document}

Good:

\begin{enumerate}
  \item[1.] First
  \item[2.] Second
  \item[8.] Eighth!
  \item[9.] Ninth!
  \item[4.] Fourth
\end{enumerate}

Bad:

\begin{enumerate}
  \item First
  \item Second
  \item[8] Eighth!
  \item Ninth!
  \item[4] Fourth
\end{enumerate}

\end{document}

需要注意的是,我不想在之后指定句点,以防我的列表使用不同的编号,例如罗马。兼容性enumitem是首选,但不是必需的。

解决这个问题的正确方法是什么?

答案1

您不想滥用可选参数\item;更好地定义\nextitem命令:

\documentclass{article}

\makeatletter
\newcommand\nextitem[1]{%
  \setcounter{\@enumctr}{#1}%
  \addtocounter{\@enumctr}{-1}%
}
\makeatother

\begin{document}
\begin{enumerate}
\item First
\item Second
\nextitem{8}
\item Eighth!
\item Ninth!
\nextitem{4}
\item Fourth
\end{enumerate}
\end{document}

在此处输入图片描述

答案2

\documentclass{scrartcl}

\usepackage{enumitem}

\usepackage{etoolbox,xparse}

\AtBeginEnvironment{enumerate}
  {\let\originalitem\item
   \RenewDocumentCommand\item{o}{\IfValueTF{#1}
     {\setcounter{enumi}{\numexpr#1-1\relax}\originalitem}{\originalitem}}}

\begin{document}

Good:

\begin{enumerate}
  \item First
  \item Second
  \item[8] Eighth!
  \item Ninth!
  \item[4] Fourth
\end{enumerate}

And

\begin{enumerate}[label=(\alph*)]
  \item First
  \item Second
  \item[8] Eighth!
  \item Ninth!
  \item[4] Fourth
\end{enumerate}

\end{document}

我删除了一些\begingroup..\endgroup我原来拥有的东西,我不知道为什么无论我是否分组,它的工作方式都相同。

这只适用于单级枚举。不能嵌套enumerate

在此处输入图片描述

相关内容