我正在尝试重新定义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@newenvnoopt
beamerbaselocalstructure.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
我已经就此事联系了其中一位维护人员。