\nameref:如何获取计数器的标签值而不是部分名称

\nameref:如何获取计数器的标签值而不是部分名称

您好,我构建了一个带有计数器的客户列表环境,我希望能够引用与计数器关联的标签的名称。以下代码会产生类似以下的输出:

要求

  • REQ1 要求一
  • REQ2 要求二

另一节

  • 我们想在这里阅读“要求一”:要求
  • 但是我们得到的是部分名称!

代码:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[bookmarks, colorlinks=true, linkcolor=black, citecolor=black, urlcolor=black]{hyperref}

\newcounter{reqcount}
\renewcommand{\thereqcount}{\textbf{REQ\arabic{reqcount}}}

\newenvironment{nfrequirements}
  { \begin{list}{\textbf{\thereqcount}}{\usecounter{reqcount}} }
  { \end{list} }

\newcommand{\requirement}[1]{
  \item \textbf{#1}
  \addcontentsline{toc}{subsection}{\thereqcount \quad #1}
}


\begin{document}
\tableofcontents

\section{Requirements Section}
\begin{requirements}
  \requirement{Requirement one} \label{req_one} \\
  description
  \requirement{Requirement two} \label{req_two} \\
  description
\end{requirements}

\section{Another Section}
We want read "Requirement One" here : \nameref{req_one}.
But instead we get the section name.

\end{document}

答案1

设置 \@currentlabelname:

\makeatletter
\newcommand{\requirement}[1]{%
  \item
  \def\@currentlabelname{#1}%
  \textbf{#1}
  \addcontentsline{toc}{subsection}{\thereqcount \quad #1}
}
\makeatother

答案2

这不是完全相同的事情,但请考虑以下几点:

\newenvironment{requirements}
  { \begin{list}{\textbf{\thereqcount}}{} }
  %{ \begin{list}{\textbf{\thereqcount}}{\usecounter{reqcount}} }
  { \end{list} }
\newcommand{\requirement}[1]{
  \refstepcounter{reqcount}
  \item \textbf{#1}
  \addcontentsline{toc}{subsection}{\thereqcount \quad #1}
}

包含\refstepcounter意味着计数器的值reqcount成为现在拾取的东西\label(而不是的参数\section,它将是最后调用的东西\refstepcounter)。

之后,\ref{req_one}扩展为“REQ1”。实现\nameref同样的目标可能并不遥远(即,读者领域的练习!)

相关内容