Enumerate 选项中的自定义命令

Enumerate 选项中的自定义命令

在尝试采用最佳实践并清理代码时,我想将enumerate环境的常用选项压缩为带有一些参数的命令。然而,enumitem似乎不喜欢这个:

\documentclass{article}

\usepackage{enumitem}

\newcommand{\setlabel}[1]{label=#1, ref=Item #1}

\begin{document}

%   \begin{enumerate}[\setlabel{A}]
%       \item Something \label{item:a}
%   \end{enumerate}

    \begin{enumerate}[label=A, ref=Item A]
        \item Something \label{item:a}
    \end{enumerate}

    \noindent Reference to \ref{item:a}.

\end{document}

输出的屏幕截图

注释掉的代码会抛出错误(Package enumitem Error: label=A, ref=Item A undefined.)。

我知道SetEnumitemKey,但是它似乎不接受论点

理想情况下,答案也适用\NewDocumentCommandxparse以便对可选参数进行更高级的干预。谢谢!

答案1

不幸的是,enumitem使用基于的手工键值系统xkeyval。可以考虑添加一个键并定义其相关效果来设置相关键,但处理方式很奇怪,这不起作用。

下面的代码基于包的内部结构,因此如果包发生变化,它可能会变得过时。

\documentclass{article}

\usepackage{enumitem}

\makeatletter
\enitkv@key{}{setlabel}{%
  \expandafter\def\@itemlabel{#1}%
  \g@addto@macro\enit@delayedkeys{,ref=Item #1}%
}
\makeatother

\begin{document}

\begin{enumerate}[setlabel=A]
\item Something \label{item:a}
\end{enumerate}

\noindent Reference to \ref{item:a}.

\end{document}

在此处输入图片描述

相关内容