通常,当您有以下文件时:
\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}
评论:
我正在使用一个特殊命令,但也应该可以修补,
\item
但这样你就会失去标准行为。标签的正确对齐留作练习;-)
答案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}