为什么 DocumentData 解压缩会损坏 SOURCE_DATE_EPOCH=0

为什么 DocumentData 解压缩会损坏 SOURCE_DATE_EPOCH=0

我用来SOURCE_DATE_EPOCH=0 FORCE_SOURCE_DATE=1 xelatex test 创建可复制的 PDF 文件。

因为我想了解一些细节,所以我test.tex用解压缩来写。


%\DocumentMetadata{uncompress}
\documentclass[a4paper]{article}
\special{dvipdfmx:config z 0}

\begin{document}
test
\end{document}

当然,我不喜欢使用xelatex特定命令\special{dvipdfmx:config z 0}来避免压缩。一切正常,显示差异,编译两次时结果相同。

如果我\special用更通用的命令替换该命令\DocumentMetadata,则会出现差异

$ diff -a test.pdf testX.pdf
220c220
<      <rdf:li>2023-12-06T21:36:39Z</rdf:li>
---
>      <rdf:li>2023-12-06T21:36:32Z</rdf:li>
226,228c226,228
<    <xmp:CreateDate>2023-12-06T21:36:39Z</xmp:CreateDate>
<    <xmp:ModifyDate>2023-12-06T21:36:39Z</xmp:ModifyDate>
<    <xmp:MetadataDate>2023-12-06T21:36:39Z</xmp:MetadataDate>
---
>    <xmp:CreateDate>2023-12-06T21:36:32Z</xmp:CreateDate>
>    <xmp:ModifyDate>2023-12-06T21:36:32Z</xmp:ModifyDate>
>    <xmp:MetadataDate>2023-12-06T21:36:32Z</xmp:MetadataDate>
230c230
<    <xmpMM:InstanceID>uuid:70381c59-1666-4bc2-80a7-7e613d06022e</xmpMM:InstanceID>
---
>    <xmpMM:InstanceID>uuid:2c37e4bc-7448-455d-8793-19c3e55d01ca</xmpMM:InstanceID>
256c256
< <</Creator(LaTeX)/Producer(xetex-0.999995)/CreationDate(D:20231206213639Z)/ModDate(D:20231206213639Z)>>
---
> <</Creator(LaTeX)/Producer(xetex-0.999995)/CreationDate(D:20231206213632Z)/ModDate(D:20231206213632Z)>>

暴露正确的CreationDate包括时间,并且可能引入了更多的时间戳\DocumentMetadata

比较一个版本\special与另一个版本\DocumentMetadata也很有启发性。这个版本有点长,但\special显示:

< <</Creator( XeTeX output 1970.01.01:0000)/Producer(xdvipdfmx \(20220710\))/CreationDate(D:19700101000000-00'00')>>

CreationDate(D:19700101000000-00'00')对应于SOURCE_DATE_EPOCH=0,正确。

顺便说一句,\DocumentMetadata{uncompress}用替换\DocumentMetadata{pdfversion=1.8}也会破坏可重复性。

同样有趣的是:这种行为并不特定于xelatexlualatex并且pdflatex本质上也是这样表现的。

答案1

如果我使用

\DocumentMetadata{uncompress}
\documentclass[a4paper]{article}
%\special{dvipdfmx:config z 0}

\begin{document}
test
\end{document}

使用最新的 texlive 我没有得到任何差异,并且 xml 日期显示的不是纪元的开始,而是您的差异显示的是当前时间

   <xmp:CreateDate>1970-01-01T00:00:00Z</xmp:CreateDate>
   <xmp:ModifyDate>1970-01-01T00:00:00Z</xmp:ModifyDate>
   <xmp:MetadataDate>1970-01-01T00:00:00Z</xmp:MetadataDate>

相关内容