各位——关于如何在其他地方获取枚举/描述列表的各种提示(例如枚举描述列表,自动编号描述列表) 工作出色。
但是,不知为何我无法让引用起作用。下面描述了一个最简单的版本。
\documentclass[11pt]{amsart}
% Version 3.5.2 -- 2011-09-28
\usepackage{enumitem}
\newcounter{descriptcount}
\newcounter{descriptcount2}
\newlist{enumdescript}{description}{2}
\setlist[enumdescript,1]{%
ref=\arabic{descriptcount},%
before={%
\setcounter{descriptcount}{0}%
\renewcommand*\thedescriptcount{\arabic{descriptcount}}
},%
font=\bfseries\refstepcounter{descriptcount}\thedescriptcount~,%
}
\setlist[enumdescript,2]{%
ref=\arabic{descriptcount}.\arabic{descriptcount2},%
before={%
\setcounter{descriptcount2}{0}%
\renewcommand*\thedescriptcount{\arabic{descriptcount}.\arabic{descriptcount2}}
},%
font=\bfseries\refstepcounter{descriptcount2}\thedescriptcount~,%
}
\begin{document}
\begin{enumdescript}
\item[Tada] Foo \label{foo}
\item[Taba] Bar
\begin{enumdescript}
\item[Dro] Boo
\item[Dra] Zoo \label{zoo}
\end{enumdescript}
\item Lets talk about \ref{zoo} and \ref{foo}.
\end{enumdescript}
\end{document}
其结果如下所示:
特别值得注意的是,引用为空(即甚至没有 ??)。控制台上没有信息。希望得到建议,看看在哪里可以找到。
答案1
该font=...
技巧将计数器放在标签周围的组内,因此使用\refstepcounter
而不是\stepcounter
没有帮助。
主要问题是,ref=
在没有分配数字的环境中,密钥无效description
。因此,必须使用间接方法在正确的时间设置标签:
\documentclass[11pt]{amsart}
% Version 3.5.2 -- 2011-09-28
\usepackage{enumitem}
\newcounter{descriptcounti}
\newcounter{descriptcountii}
\renewcommand*\thedescriptcountii{\thedescriptcounti.\arabic{descriptcountii}}
\newcommand*\refdescriptionlabel[1]{%
\hspace\labelsep\stepcounter{descriptcount\edlevel}%
\normalfont\bfseries\csname thedescriptcount\edlevel\endcsname~#1:%
\aftergroup\setedref\aftergroup\edlevel}
\makeatletter
\newcommand{\setedref}[1]{\edef\@currentlabel{\csname thedescriptcount#1\endcsname}}
\newlist{enumdescript}{description}{2}
\setlist[enumdescript,1]{
before={\setcounter{descriptcounti}{0}\let\makelabel\refdescriptionlabel\def\edlevel{i}},
}
\setlist[enumdescript,2]{
before={\setcounter{descriptcountii}{0}\let\makelabel\refdescriptionlabel\def\edlevel{ii}},
}
\begin{document}
\begin{enumdescript}
\item[X] Foo \label{foo}
\item[Y] Bar
\begin{enumdescript}
\item[A] Boo
\item[B] Zoo \label{zoo}
\end{enumdescript}
\item[Z] Lets talk about \ref{zoo} and \ref{foo}.
\end{enumdescript}
\end{document}
答案2
我给出了与 egreg 的答案略有不同的解决方法。这基本上来自这个答案。
首先您需要使用\refstepcounter
而不是\stepcounter
。
接下来,您需要将 放入\label
可选参数中\item
,其原因基本上与 egreg 所解释的一样。
代码:
\documentclass[11pt]{amsart}
\usepackage{enumitem}
\newcounter{descriptcounti}
\newcounter{descriptcountii}
\renewcommand*\thedescriptcounti{\arabic{descriptcounti}}
\renewcommand*\thedescriptcountii{\arabic{descriptcounti}.\arabic{descriptcountii}}
\newlist{enumdescript}{description}{2}
\setlist[enumdescript,1]{%
before={%
\setcounter{descriptcounti}{0}},%
font=\bfseries\refstepcounter{descriptcounti}\thedescriptcounti~,%
}
\setlist[enumdescript,2]{%
before={%
\setcounter{descriptcountii}{0}},%
font=\bfseries\refstepcounter{descriptcountii}\thedescriptcountii~,%
}
\begin{document}
\begin{enumdescript}
\item[\label{foo}] Foo
\item Bar
\begin{enumdescript}
\item Boo
\item[\label{zoo}] Zoo
\end{enumdescript}
\item Lets talk about \ref{zoo} and \ref{foo}.
\end{enumdescript}
\end{document}