没有空间容纳新的 \count

没有空间容纳新的 \count

我有以下 MWE,它在 TeXLive 14、15 和 16 下运行良好,但在 TeXLive 2017 上失败。

\documentclass{article}

\usepackage{tikz}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\usepackage{mtpro2}

\begin{document} This is a problem. \end{document}

MTProII是 PCTeX 提供的 Math Times Prof. II 软件包(免费提供)。

该示例是绝对的 MWE,更改其上的任何内容(甚至顺序)都可以使文件正常执行。使用上述代码,它会失败并显示:

! No room for a new \count .
\ch@ck #1#2#3->\ifnum \count 1#1<#2\else \errmessage {No room for a new #3}
                                                                       \fi 
l.129 \alloc@0\count\countdef\insc@unt\pointcount@

我已查看了 Enrico Gregorio 和 David Carlisle 对其他软件包的类似问题以及它们带来的可能性的一些回答 - 但并不适用于此处。

知道是什么原因造成的吗?我该如何解决它?

答案1

为了非常神秘的原因,而不是做

\newcount\pointcount@

软件包mtpro2.sty(ab) 使用内部分配机制。遗憾的是,内部分配机制随着时间的推移发生了变化,但当然,它\newcount仍然像以前一样继续工作。

有任何理由做出这样的声明

\alloc@0\count\countdef\insc@unt\pointcount@

除非可能是为了给用户制造麻烦。

按该顺序排列的包会出现问题,因为fontspectikz已经耗尽了索引低于 255 的计数器的供应。当然,使用旧的分配机制将会失败,因为在遇到中的声明\count10时,保存最后分配的计数器寄存器的值为 278 。\alloc@mtpro2.sty

如何解决这个问题?有两种方法。最简单的方法是将mtpro2第 138 行更改为\newcount\pointcount@

第二个方法是利用这个调用\alloc@是包中唯一的调用这一事实,并重新定义它来做正确的事情。

\documentclass{article}

\usepackage{fontspec}
\usepackage{tikz}

\makeatletter
\let\alloc@latex\alloc@
\def\alloc@#1#2#3#4{\newcount}% the current \newcount doesn't use \alloc@
\makeatother

\usepackage{mtpro2}

\makeatletter
\let\alloc@\alloc@latex
\makeatother

\setmainfont{Times New Roman}

\begin{document}

This is no more a problem.

\end{document}

我两种方法都试过了,而且都有效。

相关内容