\includesvg 生成“没有空间容纳新的 \read”

\includesvg 生成“没有空间容纳新的 \read”

我已经对此进行了大量搜索,并且我知道这两个问题写日记“没有空间阅读新书”没有空间容纳新的 \read/\write。尽管如此,我还是找不到解决问题的方法,因为我使用 SVG 包来包含 .svg 文件。该包更多写作帮助停止“没有空间写新的 \write”错误消息,而 e-Tex 扩展对 \read 没有帮助(也提到这里)。include命令输入如下:

\includesvg[clean,pdf]{SVG_File}

干净的选项删除提取时产生的临时文件pdf来自 svg。

事实证明,提取和清理选项产生了问题(删除它们会关闭错误消息!)。

快速浏览一下 SVG 的实现,似乎调用这些选项会调用更多\立即\写入18命令。我不确定这个命令是否产生了读取错误,但如果是这样,我看不出写入命令如何会请求读取错误!

有什么提示吗?

答案1

正如 David Carlisle 指出的那样,错误在于每次调用时都会\includesvg调用\newread\SVG@in@file(并且也会调用)\newwrite\SVG@out@file

这是一个很大的错误,因为 LaTeX 在使用后不会释放分配的输出/输入流。

您可以通过修补来修复不良行为\@includesvg

\documentclass{article}
\usepackage{svg}
\usepackage{etoolbox}

\makeatletter
\newread\SVG@in@file
\newwrite\SVG@out@file
\patchcmd{\@includesvg}{\newread\SVG@in@file}{}{}{}
\patchcmd{\@includesvg}{\newwrite\SVG@out@file}{}{}{}
\makeatother

...<the rest of the document>...

这将一次性分配流,并从宏中删除坏代码。

您应该向软件包维护者指出这个错误。

相关内容