带有编号定理的 beamer 无法与 cleveref 配合使用

带有编号定理的 beamer 无法与 cleveref 配合使用

想要在 Beamer 演示中使用 cleveref。该文档定义了多个定理环境分享相同的计数器如下:

\documentclass{beamer}

\usepackage{cleveref}

\newtheorem{thm}{Theorem}
\newtheorem{cor}[thm]{Corollary}

\begin{document}

\begin{frame}
  \begin{cor}
    foo bar
  \end{cor}
\end{frame}

\end{document}

这会导致以下错误:

! Undefined control sequence.
\endbeamercolorbox ->\ifdim \beamer@colbox@sep 
                                               =0pt\else \vskip \beamer@colb...
l.14 \end{frame}

cor请注意,如果使用单独的计数器,则该示例可以正常工作,即如果第 6 行被替换为

\newtheorem{cor}{Corollary}

我找不到任何有用的信息。有什么办法可以让原始示例正常运行吗?

笔记:这是不是重复的这个问题. 克莱弗雷夫只要使用单独的计数器,就可以与 beamer 一起工作。我甚至可以稍后再添加\label推论\cref,一切都会正常工作。

但是,如果两个定理环境使用相同的计数器(如我的原始示例),则会发生错误,即使根本没有使用\label或。\cref

答案1

事实上,这cleveref与不符beamer;例如,\label不接受可选参数。

这里有一个可以满足您的要求的 hack。但是,我认为这不值得付出努力:您的听众不会记住定理数字,因此通过数字引用它们只会造成混淆。

\documentclass{beamer}
\usepackage{amsthm}
\usepackage{cleveref}

\newtheorem{thmx}{\theoremname}
\newenvironment{thm}{\def\theoremname{Theorem}\thmx}{\endthmx}
\newenvironment{cor}{\def\theoremname{Corollary}\thmx}{\endthmx}
\providecommand{\theoremname}{Theorem}
\crefname{thm}{Theorem}{Theorems}
\crefname{cor}{Corollary}{Corollaries}

\makeatletter
\AtBeginDocument{
  \def\beamer@label<#1>{%
    \def\hack@arg{#1}%
    \@ifnextchar[\beamer@label@opt\beamer@label@noopt
  }%
  \def\beamer@label@opt[#1]#2{%
    \expandafter\alt\expandafter<\hack@arg>%
      {\beamer@origlabel[#1]{#2}\beamer@nameslide{#2}}%
      {\beamer@dummynameslide}%
  }%
  \def\beamer@label@noopt#1{%
    \expandafter\alt\expandafter<\hack@arg>%
      {\beamer@origlabel{#1}\beamer@nameslide{#1}}%
      {\beamer@dummynameslide}%
  }%
}
\makeatother

\begin{document}

\begin{frame}
\begin{cor}\label[cor]{A}
foo bar
\end{cor}

\cref{A}

\end{frame}

\end{document}

在此处输入图片描述

相关内容