取得簡單的乳膠來源文件:
\documentclass{article}
\usepackage{lipsum}
\usepackage{amsgen}
\begin{document}
\lipsum[1-10]
\end{document}
當使用“latex”處理時,您總是會得到相同的 DVI 文件,除了日期之外,其他地方都相同。
當使用“pdflatex”處理(多次)時,您會得到相同的 PDF 文件,但 ID 和日期除外,“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)。我已經以十六進制模式對兩個這樣的pdf進行了ediff,這是第一個差異出現的位置的快照:
因此,第一個差異出現在 pdf 相對於部分嵌入字體的部分。我不知道是什麼原因造成的。
一般來說,我可以想像,如果你說一些213 位元組的東西必須儲存在256 位元組中,那麼最後43 位元組可能是隨機內存,如果此外一個或多個這樣的東西一起被壓縮,那麼你會得到不同的結果。解壓縮時,結構終止符後(或給定位元組數後)會出現一些變化的隨機垃圾。就像非編碼DNA一樣。這也許不是非編碼,但我們不要離題。
我猜只有熟悉 XeTeX 原始碼的人才能令人信服地回答。
不要擔心C-M-'
未定義的東西,我試圖透過我忘記的鍵盤快捷鍵來捕獲東西。