2010-04-10 93 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