在尝试采用最佳实践并清理代码时,我想将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
,但是它似乎不接受论点。
理想情况下,答案也适用\NewDocumentCommand
于xparse
以便对可选参数进行更高级的干预。谢谢!
答案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}