我已经使用该软件包写了一篇文章easybmat
,现在是时候制作beamer
幻灯片了……但是,正如你所看到的这里,为了加载和easybmat
(tikz
或pgf
?),需要第一的加载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
和,从而让问题消失:easybmat
tikz
\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.sty
。etex.sty
的问题在于easybmat.sty
它调用了 包easy.sty
,该包使用 声明了一些新维度\global\newdimen
。在\global
前面放\newdimen
不是必要的,但通常是无害的。但是,在这里,它不是无害的,因为etex.sty
已加载和(必须满足这两个条件)在原始 TeX 寄存器和扩展 eTeX 引擎寄存器之间切换时,会发生\newdimen
和。原因可以在包含 的宏的代码中找到。发生的事情是before被应用于此,从而触发错误。解决问题的一种(不太优雅的)方法是在 之前放置一个虚拟定义。它不应该(我希望)有任何副作用。\global
etex.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}