LaTeX 和 graphviz:“没有空间容纳新的 \write”

LaTeX 和 graphviz:“没有空间容纳新的 \write”

我在用着TeXShop在 Mac OS X 上(基于 LaTeX)与图形可视化包,以便在我的文档中绘制内联有向图(使用 write18 和命令dot)。显然每个图都使用一个\write命令,所以我在单个文档中得到了大约十几个内联图,并且用完了\write插槽。当我尝试构建文档时,我现在收到以下错误:

?! 没有空间容纳新的 \write 。

我有完毕 一些 阅读关于这个问题,目前还没有明显的方法可以增加\write我可用的 s 数量。有没有其他方法可以继续使用此包而不需要\write对每个图都进行操作?

作为参考,示例文档如下所示:

\documentclass{article}
\usepackage{graphvizzz}

\begin{document}

This is a state machine:
\digraph[scale=0.5]{machine}{
   margin = "0 0 0 0";
   rankdir = "LR";
   node [ shape = "circle" ] A B;
   A -> B [ label = "0" ];
}

\end{document}

答案1

pgf/tikZ你可以回避这个问题。

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{automata,positioning}

\begin{document}
  This is a state machine:

  \begin{tikzpicture}[%
    >=stealth,
    node distance=2cm,
    on grid,
    auto
  ]
    \node[state] (A)              {A};
    \node[state] (B) [right of=A] {B};
    \path[->] (A) edge node {0} (B);
  \end{tikzpicture}
\end{document}

包装手册中有详细信息。还有一个具体示例库


在此处输入图片描述

答案2

显然,这个软件包的作者从来没有尝试过,除了一些琐事。

正确做法是,改变

\newcommand{\digraph}[3][scale=1]{ 
  \newwrite\dotfile 
  ...

在包裹中

\newwrite\dotfile
\newcommand{\digraph}[3][scale=1]{
  ...

(即,将 移出\newwrite命令)。下面几行,\newwrite\dotfile从 的定义中删除 行\graph

不管怎样,你是对的;无法增加\write流的数量。当然,使用 TikZ 是一个不错的选择,所以如果它适合你,就继续使用它。

答案3

您可以使用以下morewrites包:

http://get-software.net/macros/latex/contrib/morewrites/morewrites.pdf

基本上,你需要做的就是添加以下行

\usepackage{morewrites}

位于文档开头附近的某个位置,“没有更多空间容纳新的 \write”错误应该会消失。

答案4

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

此错误有 3 种解决方案:

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

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

相关内容