我正在使用 hyperref 和 cleveref 包制作 pdf 书签。但是,pdf 书签显示我定义的标签,而不是标签引用的定理名称。以下是代码:
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\begin{document}
\section{Section 1}
\begin{theorem}\label{some label}
This is a theorem.
\end{theorem}
\section{Proof to \Cref{some label}}
\end{document}
这是 PDF:
知道如何将标签从“某些标签的证明”改为“定理 1 的证明”吗?
答案1
恐怕除了使用命令之外没有其他解决方案,\texorpdfstring
即您必须指定文本中要包含的内容以及书签中要包含的内容。
因此,替代
\section{Proof to \Cref{some label}}
和
\section{Proof to \texorpdfstring{\Cref{some_label}}{Theorem \ref{some_label}}}
请注意,标签名称中带有空格不是一个好主意,因此我用 代替some label
了some_label
。
梅威瑟:
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\begin{document}
\section{Section 1}
\begin{theorem}\label{some_label}
This is a theorem.
\end{theorem}
\section{Proof to \texorpdfstring{\Cref{some_label}}{Theorem \ref{some_label}}}
\end{document}
输出:
答案2
在制作书签时\Cref
不能使用该命令;但是,它可以工作(尽管功能较弱)。对于像这样的简单应用程序,您可以执行以下操作:\section
\autoref
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\pdfstringdefDisableCommands{\let\Cref\autoref}
\newtheorem{theorem}{Theorem}
\begin{document}
\section{Section 1}
\begin{theorem}\label{some_label}
This is a theorem.
\end{theorem}
\section{Proof to \Cref{some_label}}
\end{document}
答案3
基于菲利佩·奥莱尼克的解决方案:https://tex.stackexchange.com/a/485979/128042
可以将该crossreftools
包与一些自定义代码一起使用。
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\usepackage{crossreftools}
\pdfstringdefDisableCommands{%
\let\Cref\crtCref
\let\cref\crtcref
}
\newtheorem{theorem}{Theorem}
\begin{document}
\section{Section 1}
\begin{theorem}\label{some_label}
This is a theorem.
\end{theorem}
\section{Proof to \Cref{some_label}}
\end{document}
这会自动创建正确的 pdf 书签(在 TexXStudio 中必须编译两次)。(如果您还想删除链接的颜色,请参阅 菲利佩·奥莱尼克的解决方案:https://tex.stackexchange.com/a/485979/128042。
PS:这个答案也得到了改进乌尔丽克·菲舍尔评论https://tex.stackexchange.com/a/504970/128042(回答等效问题pdf 书签(章节标题)中 \ref 的自动 \texorpdfstring)。