我对写入和读取文件了解不多。但我设法创建了一个不错的命令,我需要将一些内容写入文本文件,然后再读取它。
\newcommand{\customwrite}[1]{
\newwrite\tempfile%
\immediate\openout\tempfile=filename_#1.txt%
\immediate\write\tempfile{\the\figheight}%
\immediate\closeout\tempfile%
}
读数是通过
\newcommand{\customread}[1]{
\newread\tempfile%
\openin\tempfile=filename_#1.txt%
\read\tempfile to \fileline%
\setlength\figheightex\fileline%
\closein\tempfile%
}
只要我没有太多这样的调用,这两种方法对我来说都很好用。最近,我有一个更大的文档,但一切都失败了,我收到了消息No room for a new \write
。我搜索了这个错误,发现 Latex 只能打开 16 个写入流和 16 个读取流。显然,\closeout
并\closein
没有像我想象的那样真正关闭这些流。
我现在的问题是:是否有可能真正关闭这些流?
答案1
每次读取或写入时,您都会保留一个新的读取/写入槽,但您不需要它。移出\new...
定义即可解决问题:
\newwrite\mytempout
\newcommand{\customwrite}[1]{%
\immediate\openout\mytempout=filename_#1.txt %
\immediate\write\mytempout{\the\figheight}%
\immediate\closeout\mytempout
}
\newread\mytempin
\newcommand{\customread}[1]{%
\openin\mytempin=filename_#1.txt %
\read\mytempin to \fileline
\setlength\figheightex\fileline
\closein\mytempin
}
我添加和删除了一些%
s 以使其更合理,参见例如哪些地方需要添加 % 来删除不需要的空格?