Resumen de los límites de capacidad de TeX

Resumen de los límites de capacidad de TeX

Parece que a menudo tengo problemas de capacidad y he aumentado los límites cada vez. Hay varias preguntas en este sitio relacionadas con estos. Sin embargo, parece haber información contradictoria y ningún lugar único dondetodoEstos límites están detallados.

Pregunta principal:

Entonces lo que estoy buscando es

  1. Nombre de la variable
  2. Valor por defecto.
  3. Absolutomáximo al que se puede configurar.
  4. ¿Qué medidas puedo tomar para minimizar estos usos? ¿Cuáles son lo que se debe y lo que no se debe hacer para cada uno de estos límites de capacidad?

Las configuraciones que conozco son las que se informan al final del archivo de registro:

 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

pero puede haber otros que no aparecen aquí. Mi problema inmediato es words of memoryque los números anteriores provienen de la primera ejecución de mi indexación. Si intento hacer una segunda ejecución, obtengo TeX Capacity Exceeded.

Ejemplos deOtroVariables:

Según los comentarios de Davis Carlisle, también existe extra_mem_topy extra_mem_boteso también se puede utilizar. Pero, ¿esto permite límites de capacidad más grandes words of memoryo están relacionados con alguno de los otros límites de capacidad del informe? Nuevamente, ¿cuál es el máximo al que puedo configurarlos?


Posibles HACER y NO HACER:

Algunas de las preguntas que tengo con respecto a minimizar el uso se enumeran aquí, por lo que tal vez puedan cubrirse en lo que se debe y lo que no se debe hacer para cada una de las variables.

  1. ¿Es mejor usarlo \def\foo{xxx}en lugar de \newcommand*{\foo}{xxx}. Puedo realizar la verificación de nombres de macros duplicados fuera de TeX.

  2. ¿Los nombres de macros con una gran cantidad de caracteres aumentan el uso de algunos de ellos?

    Por ejemplo, \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}tiene problemas con respecto a la capacidad. ¿Sería mejor para mí asignar dir1/dir1/long-file-nameuna cadena más corta para ZXywahorrar en estos límites? Sí, se pierde la legibilidad, pero puedo automatizar este reemplazo.

  3. ¿El texto repetido da como resultado un mayor uso de los límites? ¿Cuál de las siguientes opciones sería mejor?

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

    o

    \def\Path{../../../../dirA/dirB/dirC/dirD/}
    \MyMacro{\Path/file0001.tex}
    \MyMacro{\Path/file0002.tex}
     ...
    \MyMacro{\Path/file5000.tex}
    
  4. ¿ \undefUtilizar macros después de que ya no sean necesarias ayuda con estos límites?

Ciertamente, puedo experimentar con estas cosas que he pensado, pero tal vez haya otras cosas que se puedan hacer para reducir el uso de estas cadenas y palabras limitadas.


Ejemplo de inconsistencia


Notas:

  • Supongo que se realizarán cambios en el archivo informado kpsewhich texmf.cnfsegún la respuesta de Leo Liu en¿Cómo ampliar el “tamaño de la memoria principal” de TeX? (sobrecarga de memoria de pgfplots), que en mi caso es

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

    Si hay diferentes formas de configurar algunas de ellas, también me gustaría conocerlas.

  • Mi principal problema en este momento es indexar una gran cantidad de entradas y el words of memorylímite. Estoy menos preocupado por el tiempo de ejecución (dentro de lo razonable), más por exceder estos límites.
  • Estoy usando TeXLive2015 en caso de que sea importante. Pero si los límites dependen de la distribución, sería bueno saberlo también.
  • Esta pregunta no pretende tratar sobre condiciones de error que resultan en exceder los límites de capacidad (como mi pregunta ingenuaCapacidad de Tex excedida (si se elimina el % después del uso de la macro)).

Referencias:

Respuesta1

¿Es mejor usar \def\foo{xxx} en lugar de \newcommand*{\foo}{xxx}. Puedo realizar la verificación de nombres de macros duplicados fuera de TeX.

No, viene a lo mismo

Por ejemplo, ¿\expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx} tiene algún problema con respecto a la capacidad?

en teoría, sí, el csname debe almacenarse en algún lugar, por lo que consume 2524840 caracteres de cadena de 39884661

pero presumiblemente solo vas a hacer unos 20 caracteres menos, por lo que no hay mucha diferencia entre 39884661

¿Cuál de los siguientes sería mejor?

nuevamente, marginalmente, el primero usa más, ya que define un csname más ( \path) que elimina uno de

 103471 multiletter control sequences out of 15000+600000

pero no estás ni cerca de ese límite

¿\undefing macros después de que ya no son necesarias ayuda con estos límites?

Sí, es por eso que látex elimina muchos comandos en \begin{document}la entrada hash no se recupera (número de comandos de varias letras), pero se recupera la memoria principal utilizada para guardar la definición.

Respuesta2

Hace muchos años di una charla sobre los problemas de "capacidad de TeX excedida" con información general, causas fundamentales y posibilidades para evitarlos.

La primera parte de la charla fue publicada en"Die TeXnische Komödie", número 1995/3, páginas 22 y siguientes.

La página 24 tiene una tabla con todos los mensajes de error de desbordamiento (TeX.web estándar), los parámetros asociados de TeX.web y las configuraciones de los parámetros.

Negativo: (1) la charla y el artículo están solo en alemán, (2) nunca tuve tiempo suficiente para finalizar la serie de artículos, incluidos todos los temas restantes en una segunda y tercera parte, y (3) está basado en TeX estándar. resp. web la versión web2c "bigTeX", sin e-TeX, pdfTeX, XeTeX, LuaTeX y variantes extendidas similares.

información relacionada