\item 的可选参数,显示在计数器后的括号中

\item 的可选参数,显示在计数器后的括号中

通常,当您有以下文件时:

\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}
\item Mary
\item[had] a little 
\item lamb
\end{enumerate}
\end{document}

其格式为

  1. Mary
had a little
  2. lamb

我希望它的格式为

  1. Mary
  2 (had). a little
  3. lamb

换句话说,我希望传递给的可选参数\item不要替换通常的标签,但我希望它另外出现。特别是,计数器仍应是阶梯式的。

这似乎有点微妙,但请注意,参数应该出现在句点之前和计数器之后。事实上,这只是一个最小示例 - 我希望在标签内放置可选参数时有更大的灵活性。

有没有办法用这个enumitem包来实现这个功能?

答案1

你可以尝试以下方法:

\documentclass{article}
\usepackage{enumitem}
\newcommand\labeltext{}
\newcommand\specialitem[1][]{%
 {\renewcommand\labeltext{ (#1)}\item\leavevmode}}
\begin{document}
\begin{enumerate}[label=\arabic*\noexpand\labeltext.]
\item Mary
\specialitem[had] a little 
\item lamb
\end{enumerate}
\end{document}

评论:

  1. 我正在使用一个特殊命令,但也应该可以修补,\item但这样你就会失去标准行为。

  2. 标签的正确对齐留作练习;-)

答案2

您可以定义自己的自定义环境,在其中重新定义\item宏:

在此处输入图片描述

笔记:

  • 如果你想重新定义一个具有可选参数的宏,你必须\LetLtxMacro使用包裹letltxmacro。 的详细描述\LetLtxMacro可以在这个问题中找到何时使用 \LetLtxMacro?

  • 我用过包裹xstring用于字符串比较,因为我更喜欢它的语法,但如果需要的话,可以在没有该包的情况下完成。

代码:

\documentclass{article}
\usepackage{enumitem}
\usepackage{xstring}
\usepackage{letltxmacro}

\LetLtxMacro{\OldItem}{\item}
\newenvironment{MyEnumerate}[1][]{%
    \renewcommand{\item}[1][]{\OldItem \IfStrEq{##1}{}{}{(##1)}}%
    \begin{enumerate}[#1]%
}{%
    \end{enumerate}%
}%

\begin{document}
\begin{MyEnumerate}
    \item Mary
    \item[had] a little 
    \item lamb
\end{MyEnumerate}
\end{document}

相关内容