为类似 Beamer 定理的环境重新定义块模板

为类似 Beamer 定理的环境重新定义块模板

我想重新定义 Beamer 定理类环境的块模板。例如,环境example创建一个exampleblock。我想让definition环境做同样的事情。

可以使用exampleblock环境在本地执行此操作:

\begin{exampleblock}{Definition}
(Definition here)
\end{exampleblock}

然而,我希望有一个全球性的解决方案。

我应该补充一下,同样的问题也经常被问到在 Stackoverflow 上,但似乎没人找到解决方案。

答案1

您可以设置theorem begintheorem end模板来使用exampleblock

\documentclass{beamer}
\usetheme{CambridgeUS}

\makeatletter
\setbeamertemplate{theorem begin}
{%
  \begin{exampleblock}
  {%
%    \inserttheoremheadfont% uncomment if you want amsthm-like formatting
    \inserttheoremname
    \inserttheoremnumber
    \ifx\inserttheoremaddition\@empty\else\ (\inserttheoremaddition)\fi%
    \inserttheorempunctuation
  }%
}
\setbeamertemplate{theorem end}{\end{exampleblock}}
\makeatother

\begin{document}

\begin{frame}
\begin{definition}
Test text.
\end{definition}
\begin{exampleblock}{Definition}
(Definition here)
\end{exampleblock}
\end{frame}

\end{document}

在此处输入图片描述

上述解决方案使所有类定理环境继承的设置exampleblock;如果默认definition环境必须表现得像exampleblock,那么我们所要做的就是更改使用的默认样式,definition使其等于example样式;实现这一点的一个简单方法是将\let命令\definition\enddefinition都设置为\relax,然后使用\newtheorem来定义使用样式的定义结构example

展示这种方法的示例;definition表现为exampleblock,但所有其他类定理结构都保留其默认行为:

\documentclass{beamer}
\usetheme{CambridgeUS}

\let\definition\relax
\let\enddefinition\relax

\theoremstyle{example}
\newtheorem{definition}[theorem]{\translate{Definition}}

\begin{document}

\begin{frame}
\begin{definition}
Test text.
\end{definition}
\begin{exampleblock}{Definition}
Test text.
\end{exampleblock}
\begin{theorem}
Test text.
\end{theorem}
\end{frame}

\end{document}

在此处输入图片描述

相关内容