如何实际关闭写入流

如何实际关闭写入流

我对写入和读取文件了解不多。但我设法创建了一个不错的命令,我需要将一些内容写入文本文件,然后再读取它。

\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 以使其更合理,参见例如哪些地方需要添加 % 来删除不需要的空格?

相关内容