\documentclass[12pt]{article}
\usepackage{hyperref}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{hyperref}
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\begin{document}
\begin{lemma}
\label{lemma:1.11}
Lemma.
\end{lemma}
\begin{proof}[Proof of \texorpdfstring{\hyperref[lemma:1.1]{Lemma 1.1}}{Lemma 1.1}]
Proof.
\end{proof}
\end{document}
这会引发
Package hyperref Info: bookmark level for unknown lemma defaults to 0 on input
line 19.
! Argument of \Hy@babelnormalise has an extra }.
我怎样才能解决这个问题?
我注意到删除 thmtools 包可以解决问题,但我需要它,所以这不是一个有效的解决方案。
答案1
首先,hyperref
应该在大多数包之后加载,但不包括以下包cleveref
。
thmtools
对可选证明标题确实进行了保护\edef
,因此脆弱的命令\texorpdfstring
应该受到保护。\hyperref
是强大的。
\protect\texorpdfstring{\hyperref[lemma:1.1]{Lemma 1.1}}{Lemma 1.1}
另外繁琐的\texorpdfstring{\hyperref[<label>]{<text>}}{<text>}
可以简化为\autoref*{<label>}
。 的星号形式\autoref
不会添加链接,\autoref
已经由 的书签机制处理hyperref
。
\documentclass[12pt]{article}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{hyperref}
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\begin{document}
\tableofcontents
\begin{lemma}
\label{lemma:1.11}
Lemma.
\end{lemma}
\begin{proof}[Proof of \autoref*{lemma:1.11}]
Proof.
\end{proof}
\section{Test use in bookmarks \autoref*{lemma:1.11}}
\end{document}
答案2
虽然 muzimuzhi Z 已经给出了更好的答案,但这是我的分析。在我看来,你想做的事情有点晦涩难懂。另外,我不确定你的\newtheorem
部分是否正确。
我的建议是:如果你要做新的事情,不要一次做太多。最好是尽早以可控的方式失败,采取小步骤。
\documentclass[12pt]{article}
\usepackage{hyperref}
\usepackage{amsthm}
%\usepackage{thmtools} % <<< this package creates tons of errors at Proof-original
%\usepackage{hyperref}
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\begin{document}
\begin{lemma}
\label{lemma:1.11}
Lemma.
\end{lemma}
\begin{proof}[Proof of
% the next command created problems, so I simplified it a little for analysis
\texorpdfstring{\ref{lemma:1.11}}{Lemma 1.1}% check: replacing with an aordinary reference
]
Proof.
\end{proof}
% lemma:1.1 should be lemma:1.11, see above
\begin{proof}[Proof of \texorpdfstring{\hyperref[lemma:1.11]{Lemma 1.11}}{Lemma 1.11}]
Proof-original.
\end{proof}
\end{document}