我正在排版一个有序列表,其中的条目可能看起来无序,但其他情况下应该假定是有序的。我不想\setcounter
为了做到这一点而费尽周折。也就是说,我想要类似
\begin{enumerate}
\item First
\item Second
\item[8] Eighth!
\item Ninth!
\item[4] Fourth
\end{enumerate}
给出以下 Good 输出,而不是 Bad 输出:
以下是一个最小工作示例。
\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
。