Как предотвратить переполнение латексной памяти - PullRequest
3 голосов
/ 10 апреля 2010

У меня есть латексный макрос, который делает маленькие картинки. На этой картинке мне нужно нарисовать область. Границы этой области представляют собой квадратные кривые Безье, и эта область должна быть заполнена. Я не знал, как это сделать, поэтому сейчас я «заполняю» область, рисуя внутри нее множество кривых Безье ...

Это замедляет набор текста, и когда макрос используется несколько раз (т. Е. 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 раз (может быть больше в зависимости от настроек памяти латекса).

Большое спасибо за любую помощь

Ответы [ 3 ]

3 голосов
/ 10 апреля 2010

По историческим причинам память, доступная для TeX, находится в статическом пуле, где размер выделения жестко задан. Вы можете перекомпилировать TeX с этим набором большего размера, и некоторые версии позволяют его настраивать во время выполнения. Эта запись часто задаваемых вопросов обсуждает более подробно.

На этой странице обсуждается настройка памяти в MikTeX. В зависимости от того, какой дистрибутив вы используете, детали могут отличаться, но нечто подобное можно сделать в большинстве современных дистрибутивов TeX. Некоторые старые могут потребовать изменения источника.

3 голосов
/ 10 апреля 2010

Признаюсь, я не знаю, как управлять памятью LaTeX. Тем не менее, для LaTeX существуют более удобные схемы рисования, чем в старой графической среде, которая, кажется, не поддерживает заполненные пути Безье. Два, которые приходят на ум, это современный стиль PGF и Tikz (см. Также примеры ) и более древний метапост .

1 голос
/ 24 апреля 2010

Мне кажется, что на мой вопрос нет простого и все решающего ответа. Использование более продвинутого пакета для рисования картинок, как предлагалось в Little Bobby Tables, позволило латексу рисовать больше картинок с некоторым объемом памяти (+ - в 2 раза больше), но при рисовании больше этой ошибки ошибка все еще возникает.

Расширение памяти, как предлагал ConcernedOfTunbridgeWells, а затем перекомпиляция - это то, чего я хотел избежать. У него та же проблема, что и у предложения Маленького Бобби: вы можете увеличить его в 100 раз, но при наборе текста в 100 раз длиннее документа будет недостаточно.

Решение состоит в том, чтобы полностью переписать латекс, поскольку я считаю, что это только одна из многих проблем, которые делают его недостаточным для моих целей, или используют какой-то лучший механизм набора текста (какие-либо идеи?). Поскольку я нахожу это слишком сложным, я буду вынужден просто увеличить память.

...