特殊的包装组合给出“没有空间容纳新的 \write”。

特殊的包装组合给出“没有空间容纳新的 \write”。

在我的特殊包组合中,我得到了错误No room for new \write. \tablecontentsBad number (16). \tablecontents。以下 MWE 在 TeX Live 2015 中引发了此错误。pdflatexlualatex您所见,我添加了自己的内容寄存器loi。我可以分别删除几乎每个包,错误就会直接消失。

有谁知道这个包装组合有什么问题吗?

\documentclass{scrartcl}
% load packages
\usepackage{ifluatex}
\ifluatex
    \usepackage{fontspec}
\fi
\usepackage{adjustbox, amsmath, blindtext, datatool, fancybox, fixme, graphicx, marginnote, pgfplots}
\usepackage{imakeidx}
\usepackage{biblatex}
\usepackage{glossaries}
\usepackage{hyperref}
% load package for code code highlighting
\usepackage{minted}

% define Open Issue and corresponding List of Open Issues
\newcommand{\openissue}[2][Unlabeled]{%
    \par%
    {\refstepcounter{loicounter}%
    \phantomsection% comment out if hyperref is noy used
    \addcontentsline{loi}{figure}{%
        \protect\numberline{%
            \ifcsname c@chapter\endcsname%
                \thechapter.%
            \fi%
            \theloicounter%
        }{#1: #2}%
    }%
    \textbf{Open Issue -- #1:} #2}%
    \par%
}
% define counter
\makeatletter
\ifcsname c@chapter\endcsname%
    \newcounter{loicounter}[chapter]%
\else
    \newcounter{loicounter}%
\fi%
\newcommand*{\listopenissuesname}{List of Open Issues}
\newcommand{\listofopenissues}{%
    \ifcsname chapter\endcsname%
        \chapter*{\listopenissuesname}%
    \else%
        \section*{\listopenissuesname}%
    \fi%
    \@starttoc{loi}%
}
\makeatother

\fxsetup{status = draft}
\makeglossaries
\makeindex

\begin{document}

% include open issues
\listofopenissues
% include list of corrections
\listoffixmes
% include indicies
\tableofcontents                            % Inhaltsverzeichnis einbinden

\end{document}

答案1

解决方案是使用,\usepackage{morewrites}因为基本上任何已经加载的包都会抓取至少一个(写入)文件句柄,但文件句柄的数量仅限于 16 个寄存器,除非morewrites加载,这会扩展寄存器的数量。

问题是:有些软件包真的需要吗?

\jobname.log以下是该文件的简短摘录

\@dtl@write=\write3   % package datatool
\Verbatim@Outfile=\write4  % fancyvrb
\w@pgf@writea=\write5  % pgf
\blx@bcfout=\write6   % biblatex
\FV@OutFile=\write7   % fancyvrb again
\@xs@message=\write8  % xstring
\minted@code=\write9  % minted
\glswrite=\write10    % glossaries
\glo@main@file=\write11  % glossaries again
\noroom@idxfile=\write12  % imakeidx
\@outlinefile=\write13    % hyperref?
\tf@loi=\write14          % code itself with \addcontentsline{loi}
\tf@lox=\write15          % fixme package
! No room for a new \write.
\tf@toc=\write16  % Failure here

答案2

LaTeX 最多可以打开 16 个文件,但许多软件包都会打开这些文件。

我发现有 3 种针对此错误的建议解决方案:

  • 使用 LuaLaTeX,其限制将是操作系统的限制(从未尝试过)
  • 使用 morewrites 软件包(使用了一段时间,但后来遇到了错误)
  • 使用 KOMA-Script 的 scrwfile 包(我目前的选择)

morewrites 和 scrwfile 采用了不同的方法来解决这个问题,但两者都以某种方式改变了 LaTeX 内核。深度魔法。

调试 没有空间容纳新的 \write 问题

相关内容