以下是 MWE:
\documentclass{article}
\usepackage[shortlabels]{enumitem}
\begin{document}
\begin{enumerate}[label={Q.\arabic*.}]
\item This is 1
\item This is 2
\item This is 3A
\item This is 3B
\item This is 4
\end{enumerate}
\end{document}
我如何让标签与商品详情相匹配?那么,它应该是 Q.1.、Q.2.、Q.3.A、Q.3.B、Q.4 等,而不是 Q.1.、Q.2.、...、Q.5. 等?
答案1
如果您不介意半手动处理特殊情况,您可以执行以下操作:
\documentclass{article}
\usepackage[shortlabels]{enumitem}
\newlength{\aw}
\settowidth{\aw}{A}
\begin{document}
\begin{enumerate}[label={Q.\arabic*.\hspace*{\aw}}]
\item This is 1
\item This is 2
\addtocounter{enumi}{1}
\item[Q.\arabic{enumi}A.] This is 3A
\item[Q.\arabic{enumi}B.] This is 3B
\item This is 4
\item This is 5
\end{enumerate}
\end{document}
答案2
以下是构建这些列表的半自动化方法。使用下面的代码,您可以使用命令
\begin{MyList}
\item This is 1
\item This is 2
\item* This is 3A
\item* This is 3B\label{3B}
\item This is 4
\end{MyList}
生成列表:
因此,只要\item*
使用 ,就会在商品编号中添加一个字母,只有当最后一个商品没有星号时,商品编号才会增加。\item[label]
如果您愿意,仍然可以使用 来覆盖商品标签,但要注意的是,使用 时可选标签将被忽略\item*[optional label]
。
以下是完整代码,下面有一些解释:
\documentclass{article}
\usepackage[shortlabels]{enumitem}
\usepackage{xparse}
\let\realItem\item% save \item for use in \repeatingItem
\newif\ifRepeatingItem
\newcounter{repeatLabel}
\renewcommand\therepeatLabel{Q.\arabic{MyListi}\Alph{repeatLabel}.}
\NewDocumentCommand\repeatingItem{ so }{%
\IfBooleanTF{#1}{%
\ifRepeatingItem% need to stop enumi from incrementing
\else\stepcounter{MyListi}\setcounter{repeatLabel}{0}% reset repeat label counter
\fi%
\refstepcounter{repeatLabel}% increment counter
\realItem[\therepeatLabel]% print the label
\RepeatingItemtrue%
}{\IfValueTF{#2}{\realItem[#2]}{\realItem}%
\RepeatingItemfalse%
}%
}
\newlist{MyList}{enumerate}{1}% assuming no nesting
\setlist[MyList]{
label=Q.\arabic*.,
before=\let\item\repeatingItem,
widest=Q.8A.
}
\begin{document}
\begin{MyList}
\item This is 1
\item This is 2
\item* This is 3A
\item* This is 3B\label{3B}
\item This is 4
\end{MyList}
\end{document}
我曾经\newlist
定义过一个新的enumerate
类似列表,我假设它不会嵌套——可以允许嵌套,但这有点复杂。在环境中,MyList
命令\item
实际上是\repeatingItem
,它使用了一些解析magic 来确定何时*
使用。由于 的行为\item*
会根据前一个项目是否已加星标而有所不同,因此我定义了一个布尔值\ifRepeatingItem
来跟踪最后一个项目是否已加星标。除此之外,我们只需增加输出所需的各种计数器即可。