cleveref
我可以访问中的原始标签\crefformat
吗?在此 MWE 中,我尝试获取与第一行相同的输出,但使用第二行:
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\crefformat{section}{#2the \nameref*{#1} section#3}
\begin{document}
Please read the \nameref{sec:Introduction} section!
Please read \cref{sec:Introduction}!
\section{Introduction}
\label{sec:Introduction}
\end{document}
然而,我得到的是这样的:
line 9: Reference `1' on page 1 undefined
: There were undefined references.
这当然并不意外,因为在 中\crefformat
,#1
被节号 取代1
,如文档中所述。但是,#2
和#3
用于超链接, 和#4
不存在,所以我想知道我是否以及如何sec:Introduction
在 中访问原始标签(在本例中为 )\crefformat
。
我想一个解决方法是使用一个宏,给定 n,返回第 n 个部分标签,但我想这会变得混乱。
我的另一个想法是修补,也许在某种程度上使我的 MWE 用- 而不是-cleveref
有意义,因为当该部分没有数字时,它不会输出任何有用的内容(甚至没有或)。\section*
\section
\cref{sec:Introduction}
the
section
答案1
据我所知,没有办法直接访问当前标签名称,但可以将其存储在\cref@getref
(从而稍微改变命令,比如说定义)\@lastusedlabel
。
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\makeatletter
\def\cref@getref#1#2{%
\xdef\@lastusedlabel{#1}%
\expandafter\let\expandafter#2\csname r@#1@cref\endcsname%
\expandafter\expandafter\expandafter\def%
\expandafter\expandafter\expandafter#2%
\expandafter\expandafter\expandafter{%
\expandafter\@firstoftwo#2}}%
\creflabelformat{section}{#2the \nameref*{\@lastusedlabel} section#3}
\makeatother
\begin{document}
Please read the \nameref{sec:Introduction} section!
Please read \cref{sec:Introduction}!
\section{Introduction}
\label{sec:Introduction}
\end{document}