我正在使用该tocloft
包创建一个新的列表“问题”,并且我想使用\nameref
(从包中)在我的文档中的某个点\hyperref
手动列出问题(不使用):\listofquestion
\documentclass{article}
\usepackage{hyperref}
\usepackage{tocloft}
\begin{document}
\newlistof{question}{qcnt}{List of Questions}
\newcommand{\question}[1]{%
\par\vspace{5mm}\noindent%
\refstepcounter{question}\textbf{Q\thequestion:~#1}%
\phantomsection\addcontentsline{qcnt}{question}
{\protect\numberline{Q\thequestion}#1}
\par
}
\section{Questions}
\label{sect:questions}
\nameref{q:bla} %prints "Questions"
\question{bla?}
\label{q:bla}
\end{document}
但是,我得到的是最后一部分的名称(在本例中为“问题”)而不是问题的名称(在本例中为“bla?”)作为输出\nameref{q:bla}
。
我该如何修复这个问题?我做错了什么?任何帮助我都非常感谢。
答案1
您必须启用\nameref
才能知道当前标题,即在命令\NR@gettitle{#1}
中使用\question
将标题的信息存储到标签信息中,该信息将写入文件.aux
。这是通过\NR@gettitle
(实际上是通过\newlabel
)完成的
\documentclass{article}
\usepackage{tocloft}
\newlistof{question}{qcnt}{List of Questions}
\usepackage{hyperref}
\makeatletter
\newcommand{\question}[1]{%
\par\vspace{5mm}\noindent%
\refstepcounter{question}%
\NR@gettitle{#1}%
\textbf{Q\thequestion:~#1}%
\phantomsection\addcontentsline{qcnt}{question}
{\protect\numberline{Q\thequestion}#1}
\par
}
\makeatletter
\begin{document}
\section{Questions}
\label{sect:questions}
\nameref{q:bla}
\question{bla?}
\label{q:bla}
\end{document}
这是相应的.aux
文件:
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\@writefile{toc}{\contentsline {section}{\numberline {1}Questions}{1}{section.1}}
\newlabel{sect:questions}{{1}{1}{Questions}{section.1}{}}
\@writefile{qcnt}{\contentsline {question}{\numberline {Q1}bla?}{1}{section*.1}}
\newlabel{q:bla}{{1}{1}{bla?}{section*.1}{}}
可以看到,bla?
标题已输入到标签中。稍后q:bla
会抓取。\nameref