1

I am using my own list-like environment and have problems referencing items in it. Here is the code:

\documentclass{article}

\usepackage{enumitem}
\usepackage{lipsum}
\usepackage{hyperref}
\newcounter{qcounter}

\newenvironment{questions}{
    \begin{list}{ 
        }{
            \renewcommand{\makelabel}[1]{%
                \textbf{\refstepcounter{qcounter}\arabic{qcounter}.##1}
            }%
        } 
    }{ 
    \end{list}
}

\begin{document}

    \begin{questions}

        \item \lipsum[2] \label{one}

        \item Here should be a clickable link to item number one~\ref{one} and four~\ref{four}.

        \item[${}^{*}$] \label{three}

        \item[\textsubscript{four}] \label{four} And here is link to number tree~\ref{three}.

    \end{questions}

\end{document}

The references do not appear in the text:

enter image description here

How can I make clickable links without using the standart enumerate (I would like to keep the functionality of my own list)?

1 Answers1

1

It appears \makelabel is used inside a group, and \@currentlabel is local to that group. Fortunately, \@currentHref is already global.

Some of the charges are gratuitous, but I was copying the definition of description from article.cls.

\documentclass{article}

\usepackage{enumitem}% not used here
\usepackage{lipsum}
\usepackage{hyperref}
\newcounter{qcounter}

\makeatletter
\newcommand*\questionlabel[1]{\refstepcounter{qcounter}%
  \global\let\@currentlabel=\@currentlabel
  \normalfont\bfseries \arabic{qcounter}.#1}
\makeatother

\newenvironment{questions}{%
    \list{}{\let\makelabel=\questionlabel}%
  }{\endlist}

\begin{document}

    \begin{questions}

        \item \lipsum[2] \label{one} (\csname @currentlabel\endcsname)

        \item Here should be a clickable link to item number one~\ref{one} and four~\ref{four}.

        \item[${}^{*}$] \label{three}

        \item[\textsubscript{four}] \label{four} And here is link to number tree~\ref{three}.

    \end{questions}

\end{document}
John Kormylo
  • 79,712
  • 3
  • 50
  • 120