在基本枚举环境中更改枚举项的值似乎相当简单;考虑
\documentclass{book}
\begin{document}
\LARGE
\begin{enumerate}
\item Sentence.
\item[10.] Sentence.
\item Sentence.
\end{enumerate}
\end{document}
产生
但是,同样的过程不一定适用于稍微复杂一点的枚举环境——比如,当使用 时\newtcbox
;例如,
\documentclass[openany]{book}
\usepackage{tcolorbox}
\newtcbox{\greenbox}[1][]{nobeforeafter,
notitle,
colframe=green!20!black,
colback=green!50!black,
top=4pt,
left=5pt,
right=5pt,
bottom=2pt,
fontupper=\sffamily\bfseries,
colupper=white,
tcbox raise base,
#1}
\usepackage{enumitem}
\setlist{label*={\greenbox{\arabic*}}}
\begin{document}
\thispagestyle{empty}
\Large
\begin{enumerate}
\item Sentence.
\item Sentence.
%\item[2*] Description.
\item Sentence.
\end{enumerate}
\end{document}
生成列表
但是,当我运行相同的代码并将第二项替换为时\item[2*] Description
,我得到以下输出。
问题:我如何修改上述代码,以便例如“2*”在绿色框内显示为列表中的第二项?
谢谢。
答案1
首先,我认为值得注意的是,enumitem
这里是一致的,第一个例子中有效的方法在第二个例子中没有失败。当您手动写入值时,格式永远不会从其他条目复制。只是在您的第一个示例中,计数器上进行的唯一格式化是在数字后添加一个点,您这样做了:
\item[10.] Sentence.
在第二个例子中使用同样的想法也同样有效:将项目 2* 替换为
\item[\greenbox{2*}] Description.
产生预期的输出
现在,如果您想在手动写入值时自动添加格式,我认为最简单的方法是稍微修改在给出\item
可选参数时将其包装的行为。以下示例输出上一个图像的列表。\greenbox{...}
\documentclass[openany]{book}
\usepackage{tcolorbox}
\newtcbox{\greenbox}[1][]{nobeforeafter,
notitle,
colframe=green!20!black,
colback=green!50!black,
top=4pt,
left=5pt,
right=5pt,
bottom=2pt,
fontupper=\sffamily\bfseries,
colupper=white,
tcbox raise base,
#1}
\usepackage{enumitem}
\let\olditem\item
\newcommand*{\greenboxitems}{%
\renewcommand*{\item}[1][]{%
\ifblank{##1}{\olditem}{\olditem[\greenbox{##1}]}%
}%
}
\setlist{
label*={\greenbox{\arabic*}},
before=\greenboxitems,
after=\let\item\olditem,
}
\begin{document}
\thispagestyle{empty}
\Large
\begin{enumerate}
\item Sentence.
\item[2*] Description.
\item Sentence.
\end{enumerate}
\end{document}