Warum erstellt xelatex unterschiedliche Dateien aus denselben deterministischen Quellen?

Warum erstellt xelatex unterschiedliche Dateien aus denselben deterministischen Quellen?

Nehmen Sie die einfache Latex-Quelldatei:

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

Bei der Verarbeitung mit „Latex“ erhält man immer die gleiche DVI-Datei, die bis auf das Datum überall identisch ist.

Bei (mehrfacher) Verarbeitung mit „pdflatex“ erhält man, bis auf die ID und das Datum, die gleiche PDF-Datei, dasselbe gilt für „lualatex“.

Aber wenn man es (mehrmals) mit „xelatex“ verarbeitet, erhält man völlig unterschiedliche PDF-Dateien mit unterschiedlichen Größen. Mit „vimdiff“ kann man die Unterschiede leicht erkennen.

Warum ist die Verarbeitung mit „xelatex“ nicht deterministisch – nicht für dieselben Quellen gleich?

Antwort1

Das Problem hängt mit dem Treiber xdvipdfmx zusammen. Um eindeutige Tags für Schriftarten zu generieren, werden Zufallszahlen verwendet. Versuchen Sie

xelatex -no-pdf test

xdvipdfmx test.xdv
pdffonts test.pdf

Das Tag ändert sich wie folgt:

LYKESP+CMR10
CBIVMK+CMR10
...

jedes Mal, wenn du läufst

xdvipdfmx test.xdv

Antwort2

Was sich zu unterscheiden scheint, ist die tatsächliche binäre Kodierung einiger Teile. Ich vertraue darauf, dass die PDF-Darstellung überhaupt nicht variiert. Meiner Erfahrung nach änderte sich die Dateigröße nur um plus oder minus 1 Byte (Mac OS X). Ich habe ein Ediff im Hexadezimalmodus von zwei solchen PDFs erstellt. Hier ist ein Schnappschuss, wo die ersten Unterschiede auftreten:

Blockquote

Dieser erste Unterschied tritt also in einem Teil des PDFs im Zusammenhang mit der teilweise eingebetteten Schriftart auf. Ich weiß nicht, woran das liegt.

Generell kann ich mir vorstellen, dass, wenn Sie beispielsweise etwas 213 Bytes haben, das in 256 Bytes gespeichert werden muss, die letzten 43 Bytes zufälliger Speicher sein können. Wenn außerdem ein oder mehrere solcher Dinge zusammen komprimiert werden, erhalten Sie unterschiedliche Ergebnisse. Beim Dekomprimieren wird nach den Strukturterminatoren (oder nach einer bestimmten Anzahl von Bytes) unterschiedlicher zufälliger Müll vorhanden sein. Wie nicht-kodierende DNA. Was vielleicht nicht so sehr nicht-kodierend ist, aber lassen Sie uns nicht abschweifen.

Ich schätze, nur jemand, der mit dem XeTeX-Quellcode vertraut ist, kann eine überzeugende Antwort geben.

Machen Sie sich wegen des Undefinierten keine Sorgen C-M-', ich habe versucht, das Ding mithilfe von Tastaturkürzeln zu erfassen, die ich vergessen hatte.

verwandte Informationen