Resumo dos limites de capacidade do TeX

Resumo dos limites de capacidade do TeX

Parece que muitas vezes me deparo com problemas de capacidade e tenho aumentado os limites a cada vez. Existem várias perguntas neste site relacionadas a elas. No entanto, parece haver algumas informações conflitantes e nenhum lugar único ondetodosesses limites são detalhados.

Pergunta principal:

Então, o que estou procurando é

  1. Nome da variável
  2. Valor padrão.
  3. Absolutomáximo que pode ser definido.
  4. Que medidas posso tomar para minimizar esses usos. Quais são os DOs e DONTs para cada um desses limites de capacidade.

As configurações que conheço são as relatadas no final do arquivo de log:

 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

mas pode haver outros que não estão listados aqui. Meu problema imediato é words of memoryque os números acima são da primeira execução da minha indexação. Se eu tentar fazer uma segunda execução, recebo TeX Capacity Exceeded.

Exemplos deOutroVariáveis:

Pelos comentários de Davis Carlisle, existe também extra_mem_tope extra_mem_botisso também pode ser usado. Mas isso permite maiores words of memory, ou estão relacionados a um dos outros limites de capacidade no relatório. Novamente, qual é o máximo que posso definir?


Possíveis coisas que devemos fazer e não fazer:

Algumas das dúvidas que tenho em relação à minimização do uso estão listadas aqui, então talvez elas possam ser abordadas nos DOs e DONTs para cada uma das variáveis.

  1. É melhor usar \def\foo{xxx}em vez de \newcommand*{\foo}{xxx}. Posso realizar a verificação de nomes de macro duplicados fora do TeX.

  2. Os nomes de macros com um grande número de caracteres aumentam o uso de alguns deles?

    Por exemplo, \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}há problemas em relação à capacidade. Seria melhor mapear dir1/dir1/long-file-namepara alguma string mais curta, para ZXyweconomizar nesses limites. Sim, a legibilidade foi perdida, mas posso automatizar essa substituição.

  3. O texto repetido resulta no aumento do uso dos limites: Qual das opções a seguir seria melhor:

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

    ou

    \def\Path{../../../../dirA/dirB/dirC/dirD/}
    \MyMacro{\Path/file0001.tex}
    \MyMacro{\Path/file0002.tex}
     ...
    \MyMacro{\Path/file5000.tex}
    
  4. Fazer \undefmacros depois que elas não são mais necessárias ajuda com esses limites?

Certamente, posso experimentar essas coisas que pensei, mas talvez haja outras coisas que possam ser feitas para reduzir o uso dessas cordas e palavras limitadas.


Exemplo de inconsistência


Notas:

  • Presumo que quaisquer alterações serão feitas no arquivo relatado de kpsewhich texmf.cnfacordo com a resposta de Leo Liu emComo expandir o “tamanho da memória principal” do TeX? (sobrecarga de memória do pgfplots), que no meu caso é

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

    Se houver diferentes maneiras de definir alguns deles, eu também gostaria de conhecê-los.

  • Meu principal problema agora é indexar um grande número de entradas e o words of memorylimite. Estou menos preocupado com o tempo de execução (dentro do razoável), mais em exceder esses limites.
  • Estou usando o TeXLive2015 caso seja importante. Mas se os limites dependem da distribuição, seria bom saber disso também.
  • Esta pergunta não se destina a ser sobre condições de erro que resultam em exceder os limites de capacidade (como a minha pergunta ingênuaCapacidade Tex excedida (se remover% após o uso da macro)).

Referências:

Responder1

É melhor usar \def\foo{xxx} em vez de \newcommand*{\foo}{xxx}. Posso realizar a verificação de nomes de macro duplicados fora do TeX.

Não, chega à mesma coisa

Por exemplo, \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx} tem algum problema em relação à capacidade.

em teoria, sim, o csname deve ser armazenado em algum lugar, então isso consome 2524840 caracteres de string de 39884661

mas provavelmente você só terá 20 ou mais caracteres a menos, então não há muita diferença em 39884661

Qual das opções a seguir seria melhor:

novamente marginalmente, o primeiro usa mais, pois define mais um csname ( \path) que tira um de

 103471 multiletter control sequences out of 15000+600000

mas você não está nem perto desse limite

\undefing macros depois que elas não são mais necessárias ajuda com esses limites?

sim, é por isso que o látex remove muitos comandos na \begin{document}entrada hash e não é recuperado (número de comandos com várias letras), mas a memória principal usada para salvar a definição é recuperada.

Responder2

Muitos anos atrás eu dei uma palestra sobre problemas de “capacidade do TeX excedida” com algumas informações básicas, causas raízes e possibilidades de como evitá-los.

A primeira parte da palestra foi publicada emEdição "Die TeXnische Komödie" 1995/3, páginas 22 e seguintes.

A página 24 possui uma tabela com todas as mensagens de erro de overflow (TeX.web padrão), os parâmetros TeX.web associados e as configurações dos parâmetros.

Negativo: (1) a palestra e o artigo estão apenas em alemão, (2) nunca tive tempo suficiente para finalizar a série de artigos incluindo todos os tópicos restantes na 2ª e 3ª parte, e (3) é baseado no TeX padrão. rede resp. a versão web2c "bigTeX", sem e-TeX, pdfTeX, XeTeX, LuaTeX e variantes estendidas semelhantes.

informação relacionada