¿Por qué xelatex produce archivos diferentes a partir de las mismas fuentes deterministas?

¿Por qué xelatex produce archivos diferentes a partir de las mismas fuentes deterministas?

Tome el archivo fuente de látex simple:

\documentclass{article}
\usepackage{lipsum}
\usepackage{amsgen}
\begin{document}
\lipsum[1-10]
\end{document}

Cuando se procesa con "látex", siempre se obtiene el mismo archivo DVI, idéntico en todas partes excepto en la fecha.

Cuando se procesa (varias veces) con "pdflatex", se obtiene el mismo archivo PDF, con la excepción de un ID y la fecha, y lo mismo para "lualatex".

Pero cuando se procesa (varias veces) con "xelatex", se obtienen archivos PDF muy diferentes, con diferentes tamaños. Se pueden ver las diferencias fácilmente con "vimdiff".

¿Por qué el procesamiento con "xelatex" no es determinista y no es el mismo para las mismas fuentes?

Respuesta1

El problema está relacionado con el controlador: xdvipdfmx. Para generar etiquetas únicas para fuentes, se utilizan números aleatorios. Intentar

xelatex -no-pdf test

xdvipdfmx test.xdv
pdffonts test.pdf

La etiqueta cambiará como

LYKESP+CMR10
CBIVMK+CMR10
...

cada vez que corres

xdvipdfmx test.xdv

Respuesta2

Lo que parece diferir son las codificaciones binarias reales de algunas partes. Confío en que el renderizado del pdf no varíe en absoluto. En mi experiencia, el tamaño del archivo cambió solo en más o menos 1 byte (mac os x). He hecho un ediff en modo hexadecimal de dos de estos PDF, aquí hay una instantánea de donde aparecen las primeras diferencias:

cita en bloque

Esta primera diferencia se produce, por tanto, en una parte del pdf con respecto a la fuente parcialmente incrustada. No sé qué causa esto.

En términos generales, puedo imaginar que si tiene, por ejemplo, algo de 213 bytes que debe almacenarse en 256 bytes, entonces los últimos 43 bytes pueden ser memoria aleatoria; si, además, una o muchas de esas cosas juntas se comprimen, obtendrá resultados variables. Al descomprimir, habrá basura aleatoria variable después de los terminadores de estructuras (o después de un número determinado de bytes). Como ADN no codificante. Lo cual quizás no sea tanto una falta de codificación, pero no nos desvayamos.

Supongo que sólo alguien familiarizado con el código fuente de XeTeX puede responder de manera convincente.

No te preocupes por lo C-M-'indefinido, estaba tratando de capturarlo mediante atajos de teclado que había olvidado.

información relacionada