我已经测试过morewrites
,并且scrwfile
在我的模板中使用了如此多的写入,以至于如果不加载任何这些包,我就会遇到问题no room for new \write
。
我发现scrwfile
我可以使用更多使用输出的包。就我而言,这些是
- TikZ 和 pgf (无需外部)
imakeidx
glossaries
fancyvrb
listings
titletoc
todonotes
(?)
可能还有更多,但这些是我所知道的\write
从技术上讲,我想知道是否有人可以描述这些包之间的区别,以及是否有办法计算免费\write
输出。
答案1
morewrites 和 scrwfile 之间的区别
morewrites 旨在修补
- 用于创建和写入文本文件的 TeX 原语,即
\write
、\openout
和\closeout
。 \newwrite
用于分配寄存器的宏,\write
反过来又使用\openout
原语。
scrwfile 旨在修补LaTeX内核提供的用于创建目录、图表列表、表格列表等内容的机制\@starttoc
。\addtocontents
\@writefile
...如果有办法计算免费
\write
输出
\write
按照 分配的最后一个寄存器的编号\newwrite
(LaTeX- \@starttoc
- \addtocontents
- -\@writefile
内核机制内部也使用\newwrite
)保存在计数寄存器 17 中,其中计数寄存器 17 在分配任何\write
寄存器之前初始化为 -1。由于寄存器的编号从 0 到 15,因此您可以让 eTeX 计算通过 分配的此类 寄存器的\write
数量。\write
\newwrite
\number\numexpr15-\number\count17\relax
乌尔里希