使用 hyperref 和 thmtools 时出错

使用 hyperref 和 thmtools 时出错
\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}

\autoref* 示例的输出

答案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}

在此处输入图片描述

相关内容