使用 amsbook 在 \section 中引用未定义的内容

使用 amsbook 在 \section 中引用未定义的内容

我有一个部分专门用于定理的证明,因此我使用

\section{Proof of Theorem~\ref{thm}}

当然,由于标题是大写的,它在生成标题时会要求输入 \ref{THM},我得到了一个明显的错误。处理这种情况的正确方法是什么?下面是 MWE:

\documentclass{amsbook}
\usepackage{lipsum}
\newtheorem{thm}{Theorem}
\begin{document}
\chapter{First Chapter}
\section{The Theorem}
\begin{thm}[Lipsum Theorem]
\label{thm}
\lipsum[1]
\end{thm}
\section{Proof of Theorem~\ref{thm}}
\lipsum[1-23]
\end{document}

编译时我得到:

LaTeX Warning: Reference `THM' on page 3 undefined on input line 14.

(每次生成一个标题),标题显示

`2. 定理证明??'

答案1

如果您不想四处乱逛并且不介意绕过您的问题:一个定理可以有多个标签,所以\label{THM}也请给出它。

答案2

一种解决方法是定义一个包含扩展引用的新宏,并在章节标题中使用该宏:

\edef\mythmref{\ref{thm}}
\section{Proof of Theorem~\mythmref}

答案3

由于amsbook使用不将数学表达式大写的宏\uppercasenonmath,因此您可以使用技巧进入数学模式以供参考:

\section{Proof of Theorem~$\text{\ref{thm}}$}

对我来说效果很好:在正文中、在目录中以及在页眉中。

答案4

您可以在使用之前定义\label并将它们的参数小写,如下所示:\ref

\expandafter\def\expandafter\label\expandafter#\expandafter1\expandafter{\expandafter\lowercase\expandafter{\label{#1}}}
\expandafter\def\expandafter\ref\expandafter#\expandafter1\expandafter{\expandafter\lowercase\expandafter{\ref{#1}}}
\expandafter\def\expandafter\eqref\expandafter#\expandafter1\expandafter{\expandafter\lowercase\expandafter{\eqref{#1}}}

然后,标签名称变得不区分大小写。

相关内容