在复杂环境中使用 hyperref 的 \nameref 的 Enumitem

在复杂环境中使用 hyperref 的 \nameref 的 Enumitem

我提供了我主要期望输出的序言,因为有人告诉我,我下面的方法本质上是错误的(因为\nameref没有设计或无法获得数字,而不是描述性标签)。

尽管如此,我还是希望能够有一个命令,比如\nameref,给定一个标签来检索enumerate与其各自项目相关的计数器。

enumerate item我的目标是能够在单个 (目前已通过 实现) 和多个标签上下文中引用s \ref。例如,我希望能够继续执行\ref{<label1>},但也能执行类似 的操作\multirefs{<label1>, <label2>}并产生以下输出结果:

\ref{<label1>}: (A_{1}) ← 目前有效

\multirefs{<label1>, <label2>}: (A_{1}, A_{2}) ← 这就是我想要的

然而,我最感兴趣的是更通用的方法,类似于链接答案


我正在尝试\namerefenumitem。为此,我使用了关于此主题的现有答案

然后,我将该答案中的文档代码包装在自定义命令中,如下所示(部分改编自另一个答案):

\newcommand{\labelleditem}[1]{%
                                 \stepcounter{enumi}%
                                 \item[{\theenumi{}}\label{#1}]%
                             }

我想利用description环境,带有环境的可选参数enumerate,如下所示:

\begin{description}[label={($\text{A}_{\arabic*}$)}, series=name, resume=name]
    \labelleditem{Broken} XXX
    \item XXX
\end{description}

这不起作用,大概部分是由于description环境没有完全实施或提供enumitem可选参数。

为了澄清起见,我只想使用列表enumerate,如下面的 MWE 所示。然而,我不知道如何正确地调整关于此主题的现有答案,它使用一个description列表,到一个enumerate列表。

我怎样才能让它工作,类似于关于此主题的现有答案,但是需要我的附加规格,如上所示?

或者,我怎样才能\nameref通过更通用或更直接的补丁来工作enumitem


梅威瑟:

\documentclass{article}

\usepackage{enumitem}

\makeatletter
\newcommand\enit@descriptionlabel@hook[1]{}
\def\enit@description@i#1#2#3#4{%
  \ifnum#1>#3\relax
    \enit@toodeep
  \else
    \enit@list{}%
      {\let\enit@type\tw@
       \advance#1\@ne
       \labelwidth\z@
       \enit@align@left
       \let\makelabel\descriptionlabel
       \enit@style@standard
       \enit@preset{#2}{#1}{#4}%
       \enit@calcleft
       \let\enit@svlabel\makelabel
       \def\makelabel##1{%
         \NR@gettitle{##1}%
         \labelsep\z@
         \ifenit@boxdesc
           \enit@svlabel{\enit@align{\enit@format{\enit@descriptionlabel@hook{##1}}}}%
         \else
           \nobreak
           \enit@svlabel{\enit@format{\enit@descriptionlabel@hook{##1}}}%
           \aftergroup\enit@postlabel
         \fi}%
       \enit@before
       \enit@negwidth%
       }%
     \enit@keyfirst
  \fi}

\usepackage{hyperref}

\AtBeginDocument{\let\descriptionlabel\NRorg@descriptionlabel}
\renewcommand\enit@descriptionlabel@hook[1]{\NR@gettitle{#1}#1}

\newcommand{\labelleditem}[1]{%
                             %\label{#1}%
                             \stepcounter{enumi}%
                             \item[{\theenumi{}}\label{#1}]%
                             %
                             }
% -------------------------------------

\begin{document}


\begin{description}
  \item [{Test}\label{Test}] Some text
\end{description}

\begin{description}[label={($\text{A}_{\arabic*}$)}, series=name, resume=name]
    \labelleditem{Broken} XXX
    \item XXX
\end{description}

\nameref{Test}

\nameref{Broken}

\end{document}

上述代码生成:

上述 MWE 的编译输出

它还输出以下错误:

Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.57 ...}_{\arabic*}$)}, series=name, resume=name]

我也提供这个 MWE背页

答案1

从评论中我猜你不想要描述或 nameref,而只是想要一个带有特殊标签的枚举列表:

\documentclass{article}

\usepackage{enumitem}
\usepackage{hyperref}

\begin{document}

\begin{enumerate}[label={(A\textsubscript{\arabic*})}, series=name, resume=name]
    \item\label{test} XXX
    \item XXX
\end{enumerate}

\ref{test}


\end{document}

在此处输入图片描述

答案2

回答已证明,在这个问题的最新版本中提供的信息已经足够。

相关内容