enumitem – 标签很好 – 但引用定义为空

enumitem – 标签很好 – 但引用定义为空

各位——关于如何在其他地方获取枚举/描述列表的各种提示(例如枚举描述列表自动编号描述列表) 工作出色。

但是,不知为何我无法让引用起作用。下面描述了一个最简单的版本。

\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}

相关内容