类似地这个问题,我希望\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
。