重新定义项目的可选参数

重新定义项目的可选参数

类似地这个问题,我希望\item命令的可选参数能够打印点数。由于我不想定义新的列表环境或自定义\item命令,我尝试了以下代码(灵感来自这个答案):

\documentclass{article}

\usepackage[shortlabels]{enumitem}
\usepackage{etoolbox,xparse}

\AtBeginEnvironment{enumerate}{\let\olditem\item%
      \RenewDocumentCommand{\item}{o}{%
      \IfValueTF{#1}{#1 points}\olditem}}

\begin{document}

\begin{enumerate}[1)]
  \item This is some item
  \item[10] This item is worth something
  \item Another item
\end{enumerate}

\end{document}

但是这不起作用,因为它给出了图中所示的结果。我显然做错了某件事(或几件事)。提前感谢你的帮助。

奖励:理想情况下,解决方案应该适用于各种枚举级别(即嵌套环境)。

在此处输入图片描述

答案1

我不确定这种方法相对于更简单的输入有什么优势,例如

\item\points{10}

但它就在这里。修改现有的枚举环境不是一个好主意,即使文档仅将其用于编写作业文本,所以我根据enumitem功能定义了一个新环境,以便您可以使用可选参数进一步自定义它。此外,最好在环境之外定义替换的宏\item

\documentclass{article}

\usepackage{enumitem}
\usepackage{xparse}

\let\latexitem\item
\NewDocumentCommand{\pointitem}{o}{%
  \latexitem
  \IfValueT{#1}{\everypar=\expandafter{\the\everypar\formatpoints{#1}}}%
}
\NewDocumentCommand{\formatpoints}{m}{[#1 points] }
\NewDocumentEnvironment{assignments}{O{}}
 {\begin{enumerate}[label=\arabic*),ref=\arabic*,#1]\let\item\pointitem}
 {\end{enumerate}}

\begin{document}

\begin{assignments}

\item This is some item

\item[10] This item is worth something

\item Another item

\end{assignments}

\end{document}

使用\everypar是为了允许\label以与标准相同的方式使用\item

在此处输入图片描述

相关内容