3

I've got a latex macro that makes small pictures. In that picture I need to draw area. Borders of that area are quadratic bezier curves and that area is to be filled. I did not know how to do it so currently I'm "filling" the area by drawing a plenty of bezier curves inside it...

This slows down typeseting and when a macro is used multiple times (so tex is drawing really a lot of quadratic bezier curves) it produces following error:

! TeX capacity exceeded, sorry [main memory size=3000000].

How can I prevent this error ? (by freeing memory after macro or such...) Or even better how do I fill the area determined by two quadratic bezier curves?

Code that produces error:

\usepackage{forloop}
\usepackage{picture}
\usepackage{eepic}
...
\linethickness{\lineThickness\unitlength}%
\forloop[\lineThickness]{cy}{\cymin}{\value{cy} < \cymax}{%
  \qbezier(\ax, \ay)(\cx, \value{cy})(\bx, \by)%
}%

Here are some example values for variables:

\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

Note: To reproduce the error this code have to execute approximately 150 times (could be more depending on your latex memory settings).

Thanks a lot for any help

4

3 に答える 3

3

歴史的な理由から、TeX で利用可能なメモリは、割り当てのサイズがハードコードされた静的プールに存在します。このセットを使用して TeX をより大きなサイズに再コンパイルできます。一部のバージョンでは、実行時に構成できます。 この FAQ エントリでは、もう少し詳しく説明しています。

このページでは、MikTeX でのメモリの構成について説明します。詳細は、使用しているディストリビューションによって異なりますが、ほとんどの最新の TeX ディストリビューションで同様のことができます。一部の古いものでは、ソースを変更する必要がある場合があります。

于 2010-04-10T15:23:56.963 に答える
3

LaTeX のメモリの管理方法がわからないことは認めます。ただし、塗りつぶされたベジェ パスをサポートしていないように見える、古い画像環境よりも優れた LaTeX 用の描画フレームワークがあります。思い浮かぶのは、最新のスタイルのPGF と Tikz (も参照) と、より古いMetapostの 2 つです。

于 2010-04-10T15:09:35.927 に答える
1

私の質問には、単純ですべてを解決する答えがないように思えます。Little Bobby Tables が提案したように、より高度な画像描画パッケージを使用すると、ラテックスはある程度のメモリ サイズ (+- 2 倍以上) でより多くの画像を描画できるようになりましたが、それ以上の画像を描画するとエラーが発生します。

ConcernedOfTunbridgeWells が提案したようにメモリを拡大してから再コンパイルすることは、私が避けたかったことです。Little Bobby の提案と同じ問題もあります: 100 倍に拡大することはできますが、100 倍長い文書をタイプセットすると、再び十分ではなくなります。

解決策は、ラテックスを完全に書き直すことです。これは、私の目的には不十分な問題の1つにすぎないため、またはより優れたタイプセットエンジンを使用することです(アイデアはありますか?)。これは難しすぎるので、メモリを拡張するしかありません。

于 2010-04-24T16:48:10.003 に答える