Memory 如何防止latex内存溢出

Memory 如何防止latex内存溢出,memory,memory-management,latex,macros,tex,Memory,Memory Management,Latex,Macros,Tex,我有一个制作小图片的乳胶宏。在那幅画里我需要画面积。该区域的边界是二次贝塞尔曲线,该区域将被填充。我不知道怎么做,所以现在我正在“填充”这个区域,在里面画很多贝塞尔曲线 这会减慢排版速度,当一个宏被多次使用时(因此tex绘制了很多二次bezier曲线),它会产生以下错误: ! TeX capacity exceeded, sorry [main memory size=3000000]. 如何防止此错误?(通过在宏或类似操作后释放内存…)或者更好,如何填充由两条二次贝塞尔曲线确定的区域 产生错

我有一个制作小图片的乳胶宏。在那幅画里我需要画面积。该区域的边界是二次贝塞尔曲线,该区域将被填充。我不知道怎么做,所以现在我正在“填充”这个区域,在里面画很多贝塞尔曲线

这会减慢排版速度,当一个宏被多次使用时(因此tex绘制了很多二次bezier曲线),它会产生以下错误:

! TeX capacity exceeded, sorry [main memory size=3000000].
如何防止此错误?(通过在宏或类似操作后释放内存…)或者更好,如何填充由两条二次贝塞尔曲线确定的区域

产生错误的代码:

\usepackage{forloop}
\usepackage{picture}
\usepackage{eepic}
...
\linethickness{\lineThickness\unitlength}%
\forloop[\lineThickness]{cy}{\cymin}{\value{cy} < \cymax}{%
  \qbezier(\ax, \ay)(\cx, \value{cy})(\bx, \by)%
}%
注意:要重现错误,此代码必须执行大约150次(可能更多,具体取决于您的latex内存设置)


非常感谢您的帮助

我承认我不知道如何管理LaTeX的内存。然而,与旧的图片环境相比,LaTeX有更好的绘图框架,因为旧的图片环境似乎不支持填充的bezier路径。想到的两个是现代风格(另请参见)和更古老的风格。

由于历史原因,TeX可用的内存位于静态池中,其中分配的大小是硬编码的。您可以使用此集合将TeX重新编译为更大的大小,某些版本允许在运行时对其进行配置。更详细一点


讨论在MikTeX中配置内存。根据您使用的发行版,详细信息会有所不同,但在大多数现代TeX发行版上也可以做类似的事情。一些较老的问题可能需要您修改源代码。

在我看来,我的问题并没有简单而全面的答案。 使用小Bobby Tables建议的更高级的图片绘制软件包,使得latex能够以一定的内存大小绘制更多的图片(+-2倍以上),但当绘制的图片超过该值时,仍然会出现错误

正如ConcernedOfTunbridgeWells所建议的那样扩大内存,然后重新编译是我想要避免的事情。这和小鲍比的建议也有同样的问题:你可以把它放大100倍,但当排版的文件长100倍时,它就不再足够了


解决办法是完全重写latex,因为我发现这只是使它不足以满足我的目的的更多问题之一,或者使用更好的排版引擎(有什么想法吗?)。因为我觉得这太难了,我不得不扩大内存。

您使用的是哪个tex发行版?在哪个操作系统上?我正在使用MiKTex 2.8、Latex2e、Xeletex和Windows 7。谢谢您的提示。我已经写了相当多的代码,所以学习新的包和重写一切对我来说似乎是相当多的工作。我更喜欢另一种解决方案。无论如何,这是我迄今为止找到的最好的选择,所以我正在用PGF和Tikz重写整个过程。我认为这是对我来说最好的解决办法,问题也得到了回答,所以我错了。我已经用PGF和Tikz重写了整个包,但仍然得到了错误。我需要比以前更多地使用宏,但如果我画了足够多的图表,我还是会得到同样的错误。谢谢你的提示。我相信他们会对我有用,或者至少对其他人有用。
\setlength{\unitlength}{0.01pt}
\lineThickness=20
%cy is just a counter - inital value is not important
\cymin=450 \cymax=900
%from following only the difference between \ax and \bx is important
\ax=0 \ay=0 \bx=550 \by=0