自动标记枚举项

自动标记枚举项

我想重新定义enumerate环境,以便每个环境都\item自动设置\label{en:\arabic{page}\alph{enumi}}。我已经尝试过了

\usepackage{etoolbox}
\gappto{\item}{\label{en:\arabic{page}\alph{enumi}}}

但这也会在center环境中引发我不想要的情况。

我该如何做才能enumitem.sty尽可能避免冲突?

(不必担心标签的非唯一性——文档布局保证了这一点。)

答案1

使用内部\@item

\documentclass{article}
\usepackage{xpatch}

\makeatletter
\xapptocmd{\@item}{\label{en:\arabic{page}\alph{enumi}}}{}{}
\makeatother

\begin{document}

\begin{enumerate}
\item First.
\item Second.
\item Third.
\end{enumerate}
\ref{en:1c}, \ref{en:1b} and~\ref{en:1a}

\end{document}

在此处输入图片描述

enumitem以下是包含包和嵌套环境的示例:

\documentclass{article}
\usepackage{xpatch}
\usepackage{enumitem}

\makeatletter
\xapptocmd{\@item}{
  \ifnum\@enumdepth=1\relax
    \label{en:\arabic{page}\alph{enumi}}
  \else 
  \ifnum\@enumdepth=2\relax
    \label{en:\arabic{page}\arabic{enumii}}
  \else 
  \ifnum\@enumdepth=3\relax
    \label{en:\arabic{page}\roman{enumiii}}
  \else 
  \ifnum\@enumdepth=4\relax
    \label{en:\arabic{page}\Roman{enumiv}}
  \fi\fi\fi\fi
  }
  {}{}
\makeatother

\setlist[enumerate,1]{label=\alph*)}
\setlist[enumerate,2]{label=\arabic*.,ref=\arabic*}
\setlist[enumerate,3]{label=(\roman*)}
\setlist[enumerate,4]{label=\Roman*.,label=\Roman*}

\begin{document}

\begin{enumerate}
\item First.
  \begin{enumerate}
  \item First subitem.
  \item Second subitem.
  \item Third subitem.
  \item Fourth subitem.
  \end{enumerate}
\item Second.
\item Third.
\end{enumerate}
Some cross-references for the first level: \ref{en:1c}, \ref{en:1b} and~\ref{en:1a} and some cross-references for the second level: \ref{en:14}, \ref{en:13}, \ref{en:12} and~\ref{en:11}.

\end{document}

在此处输入图片描述

相关内容