Сводка ограничений пропускной способности TeX

Сводка ограничений пропускной способности TeX

Кажется, я часто сталкиваюсь с проблемами емкости и каждый раз увеличиваю лимиты. На этом сайте есть несколько вопросов, касающихся этого. Однако, похоже, есть некоторая противоречивая информация и нет единого места, гдевсеэти ограничения детализированы.

Основной вопрос:

Итак, то, что я ищу, это

  1. Имя переменной
  2. Значение по умолчанию.
  3. Абсолютныймаксимальное значение, на которое его можно установить.
  4. Какие шаги я могу предпринять, чтобы минимизировать эти использования. Что ДЕЛАТЬ и НЕ ДЕЛАТЬ для каждого из этих ограничений емкости.

Настройки, о которых я знаю, указаны в конце файла журнала:

 106477 strings out of 493042
 2524840 string characters out of 39884661
 12363848 words of memory out of 12435455
 103471 multiletter control sequences out of 15000+600000
 197845 words of font info for 228 fonts, out of 8000000 for 9000
 1143 hyphenation exceptions out of 8191
 86i,17n,86p,10523b,3398s stack positions out of 5000i,500n,10000p,200000b,80000s

но могут быть и другие, которые здесь не перечислены. Моя непосредственная проблема с words of memoryтем, что приведенные выше цифры получены в результате первого запуска индексации. Если я попытаюсь выполнить второй запуск, то я получу TeX Capacity Exceeded.

ПримерыДругойПеременные:

Из комментариев Дэвиса Карлайла, есть также extra_mem_topи extra_mem_bot, которые также могут быть использованы. Но, допускает ли это большее words of memoryили они связаны с одним из других ограничений емкости в отчете. Опять же, какой максимум я могу установить для них?


Возможные действия, которые можно и нельзя выполнять:

Некоторые из вопросов, которые у меня возникли в отношении минимизации использования, перечислены здесь, поэтому, возможно, их можно будет охватить в разделах «ЧТО НУЖНО» и «ЧТО НЕ НУЖНО» для каждой из переменных.

  1. Лучше использовать \def\foo{xxx}вместо \newcommand*{\foo}{xxx}. Я могу выполнить проверку на наличие дублирующихся имен макросов вне TeX.

  2. Увеличивают ли имена макросов с большим количеством символов частоту использования некоторых из них?

    Например, \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}есть ли какие-либо проблемы в regrads to capacity. Будет ли лучше для меня сопоставить dir1/dir1/long-file-nameс какой-то более короткой строкой, например, ZXywчтобы сэкономить на этих ограничениях. Да, теряется читаемость, но я могу автоматизировать эту замену.

  3. Приводит ли повторение текста к более частому использованию лимитов: Что из перечисленного будет лучше:

    \MyMacro{../../../../dirA/dirB/dirC/dirD/file0001.tex}
    \MyMacro{../../../../dirA/dirB/dirC/dirD/file0002.tex}
     ...
    \MyMacro{../../../../dirA/dirB/dirC/dirD/file5000.tex}
    

    или

    \def\Path{../../../../dirA/dirB/dirC/dirD/}
    \MyMacro{\Path/file0001.tex}
    \MyMacro{\Path/file0002.tex}
     ...
    \MyMacro{\Path/file5000.tex}
    
  4. Помогает ли \undefиспользование макросов после того, как они больше не нужны, преодолеть эти ограничения?

Конечно, я могу поэкспериментировать с теми вещами, которые я придумал, но, возможно, есть и другие вещи, которые можно сделать, чтобы сократить использование этих ограниченных строк и слов.


Пример непоследовательности


Примечания:

  • Я предполагаю, что любые изменения будут внесены в файл, о котором сообщается kpsewhich texmf.cnfв ответе Лео Лю наКак расширить «размер основной памяти» TeX? (перегрузка памяти pgfplots), что в моем случае

    /usr/local/texlive/2015/texmf.cnf
    

    Если существуют другие способы настройки некоторых из них, мне бы хотелось их также узнать.

  • Моя главная проблема сейчас — индексация большого количества записей и words of memoryлимит. Меня меньше волнует время выполнения (в разумных пределах), больше — превышение этих лимитов.
  • Я использую TeXLive2015, если это имеет значение. Но если ограничения зависят от дистрибутива, было бы неплохо знать и это.
  • Этот вопрос не касается состояний ошибок, которые приводят к превышению ограничений по емкости (например, мой наивный вопросПревышена емкость текста (если удалить % после использования макроса)).

Использованная литература:

решение1

Лучше ли использовать \def\foo{xxx} вместо \newcommand*{\foo}{xxx}. Я могу выполнить проверку на наличие дублирующихся имен макросов вне TeX.

Нет, это одно и то же.

Например, есть ли у \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx} какие-либо проблемы с емкостью?

теоретически да, csname должно где-то храниться, так что это занимает 2524840 символов строки из 39884661

но вы, по-видимому, собираетесь сделать его всего на 20 символов меньше, так что особой разницы из 39884661 не будет

Что из перечисленного будет лучше:

снова незначительно первый использует больше, так как он определяет еще одно csname ( \path), которое выводит один из

 103471 multiletter control sequences out of 15000+600000

но вы еще далеки от этого предела

Помогает ли \undefing макросов после того, как они больше не нужны, справиться с этими ограничениями?

да, именно поэтому latex удаляет множество команд при \begin{document}записи хеша, не освобождается (количество многобуквенных команд), но освобождается основная память, используемая для сохранения определения.

решение2

Много лет назад я выступил с докладом о проблемах «превышение емкости TeX» с некоторой справочной информацией, основными причинами и возможностями их предотвращения.

Первая часть доклада была опубликована в"Die TeXnische Komödie" выпуск 1995/3, стр. 22 и далее.

На странице 24 приведена таблица со всеми (стандартными) сообщениями об ошибках переполнения TeX.web, связанными с ними параметрами TeX.web и настройками параметров.

Минусы: (1) доклад и статья только на немецком языке, (2) у меня никогда не было достаточно времени, чтобы завершить серию статей, включая все оставшиеся темы во 2-й и 3-й части, и (3) она основана на стандартной версии TeX.web или web2c "bigTeX", без e-TeX, pdfTeX, XeTeX, LuaTeX и подобных расширенных вариантов.

Связанный контент