我想重新定义 Beamer 定理类环境的块模板。例如,环境example
创建一个exampleblock
。我想让definition
环境做同样的事情。
可以使用exampleblock
环境在本地执行此操作:
\begin{exampleblock}{Definition}
(Definition here)
\end{exampleblock}
然而,我希望有一个全球性的解决方案。
我应该补充一下,同样的问题也经常被问到在 Stackoverflow 上,但似乎没人找到解决方案。
答案1
您可以设置theorem begin
和theorem 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}