想要在 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}