Chemfig 包装兼容性

Chemfig 包装兼容性

寻求以下问题的帮助:

我试图chemfig在我的文档中使用包,但是初次插入后出现以下错误:

!No room for a new \dimen.

我发现没有空间容纳新的\dimen并补充道:

\usepackage{etex}
\reserveinserts{28}

但现在我又遇到了另一个错误:

!You can't use a prefix  with \begingroup

我似乎无法在网上找到答案。任何有关此事的帮助都将不胜感激。

以下是最小工作示例:

\documentclass[12pt,doublespacing,letterpaper]{report}
\usepackage{etex}
\reserveinserts{28}
\usepackage{chemfig}

\usepackage{cite}
\usepackage{morehelp}
\usepackage{setspace}
\usepackage{easytable}
\usepackage{longtable}
\usepackage{amssymb}
\usepackage{amstext}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{dcolumn}

\begin{document}

\chapter{}

\chemfig {*6(-=-(- M{(}OH{)}_2)=-=)}

\end{document}

答案1

chemfigeasytable; 加载似乎有问题chemfig easytable解决了问题(我注释掉了加载morehelp包的行,因为我的 LaTeX 系统没有它):

\documentclass[12pt,doublespacing,letterpaper]{report} 
\usepackage{etex} 
\usepackage{cite} 
%\usepackage{morehelp} 
\usepackage{setspace} 
\usepackage{easytable} 
\usepackage{chemfig}
\usepackage{longtable} 
\usepackage{amssymb} 
\usepackage{amstext} 
\usepackage{amsmath} 
\usepackage{graphicx} 
\usepackage{dcolumn}

\begin{document}

\chapter{Test}

\chemfig {*6(-=-(- M{(}OH{)}_2)=-=)}

\end{document}

在此处输入图片描述

答案2

解决方案

重新排序加载顺序将解决此问题:贡萨洛的回答很好地证明了这一点。

根本原因

这里的根本问题是文件如何easy.sty分配寄存器:

%
% define dimens for internal computation.
%
\@tempcnta=30\relax
\@whilenum\@tempcnta>\z@\do{%
   \expandafter\global\expandafter\newdimen\csname @easy@hsize\romannumeral\@tempcnta\endcsname%
   \expandafter\global\expandafter\newdimen\csname @easy@vsize\romannumeral\@tempcnta\endcsname%
   \advance\@tempcnta by\m@ne
}

对于非专业人士来说,这看起来有些复杂,但关键是\newdimen前面加了\global。这不是必需的(尺寸由 LaTeX 全局分配),但通常是无害的。

如果发生在“错误”的时间,则会出现错误\global\newdimen。传统 TeX 只有 256 个维度可用,而 e-TeX 则提供更多(64k)维度。但是,LaTeX\newdimen命令设置为仅使用 256 个传统维度,因此要实际使用“扩展池”,您必须更改部分内核。这就是该etex包所做的。但是,它设置为首先使用 256 个“标准池”寄存器,然后再更改“扩展池”的分配方式。这一切都很好,通常是透明的。但是,如果在以 为\newdimen前缀时发生切换\global,则会出现错误,因为\global最终位于内部 的“前面” \begingroup,从而导致错误。(该错误实际上不会破坏文档,但没人希望每次编译时都出现错误。)

重新排序加载几乎肯定会跳过该问题,因为它会在切换发生时移动,希望远离使用\global\newdimen。一个“更好”的解决方案是更改easy.sty为不使用\global,但由于该文件在撰写本文时已有 12 年历史,我不会对此抱有希望。也许最好的解决方案是进行更改etex以允许处理\global此处的使用:棘手,并且再次更改了很长时间未更改的文件。

相关内容