morewrites:编译失败,“坏数字”

morewrites:编译失败,“坏数字”

morewrites我有一个项目,由于遇到了 ,我需要求助于该软件包No room for new \write。直到几个月前(我上次处理它的时候),它运行得还不错。但是当我今天尝试编译文档时,它突然不配合了。在尝试找出错误后,我将范围缩小到这个 MWE。

\documentclass{article}

% Uncomment for error
%\usepackage{morewrites}

\usepackage{filecontents}
\newcounter{globalCounter}
\newcounter{hostCounter}
\begin{filecontents*}{main.ctr}
123
2
\end{filecontents*}
\newcommand*\globalCounterFile{main.ctr}
\newwrite\globalCounterFH
\immediate\openin\globalCounterFH=\globalCounterFile
\immediate\read\globalCounterFH to \globalCounterLine
\immediate\read\globalCounterFH to \hostCounterLine
\immediate\closein\globalCounterFH
\setcounter{globalCounter}{\globalCounterLine}
\setcounter{hostCounter}{\hostCounterLine}
\stepcounter{globalCounter}
\begin{document}

This document has been compiled at least~\theglobalCounter~times across~\thehostCounter~hosts so far.\\
\end{document}

只要\usepackage{morewrites}被注释掉,MWE 就能正常工作,但是一旦加载包,使用pdflatex或进行编译时就会出现以下错误xelatex

! Bad number (19).
l.15 \immediate\openin\globalCounterFH
                                      =\globalCounterFile

由于我无法将其morewrites从我的大项目中删除,所以这是一个小问题。

上面的读取代码main.ctr很大程度上受到了该counttex包的启发,但我需要对我的项目进行一些修改,以使其适应我的需求。基本上,我需要跟踪两个计数器而不是一个,它们都存储在一个文件中并逐行读取。真的

我读过,lualatex不需要morewrites,但主要项目是在pdflatex考虑到这一点的情况下编写的,并尝试用 lualatex 编译它会产生错误,我预计这些错误将比这个更难以定位和修复。

我在寻找

  1. 关于为什么会发生这种情况的信息,只是出于纯粹的好奇,
  2. 如果有解决方案,可以解决这个问题,让我重新获得我的项目,而无需将其移植到 lualatex 或使其在没有它的情况下运行morewrites(我去年已经尝试过,相当痛苦,导致失败)。我宁愿避免对项目进行重大更改,因为我基本上已经完成了。但我仍然希望能够编译它以用于可存档性目的和将来偶尔的错误修复。

答案1

您的文档纯属偶然。该指令\newwrite\globalCounterFH(不带morewrites)本质上定义\globalCounterFH为一个整数,并且碰巧整数为 3(写入流 0、1 和 2 被保留)。

你想做

\newread\globalCounterFH

不是\newwrite

出现“Bad number”错误的原因是,\openin期望一个在0-15范围内的整数,但morewrites为写入流分配的数字从19开始。但是,这并不相关,请参见上述解释。

顺便说一句,当位于和\immediate之前时,是无操作的。\openin\read

相关内容