使用 \newtcbox 时更改枚举项显示

使用 \newtcbox 时更改枚举项显示

在基本枚举环境中更改枚举项的值似乎相当简单;考虑

\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}

相关内容