获取任意标记部分的名称

获取任意标记部分的名称

有没有办法通过标签获取任何部分(章节、部分、小节等)的名称,而不仅仅是当前部分的名称?就像命令一样\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功能,因此不需要包。\namerefnameref

答案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可能不适用于某些文档类)。

相关内容