分层枚举环境中的命令的标准行为\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
如果您好奇的话:对于mycounter
LaTeX 创建的每个计数器(例如),它都会自动创建一个“前缀宏”(\p@mycounter
在本例中称为),该宏指定在交叉引用情况下应在计数器前添加什么(如果有的话)。对于大多数计数器,关联的前缀宏为空,即没有添加任何前缀。但是,正如您所发现的,对于计数器enumii
、enumiii
和,前缀宏实际上会执行一些操作。例如,的enumiv
默认值为。要取消设置此设置,必须运行指令。\p@enumii
\theenumi
\renewcommand
附言:需要指令\makeatletter
和\makeatother
来删除符号的“TeX-special”属性@
。
答案2
\makeatletter
\let\p@enumii\@empty
\makeatother
让您摆脱“前导”项目编号。如果您有多个一级列表,请谨慎操作:事情可能会变得混乱。
如果你确实想使用外部包,enumitem
也可以为你做到这一点
\usepackage{enumitem}
\setlist[enumerate,2]{ref=\theenumii}