pdflatex を使用してバイト単位で一貫性のあるドキュメントを作成するにはどうすればよいですか?

pdflatex を使用してバイト単位で一貫性のあるドキュメントを作成するにはどうすればよいですか?

同じ .tex ファイルに対して pdflatex を 2 回実行すると、目には似たような結果が生成されますが、ファイルの内容はわずかに異なります (md5 チェックサムで明らかになります)。出力の一貫性を保つために pdflatex に渡すことができるフラグはありますか?

PDF にはどのような環境依存メタデータが含まれている可能性がありますか? それを制御するにはどうすればよいですか?

アップデート:diff -a を実行すると、次のようになります。

> /CreationDate (D:20100413035938Z)
< /ModDate (D:20100413035938Z)
---
> /CreationDate (D:20100413041320Z)
> /ModDate (D:20100413041320Z)
106c106
< /ID [<41D2805AE64117914EDF6E09554EABAE> <41D2805AE64117914EDF6E09554EABAE>] >>
---
> /ID [<071832DAA2E77E13D96460479D9C6664> <071832DAA2E77E13D96460479D9C6664>] >>

答え1

\pdfinfoPdftex のプリミティブを使用して、PDF の Info 辞書の内容を変更できます。

\def\fixedpdfdate{D:20100413000000+00'00'}
\pdfinfo{
    /作成日 (\fixedpdfdate)
     /ModDate (\fixedpdfdate) }

これをドキュメントの先頭に置きます。辞書が複数のチャンクに分割されて書き出されるリスクがあります。

追記 感謝質問の重複/IDtex.stackexchange.com で質問したところ、 PDF の最後に に渡される値は、startxrefPdftex の呼び出しごとに変わることがわかりました。 の内容を上書きしても、悪影響はないようです。次のよう に、識別子/IDから までの PDF のテキストを編集します。/IDstartxref

/ID [<B74AEC0FBDE0F25D7D2F5099291FEC6F> <B74AEC0FBDE0F25D7D2F5099291FEC6F>] >>
開始xref
に:/ID [<0> <0>] >> startxref

Pdftex 内から /ID が変更されないことを保証できるかどうかは疑問ですが、Luatex ではそれができるかもしれません。

答え2

-I次のオプションを見てみましょうdiff:

   -I PATTERN  --ignore-matching-lines=PATTERN
          Ignore changes whose lines all match PATTERN.

関連情報