我正在尝试读取一个包含要处理信息的大型文件(大约 1.5M),但它总是以\input
或 循环过早结束\read
。该文件的平衡是正确的(相信我),通过删除它的某些部分,文件会在不同的点结束,甚至在宏名称的中间(相应的错误是未定义的宏),当然,这在源代码中是完整的。所以问题出在 TeX 本身(TeX Live 2010)。我推测应该有一个设置限制的参数,但阅读文档后我什么也没找到。除了大量的 之外,这个程序没有什么特别的\pdfsavepos
。TeX Live 中是否有一个参数可以更改文件大小限制,或者是否存在已知的错误?
有关错误的更多信息
代码如下:
\begingroup
\makeatletter
\@tempswatrue
\loop
\ifeof\ulp@in\@tempswafalse\fi
\if@tempswa
\read\ulp@in to\@tempa
\@tempa
\repeat
\endgroup
当读到以下部分时:
\ulp@Ga{24}\@ne {%
\ulp@Pa{1}{13349836}{12624364}{0}%
\ulp@Pa{2}{14554971}{12624364}{1}%
\ulp@Pa{3}{14739040}{12624364}{1}%
\ulp@Pa{4}{16705126}{12624364}{1}%
\ulp@Pa{5}{16889195}{12624364}{1}%
\ulp@Pa{6}{18218124}{12624364}{1}%
\ulp@Pa{7}{7030046}{11837932}{1}%
\ulp@Pa{8}{8943337}{11837932}{0}%
}%
文件过早结束,如日志文件所示:
\@tempa ->\ulp@Ga {24}\@ne {\ulp@Pa {1}{13349836}{12624364}{0}\ulp@Pa {2}{14554971}{12624364}{1}\ulp@Pa {3}{14739040}{12624364}{1}\ulp@Pa {4}{16705126}{12624364}{1}\ulp@Pa {5}{16889195}{64}{1}\ulp@Pa {5}{16889195}{
注意\read
尚未正确读取文件,并且 的最后一个参数\ulp@Ga
不完整(最后一个是{
)。在此之前,所有\ulp@Ga
s 均已正确读取(其中一些甚至更长)。
答案1
终于!经过三天的苦苦思索,我终于意识到问题出在哪里——要读取的文件还没有恢复真的读取时关闭。TeX 的异步特性,你知道。我忘了它\closeout
实际上并没有关闭文件,而是等待页面被发送出去(例如使用显式\clearpage
)。这意味着文件的最后一块仍然被缓冲,没有被写入。非常感谢你的关注。