2010-04-10 96 views
3

我有一个乳胶宏,使小图片。在这幅图中,我需要绘制区域。该区域的边界是二次贝塞尔曲线,该区域将被填充。我不知道该怎么做,所以目前我通过在内部绘制大量的贝塞尔曲线来“填充”该区域...如何防止乳胶内存溢出

这会减慢typeseting并且当多次使用宏时(所以tex是绘制真正的很多二次贝塞尔曲线)它会产生以下错误:

! 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)% 
}% 

下面是一些例子变量值::

\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 

注:产生误差

代码重现这个码必须执行大约150倍的误差(可能是更取决于你的乳胶记忆设置)。

非常感谢您的帮助

+0

您使用哪种tex发行版?在哪个操作系统? – Jack 2010-04-10 14:47:37

+0

我使用的是MiKTex 2.8,Latex2e,XeLatex和Windows 7. – drasto 2010-04-10 18:24:21

回答

1

在我看来,我的问题并没有简单和所有解决的答案。 使用更先进的绘图包作为小Bobby表建议导致乳胶能够绘制更多的图片与一些内存大小(+ - 2倍以上),但绘制更多的错误仍然发生时。

将内存扩大为ConcernedOfTunbridgeWells建议,然后重新编译是我想避免的。它也有与小博比的建议相同的问题:您可以放大100倍,但排版100倍长的文档时再次不足。

解决方案将完全重写乳胶,因为我发现这只是一个更多的问题,使我的目的不足或使用一些更好的排版引擎(任何想法?)。因为我觉得这太难了,所以我不得不放大内存。

3

我承认我不知道如何管理的LaTeX的内存。然而,对于LaTeX,有比旧图片环境更好的绘制框架,似乎并不支持填充的贝塞尔路径。想到的两个是现代风格PGF and Tikz(另见examples)和更古老的Metapost

+0

感谢您的提示。我已经写了相当多的代码,因此学习新包和重写所有东西对我来说似乎相当多。我更喜欢另一种解决方案。 – drasto 2010-04-10 21:18:05

+0

无论如何,这是迄今为止我发现的最佳选择,所以我正在重写PGF和Tikz中的所有内容。我认为这是对我来说最好的解决方案,并回答了问题。 – drasto 2010-04-11 14:12:47

+0

所以我错了。我已经在PGF和Tikz中重写了整个程序包,但仍然出现错误。我之前需要多次使用宏,但是如果绘制足够多的图表,我会得到相同的错误。 – drasto 2010-04-12 00:45:25

3

由于历史原因,TeX可用的内存位于一个静态池中,其中分配的大小是硬编码的。您可以使用该设置将TeX重新编译为更大的尺寸,并且有些版本允许在运行时对其进行配置。 This FAQ entry discusses它在一个更详细的。

This page讨论了在MikTeX中配置内存。根据你使用的发行版,细节会有所不同,但是大多数现代TeX发行版都可以做类似的事情。一些较旧的可能会要求您修改源代码。

+0

感谢您的提示。我相信他们会对我有用一段时间或至少对其他人有用。 – drasto 2010-04-11 14:14:02