Почему xelatex создает разные файлы из одних и тех же детерминированных источников?

Почему xelatex создает разные файлы из одних и тех же детерминированных источников?

Возьмем простой исходный файл Latex:

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

При обработке с помощью «латекса» вы всегда получаете один и тот же DVI-файл, идентичный везде, за исключением даты.

При обработке (несколько раз) с помощью «pdflatex» вы получаете тот же 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). Я сделал ediff в шестнадцатеричном режиме двух таких pdf, вот снимок того, где появляются первые различия:

Цитата из блока

Это первое различие, таким образом, происходит в части pdf относительно частично внедренного шрифта. Я не знаю, что является причиной этого.

Вообще говоря, я могу себе представить, что если у вас есть, скажем, 213 байт, которые должны храниться в 256 байтах, то последние 43 байта могут быть случайной памятью, если, кроме того, одна или несколько таких вещей вместе сжаты, то вы получите разный результат. При распаковке будет разный случайный мусор после терминаторов структур (или после заданного количества байтов). Как некодирующая ДНК. Которая, возможно, не такая уж и некодирующая, но давайте не будем отвлекаться.

Я полагаю, убедительный ответ может дать только тот, кто знаком с исходным кодом XeTeX.

Не беспокойтесь о C-M-'неопределенном, я пытался зафиксировать это с помощью сочетаний клавиш, которые забыл.

Связанный контент