在 beamer 中重新定义块环境

在 beamer 中重新定义块环境

我正在尝试重新定义block环境,beamer以便itemize/enumerate项目符号遵循的颜色block title而不是structure

\documentclass{beamer}

\renewenvironment<>{block}[1]{%
    \begin{actionenv}#2%
      \def\insertblocktitle{#1}%
      \par%
      \mode<presentation>{%
        \setbeamercolor{local structure}{use=block title,%
           fg=block title.bg}}%
      \usebeamertemplate{block begin}}
    {\par%
      \usebeamertemplate{block end}%
    \end{actionenv}}

但这立即引发错误

ERROR: LaTeX Error: Command \beamerx@\block already defined.

这看起来与讨论的问题非常相似:如何在 Beamer 中重新定义 \emph 命令?

上述线程最终发现了 beamer 中的一个 bug,该 bug 4 年前就被修补过了,我想知道这是否可能是 beamer 更新环境中的一个类似 bug。

答案1

是的,这似乎也是\newenvironment中的一个类似的错误beamer。该问题与 Loop Space 在 中提到的问题相同his answer如何在 Beamer 中重新定义 \emph 命令?。该问题似乎与链接答案中提到的问题相同,“解决方案”也类似。

下面,我在 的定义中的两处\newcommand用替换了(文件 中的原始定义);更改的地方已标记。\renewcommand\beamer@newenvnooptbeamerbaselocalstructure.sty%<- here

请您自己承担风险使用。

\documentclass{beamer}

% ``Fix'' for possible bug
\makeatletter
\long\def\beamer@newenvnoopt#1#2#3#4{%
  \expandafter\renewcommand\expandafter<\expandafter>\csname#1\endcsname[#2]{#3}%<- here
  \expandafter\long\expandafter\def\csname end#1\endcsname{#4}%
}
\long\def\beamer@newenvopt#1#2[#3]#4#5{%
  \expandafter\renewcommand\expandafter<\expandafter>\csname#1\endcsname[#2][#3]{#4}%<- here
  \expandafter\long\expandafter\def\csname end#1\endcsname{#5}%
}
\makeatother

\renewenvironment<>{block}[1]{%
    \begin{actionenv}#2%
      \def\insertblocktitle{#1}%
      \par%
      \mode<presentation>{%
        \setbeamercolor{local structure}{use=block title,%
           fg=block title.bg}}%
      \usebeamertemplate{block begin}}
    {\par%
      \usebeamertemplate{block end}%
    \end{actionenv}}

\begin{document}

\begin{frame}
\begin{block}{A test new block}
test
\end{block}
\end{frame}

\end{document}

beamer我已经就此事联系了其中一位维护人员。

相关内容