这是那些非常大的文档问题之一,我很难生成 MWE。但它与 LuaLaTeX 与 XeLaTeX 中写入流的限制有关。我有一个包含额外索引、额外浮点类型的复杂文档,而 XeLaTex 中可怕的写入流限制一直是主要障碍。
morewrites 包造成了一些困难,所以我决定转向 LuaLaTex - 印象中那里没有写入流限制,最高可达 256。然而令我惊讶的是,当流达到 17 左右时,我得到了完全相同的错误。
下面是 LuaLaTex 编译后对 25000 行日志文件进行 \write 的 grep。我认为这在原则上不是一个限制,那么为什么我在完全相同的 N 下仍然得到这个结果?为了避免产生差异,我也使用了 shell-escape。
Inserting `luaotfload.rewrite_fontname' at position 4 in `luaotfload.patch_font'.
\@xs@message=\write3
\w@pgf@writea=\write4
\tcb@out=\write5
\tcb@record@out=\write6
\forest@copy@out=\write7
Package pgfplots info on input line 82: Found new luatex: initializing lua commands instead of write18 (shell-escape)
\@indexfile=\write8
\js@verbatim@out=\write9
\@outlinefile=\write10
\tf@toc=\write11
\tf@lof=\write12
\tf@lot=\write13
\tf@lotreepic=\write14
[][]\TU/LinLibertine(5)/m/n/12 \immediate\write18{grep -vE "(linkcode55)" steelechaimkids.tex > schaimclean.tex}
\tf@exh=\write15
./subdocs/templatetikzoddssodds.tex:5269: No room for a new \write .
[]\TU/LinLibertine(0)/m/n/10.95 didn’t add code for ar-rows. this should not be prob-lem to write code for it (some-thing like []\TU/LinLibertine(5)/m/n/10.95 \draw[<->] ([xshift=...] r1c4.north east) -- ([xshift=...] r4c1.south east);)
./subdocs/templateshapepar.tex:39: No room for a new \write .
\tf@los=\write16
\tf@tod=\write17
./subdocs/templatepgfplots.tex:27: No room for a new \write .
./subdocs/templatepgfplots.tex:329: No room for a new \write .
./subdocs/templatepgfplots.tex:413: No room for a new \write .
./subdocs/templatepgfplots.tex:777: No room for a new \write .
./subdocs/templatepgfplots.tex:1943: No room for a new \write .
./subdocs/templatepgfplots.tex:1989: No room for a new \write .
./subdocs/templatepgfplots.tex:2175: No room for a new \write .
./subdocs/templatepgfplots.tex:2189: No room for a new \write .
./subdocs/templatepgfplots.tex:2198: No room for a new \write .
./subdocs/templatepgfplots.tex:2344: No room for a new \write .
./subdocs/templatepgfplots.tex:2729: No room for a new \write .
./subdocs/templatepgfplots.tex:2781: No room for a new \write .
./subdocs/templatepgfplots.tex:2868: No room for a new \write .
./subdocs/templatepgfplots.tex:2991: No room for a new \write .
./subdocs/templatepgfplots.tex:3354: No room for a new \write .
./subdocs/templatepgfplots.tex:3407: No room for a new \write .
./subdocs/templatepgfplots.tex:3481: No room for a new \write .
./subdocs/templatepgfplots.tex:3687: No room for a new \write .
./subdocs/templatepgfplots.tex:4344: No room for a new \write .
./subdocs/templatepgfplots.tex:4503: No room for a new \write .
./subdocs/templatepgfplots.tex:4553: No room for a new \write .
./subdocs/templatepgfplots.tex:4773: No room for a new \write .
./subdocs/templatetkzgraphs.tex:64: No room for a new \write .
./subdocs/templatetikzcirstree.tex:1812: No room for a new \write .
答案1
我想我会自己回答这个问题以结束它,以防它对其他人有帮助:
经过广泛搜索,逐一排除问题,结果发现 filecontents 包是罪魁祸首。filecontents 包的功能(某种程度上)被纳入 Lualatex 中。删除该包解决了所有“没有空间进行新写入”问题。
为了保持功能,需要将所有调用替换为
\begin{filecontents*}{filename}
...Content...
\end{filecontents*}
with
\begin{filecontents*}[overwrite]{filename}
...Content...
\end{filecontents*}
无星号的版本也类似。
我认为 LuaLatex 开发人员应该保持向后兼容性(LaTex 的核心优势),方法是将覆盖设为默认,并且如果可能的话,如果加载了不兼容的常用包(但具有相同名称的宏),则在日志中生成错误。虽然我理解 LuaLatex 的基础是打破常规,但这种打破常规只有在绝对必要时才应该进行。除了无意中使用旧数据的风险之外,略有不同的表述也使得维护 LuaLatex 和其他编译器的文档变得困难。filecontents 包可能也应该打补丁,以便在适当的时候加载 Lua 版本。