xelatex が同じ決定論的ソースから異なるファイルを生成するのはなぜですか?

xelatex が同じ決定論的ソースから異なるファイルを生成するのはなぜですか?

次のような単純な LaTeX ソース ファイルを取ります。

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

「latex」で処理すると、日付を除いてすべてが同一の DVI ファイルが常に生成されます。

「pdflatex」で処理(複数回)すると、ID と日付を除いて同じ PDF ファイルが生成されます。「lualatex」の場合も同様です。

しかし、「xelatex」で処理(複数回)すると、サイズが異なるまったく異なる PDF ファイルが生成されます。「vimdiff」を使用すると、その違いを簡単に確認できます。

「xelatex」による処理が決定論的ではなく、同じソースに対して同じではないのはなぜですか?

答え1

この問題はドライバxdvipdfmxに関連しています。フォントの一意のタグを生成するために乱数が使用されます。

xelatex -no-pdf test

xdvipdfmx test.xdv
pdffonts test.pdf

タグは次のように変わります

LYKESP+CMR10
CBIVMK+CMR10
...

走るたびに

xdvipdfmx test.xdv

答え2

異なるように見えるのは、一部の実際のバイナリ エンコーディングです。PDF レンダリングはまったく変わらないと思います。私の経験では、ファイル サイズはプラスマイナス 1 バイトしか変わりませんでした (Mac OS X)。このような 2 つの PDF の 16 進モードで ediff を実行しました。最初の違いが現れるスナップショットを以下に示します。

引用ブロック

したがって、この最初の違いは、部分的に埋め込まれたフォントに関連する PDF の一部で発生します。この原因はわかりません。

一般的に言えば、たとえば 213 バイトのものを 256 バイトで保存する必要がある場合、最後の 43 バイトはランダム メモリになる可能性があり、さらにそのようなものを 1 つまたは複数まとめて圧縮すると、さまざまな結果が得られると考えられます。解凍すると、構造ターミネータの後 (または指定されたバイト数の後) にさまざまなランダム ジャンクが残ります。非コーディング DNA のようなものです。これはそれほど非コーディングではないかもしれませんが、余談は避けましょう。

XeTeX ソースコードに精通している人だけが納得のいく答えを出すことができると思います。

未定義については心配しないでくださいC-M-'。私は忘れていたキーボードショートカットを使用してそれをキャプチャしようとしていました。

関連情報