仅通过最直接的项目符号引用嵌套列表项

仅通过最直接的项目符号引用嵌套列表项

我希望能够仅通过最内层的标识字符来引用嵌套的枚举列表项。

\begin{enumerate}[(1)]
\item
  \begin{enumerate}[(a)]
    \item \label{mylabel} Referenced point.
  \end{enumerate}
\end{enumerate}
...
\ref{mylabel}

上面\ref给了我类似的内容1a,但我希望它只给我a

答案1

在 LaTeX 中,内部宏\p@enumN\theenumN定义命令的输出\ref。(参考source2e)标准文档类中的默认定义是(参考classes):

\renewcommand\theenumi{\@arabic\c@enumi}
\renewcommand\theenumii{\@alph\c@enumii}
\renewcommand\theenumiii{\@roman\c@enumiii}
\renewcommand\theenumiv{\@Alph\c@enumiv}
\renewcommand\p@enumii{\theenumi}
\renewcommand\p@enumiii{\theenumi(\theenumii)}
\renewcommand\p@enumiv{\p@enumiii\theenumiii}

您可以重新定义\p@enumii以获得您想要的:

\makeatletter % for internal macros with @
\renewcommand\p@enumii{}
\makeatother

似乎您正在使用enumerate包来更改标签。但是,enumerate不能很好地处理交叉引用。我建议使用更现代的包enumitem来替换enumerate,这也可以使用键值语法来缓解问题。例如:

% \usepackage{enumitem} % in preamble
\begin{enumerate}[label=(\arabic*)]
\item
  \begin{enumerate}[label=(\alph*),ref=\alph*]
    \item \label{mylabel} Referenced point.
  \end{enumerate}
\end{enumerate}

相关内容