您好,我构建了一个带有计数器的客户列表环境,我希望能够引用与计数器关联的标签的名称。以下代码会产生类似以下的输出:
要求
- 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
同样的目标可能并不遥远(即,读者领域的练习!)