使用 l-system 时出现容量超出错误

使用 l-system 时出现容量超出错误

这是我的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{Tree}{
  \rule{F -> F [ R [+F] [-F] ]}
  \symbol{R}{
    \pgflsystemstep=0.6\pgflsystemstep
  } 
}
\begin{document}
\begin{tikzpicture}
    \draw l-system [l-system={Tree, axiom=[F], step=20, order=9, angle=60}];
\end{tikzpicture}
\end{document}

它在今年早些时候还有效,但现在当我尝试使用它时,它说

Runaway definition?
->\pgfsyssoftpath@movetotoken {0.0pt}{0.0pt}\pgfsyssoftpath@linetotoken \ETC.
./lindmanyer.tex:12: TeX capacity exceeded, sorry [main memory size=5000000].
\pgfsyssoftpath@thepath ...oken {23.264pt}{22\ETC.
>                                                  
> l.12 ...], step=20, order=9, angle=60}] l-system ;

我不知道是什么原因造成的以及如何解决它。

答案1

该示例需要使用 PDFLaTeX 占用大量主内存 — 比通常静态分配的内存还要多。因此,我建议使用 LuaLaTeX 编译该示例,因为它可以动态分配所需的内存。

如果实际生活中的示例是较大文档中的图像,无法快速转换为 LuaLaTeX,请尝试仅编译环境,tikzpicture或者仅通过externalLuaLaTeX 库编译此环境。但是,为此必须激活 shell-escape:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\usetikzlibrary{external}
\tikzexternalize[system call={lualatex \tikzexternalcheckshellescape
  -halt-on-error -interachtion=batchmode -jobname "\image" "\texsource"}]

\pgfdeclarelindenmayersystem{Tree}{
  \rule{F -> F [ R [+F] [-F] ]}
  \symbol{R}{
    \pgflsystemstep=0.6\pgflsystemstep
  } 
}
\begin{document}
\begin{tikzpicture}
    \draw l-system [l-system={Tree, axiom=[F], step=20, order=9, angle=60}];
\end{tikzpicture}
\end{document}

在此处输入图片描述

注意:根据您使用的包,这可能会失败,例如,如果您正在加载不应与 一起使用的包lualatex。在这种情况下,它可以帮助根据引擎加载包,例如:

\documentclass{article}
\usepackage{iftex}
\ifluatex
  \usepackage{fontspec}
\else
  \usepackage[ansinew]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
\fi
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\usetikzlibrary{external}
\tikzexternalize[system call={lualatex \tikzexternalcheckshellescape
  -halt-on-error -interachtion=batchmode -jobname "\image" "\texsource"}]

\pgfdeclarelindenmayersystem{Tree}{
  \rule{F -> F [ R [+F] [-F] ]}
  \symbol{R}{
    \pgflsystemstep=0.6\pgflsystemstep
  } 
}
\begin{document}
\begin{tikzpicture}
    \draw l-system [l-system={Tree, axiom=[F], step=20, order=9, angle=60}];
\end{tikzpicture}
\end{document}

作为一种既不需要 shell 转义也不需要更改文档的替代方案,您可以使用 PDFLaTeX 增加分配给主内存的内存。使用 MiKTeX,您可以运行

pdflatex --extra_mem_top=1000000 foo.tex

(如果foo.tex是您的文档的名称)。使用 TeX Live 您可以使用,例如:

pdflatex -cnf-line="extra_mem_top=700000" foo.tex

结果和上面显示的一样。

相关内容