应显示以下 MWE
(2)测试
(2')测试
参考(2')。
但最后一行只说“参考”,没有引用。我该如何达到想要的效果?
\documentclass[a4paper,12pt]{article}
\usepackage{enumerate}
\begin{document}
\begin{enumerate}
\item[(2)]\label{item:2} Test
\item[(2')]\label{item:2p} Test
\end{enumerate}
Reference to \ref{item:2p}.
\end{document}
答案1
由于\item[foo]
没有使用 增加enumi
计数器(这里是enumerate
第一级的环境)\refstepcounter
,\label
命令无法应用正确的参考“数字”——这是由宏生成\refstepcounter
并存储在\@currentlabel
宏中——不\refstepcounter
意味着\@currentlabel
这里是空的。
一种方法是使用包装器命令,并将\myitem
参数存储为\@currentlabel
值。这样,\label
就可以按预期工作。
由于\@currentlabel
是一个@
- 字母 - 命令,因此该\makeatletter...\makeatother
对必须围绕 的定义\myitem
。
当然,的名称\myitem
有点任意,只要不使用已经存在的命令序列或原语的名称即可。
\documentclass[a4paper,12pt]{article}
\usepackage{enumerate}
\makeatletter
\newcommand{\myitem}[1]{%
\item[#1]\protected@edef\@currentlabel{#1}%
}
\makeatother
\begin{document}
\begin{enumerate}
\myitem{(2)}\label{item:2} Test
\myitem{(2')}\label{item:2p} Test
\end{enumerate}
Reference to \ref{item:2} and \ref{item:2p}
\end{document}