同时使用 `easybmat` 和 `beamer`

同时使用 `easybmat` 和 `beamer`

我已经使用该软件包写了一篇文章easybmat,现在是时候制作beamer幻灯片了……但是,正如你所看到的这里,为了加载和easybmattikzpgf?),需要第一的加载etex包。我不知道如何在 documentclass 中执行此操作,beamer因为最简单的示例失败了:

\documentclass[beamer]{beamer}

\usepackage{easybmat} % I get different errors depending  
\usepackage{etex}     % on the order of these two lines 

\begin{document}
test
\end{document}

我是否需要求助于 \LoadClass 解决方案?(是的,我需要帮助......)

答案1

我已经遇到过一次这个错误。这里有两种解决方案可以解决这个问题;第一种方法快速且容易实施,而第二种方法需要查看问题发生的位置。

解决方案 1。可以\documentclass使用\RequirePackage而不是 来预先加载包\usepackage。这样就可以预先加载etex和,从而让问题消失:easybmattikz

\RequirePackage{etex}
\RequirePackage{easybmat}
\documentclass[beamer]{beamer}
\begin{document}
test
\end{document}

解决方案 2。先加载easybmat然后加载etex是行不通的,因为没有足够的dimen寄存器可用于easybmat。所以您必须etex先 加载easybmat第二个。错误消息变为You can't use a prefix with '\begingroup'。此错误的原因是由于 和easybmat.styetex.sty的问题在于easybmat.sty它调用了 包easy.sty,该包使用 声明了一些新维度\global\newdimen。在\global前面放\newdimen不是必要的,但通常是无害的。但是,在这里,它不是无害的,因为etex.sty已加载(必须满足这两个条件)在原始 TeX 寄存器和扩展 eTeX 引擎寄存器之间切换时,会发生\newdimen和。原因可以在包含 的宏的代码中找到。发生的事情是before被应用于此,从而触发错误。解决问题的一种(不太优雅的)方法是在 之前放置一个虚拟定义。它不应该(我希望)有任何副作用。\globaletex.sty\alloc@etex.sty\begingroup\global\newdimen\begingroup\begingroup

\documentclass[beamer]{beamer}

\usepackage{etex}
\makeatletter
\def\alloc@#1#2#3#4#5%
 {\ifnum\count1#1<#4% make sure there's still room
    \allocationnumber\count1#1
    \global\advance\count1#1\@ne
    \global#3#5\allocationnumber
    \wlog{\string#5=\string#2\the\allocationnumber}%
  \else\ifnum#1<6
    \def\etex@dummy@definition{}% <-- code added
    \begingroup \escapechar\m@ne
    \expandafter\alloc@@\expandafter{\string#2}#5%
  \else\errmessage{No room for a new #2}\fi\fi
 }
\makeatother
\usepackage{easybmat}

\begin{document}
test
\end{document}

相关内容