为自定义环境命名

为自定义环境命名

我已经定义了一个自定义环境:

\documentclass[11pt]{article}
\usepackage[table,hyperref]{xcolor}     % Better control over color
\usepackage[colorlinks=true, linkcolor=DarkBlue, citecolor=DarkBlue, urlcolor=DarkBlue, breaklinks=true]{hyperref}

\usepackage[nameinlink]{cleveref}
\newcommand{\questid}[1]{\renewcommand{\givenquestid}{#1}}
\newcommand{\questtitle}[1]{\renewcommand{\givenquesttitle}{#1}}

\newcommand{\givenquestid}{REQUIRED!}
\newcommand{\givenquesttitle}{REQUIRED!}
\newcounter {questc}
\newenvironment{quest}%
{
    \small
    \rowcolors{1}{}{lightgray}
}%
{
    \refstepcounter{questc}\label{quest:\givenquestid}
    Something goes here.
}
\crefname{questc}{Quest}{Quests}
\begin{document}
\begin{quest}
    \questid{1}
    \questtitle{Collect wolf pelts}
\end{quest}
\end{document}

我想用\nameref标题来引用环境。也就是说,我想\nameref{quest:1}给出这样的引用:“任务 1:收集狼皮。”

如何在自定义环境中指定名称格式?

答案1

\@currentlabelname如果你想的话,你必须设置nameref提取适当的内容。由于您使用 指定问题标题\questtitle,因此您可以使用以下方式合并此添加内容:

\makeatletter
\newcommand{\questtitle}[1]{%
  \renewcommand{\givenquesttitle}{#1}%
  \protected@edef\@currentlabelname{Quest~\givenquestid: #1}}
\makeatother

相关内容