有没有办法通过标签获取任何部分(章节、部分、小节等)的名称,而不仅仅是当前部分的名称?就像命令一样\nameref
,但是 hyperref 包已加载,并且在某些情况下我不想要可点击的链接。我正在考虑使用类似 的命令\getnameofsection{sec:...}
。
例如:
\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}
\newcommand*{\getnameofsection}[1]{%get the name section referenced by its label as parameter
}
\begin{document}
\section{Introduction}
\label{sec:introduction}
An introduction...
\section{Discussion}
\label{sec:discussion}
A discussion...
\subsection{Pros}
\label{sec:discussion:pros}
The advantages...
\subsection{Cons}
\label{sec:discussion:cons}
The disadvantages. As mentioned in \getnameofsection{sec:introduction}...
\end{document}
谢谢!
答案1
首先,提供一个完整的最小示例非常重要,特别是hyperref
涉及到开始时。
该nameref
软件包通常会允许使用 检索存储的章节标题\nameref{label}
。每当hyperref
加载时\nameref
, 都会自然地变成超链接。与许多(但不是全部)链接给出结构一样,有一个省略链接的带星号的版本。
因此在这种情况下使用\nameref*
。
请注意,像这样的类具有内置memoir
功能,因此不需要包。\nameref
nameref
答案2
我假设你指的是数字而不是“标签”,因为你说的是没有参考。
这是可能的,但需要做一些工作。如果您有目录,您可以将目录加载到您已重新定义的组中,\contentsline
以按编号将标题保存到其自己的宏中。一些可能不起作用的代码:
\begingroup
\def\parsecontentsline#1#2#3!!!{%
\ifx\numberline#1%
\global\@namedef{namebynum#2}{#3}%
\fi
}
\def\contentsline#1#2#3#4{%
\parsecontentsline#2!!!%
}
\@input{\@jobname.toc}
\endgroup
\NewDocumentCommand{\namebynumber}{m}{\@nameuse{namebynum#1}}
如果您要将任何其他内容添加到目录中,这些命令也需要在组内禁用(当然,上述操作需要\makeatletter
……\makeatother
才能正常工作)。但由于您不一定知道章节编号,因此不尝试避开包可能nameref
并不是一个坏主意(尽管nameref
可能不适用于某些文档类)。