为不同级别的枚举环境配置 \ref

为不同级别的枚举环境配置 \ref

分层枚举环境中的命令的标准行为\ref会创建具有以下结构的引用:enumi_label.enumii_label。我想配置\ref命令,以便引用仅有的打印第二级标签。使用 MWE 可能最容易理解这一点。

\documentclass{article}

\begin{document}
\begin{enumerate}
\item Bar\label{item:2}
  \begin{enumerate}
  \item Sub-foo.\label{item:3}
\item sub-bar.\label{item:4}
  \end{enumerate}
\end{enumerate}

Actual output: %
(\ref{item:2}); (\ref{item:3}); (\ref{item:4}).

Desired output: (1); (a); (b)

\end{document}

这将生成以下输出。

在此处输入图片描述

理想情况下,我想在不使用新包的情况下执行此操作,以避免与我正在使用的其他代码发生冲突。

答案1

你写了,

理想情况下,我想在没有新软件包的情况下做到这一点

在这种情况下,只需在序言中插入以下代码行:

\makeatletter
\renewcommand\p@enumii{}
\makeatother

如果您好奇的话:对于mycounterLaTeX 创建的每个计数器(例如),它都会自动创建一个“前缀宏”(\p@mycounter在本例中称为),该宏指定在交叉引用情况下应在计数器前添加什么(如果有的话)。对于大多数计数器,关联的前缀宏为空,即没有添加任何前缀。但是,正如您所发现的,对于计数器enumiienumiii和,前缀宏实际上会执行一些操作。例如,的enumiv默认值为。要取消设置此设置,必须运行指令。\p@enumii\theenumi\renewcommand

附言:需要指令\makeatletter\makeatother来删除符号的“TeX-special”属性@

答案2

\makeatletter
\let\p@enumii\@empty
\makeatother

让您摆脱“前导”项目编号。如果您有多个一级列表,请谨慎操作:事情可能会变得混乱。


如果你确实想使用外部包,enumitem也可以为你做到这一点

\usepackage{enumitem}
\setlist[enumerate,2]{ref=\theenumii}

相关内容