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 é
- Nome da variável
- Valor padrão.
- Absolutomáximo que pode ser definido.
- 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 memory
que 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_top
e extra_mem_bot
isso 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.
É melhor usar
\def\foo{xxx}
em vez de\newcommand*{\foo}{xxx}
. Posso realizar a verificação de nomes de macro duplicados fora do TeX.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 mapeardir1/dir1/long-file-name
para alguma string mais curta, paraZXyw
economizar nesses limites. Sim, a legibilidade foi perdida, mas posso automatizar essa substituição.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}
Fazer
\undef
macros 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
No meu
/usr/local/texlive/2015/texmf.cnf
eu tenhomain_memory = 12435455
(12,4M), que é o máximo declarado conformelátex me dá o erro: Ai --- minhas constantes internas foram derrotadas. Se eu tentar aumentá-lo apenas em 1, de12435456
fato eu consigoOuch---my internal constants have been clobbered!---case 14
. Mesmo depois de executarsudo vi texmf.cnf
conformeAumente a capacidade do LaTeX.No entanto, a solução de Thomas F. Sturm paraComo expandir o “tamanho da memória principal” do TeX? (sobrecarga de memória do pgfplots)mostra
100571134 words of memory out of 103000000
indicando assim que o máximo é de pelo menos 103M.
Além disso, no arquivo
/usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf
há um comentário queMemory. Must be less than 8,000,000 total.
. Bem, isso está claramente incorreto, pois posso usar mais do que isso.
Notas:
Presumo que quaisquer alterações serão feitas no arquivo relatado de
kpsewhich texmf.cnf
acordo 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 memory
limite. 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:
- Existem limites para o número de novas macros ou comandos no TeX/LaTeX?lista as variáveis mencionadas aqui e fornece um caso de teste. No entanto, ele está focado especificamente nos limites baseados no número de macros.
- Componentes do uso de memória do (La)TeXé uma excelente referência, então talvez essas respostas possam ser adicionadas lá e fechadas como duplicadas?
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.