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
- Nombre de la variable
- Valor por defecto.
- Absolutomáximo al que se puede configurar.
- ¿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 memory
que 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_top
y extra_mem_bot
eso también se puede utilizar. Pero, ¿esto permite límites de capacidad más grandes words of memory
o 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.
¿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.¿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í asignardir1/dir1/long-file-name
una cadena más corta paraZXyw
ahorrar en estos límites? Sí, se pierde la legibilidad, pero puedo automatizar este reemplazo.¿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}
¿
\undef
Utilizar 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
En mi
/usr/local/texlive/2015/texmf.cnf
tengomain_memory = 12435455
(12,4M), que es el máximo indicado segúnel látex me da el error: Ay, mis constantes internas han sido golpeadas. Si intento aumentarlo solo en 1,12435456
obtengoOuch---my internal constants have been clobbered!---case 14
. Incluso después de ejecutarsudo vi texmf.cnf
segúnAumentar la capacidad de LaTeX.Sin embargo, la solución de Thomas F. Sturm a¿Cómo ampliar el “tamaño de la memoria principal” de TeX? (sobrecarga de memoria de pgfplots)muestra
100571134 words of memory out of 103000000
indicando así que el máximo es al menos 103M.
Además, en el archivo
/usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf
hay un comentario que diceMemory. Must be less than 8,000,000 total.
. Bueno, eso es claramente incorrecto ya que puedo usar más que eso.
Notas:
Supongo que se realizarán cambios en el archivo informado
kpsewhich texmf.cnf
segú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 memory
lí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:
- ¿Existen límites en la cantidad de nuevas macros o comandos en TeX/LaTeX?enumera las variables mencionadas aquí y proporciona un caso de prueba. Sin embargo, el suyo se centra específicamente en los límites en función del número de macros.
- Componentes del uso de la memoria de (La)TeXes una excelente referencia, por lo que tal vez estas respuestas puedan agregarse allí y cerrarse como un duplicado.
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.