Como faço para produzir documentos consistentes em bytes com pdflatex?

Como faço para produzir documentos consistentes em bytes com pdflatex?

Quando executo o pdflatex no mesmo arquivo .tex duas vezes, ele produz resultados semelhantes aos meus olhos, mas o conteúdo do arquivo é um pouco diferente (conforme revelado com uma soma de verificação md5). Existe algum sinalizador que eu possa passar para o pdflatex que manterá a saída consistente?

Quais metadados sensíveis ao ambiente podem estar no meu PDF? Como posso controlar isso?

Atualizar:Fazendo um diff -a, encontro o seguinte:

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

Responder1

Você pode alterar o conteúdo do dicionário de informações do PDF usando a \pdfinfoprimitiva do Pdftex:

\def\fixedpdfdate{D:20100413000000+00'00'}
\pdfinfo{
    /DatadeCriação (\fixedpdfdate)
     /ModDate (\fixedpdfdate) }

Coloque isso logo no início do documento: existe o risco de o dicionário ser escrito em vários pedaços.

Pós-escrito Graças auma duplicata da perguntasendo questionado em tex.stackexchange.com, descobri que o /IDvalor passado no final do PDF startxrefainda muda de invocação para invocação de Pdftex. Você pode destruir o conteúdo de /ID, aparentemente sem efeitos nocivos: edite o texto do PDF entre o /IDidentificador para startxrefalgo como:

/ID [<B74AEC0FBDE0F25D7D2F5099291FEC6F> <B74AEC0FBDE0F25D7D2F5099291FEC6F>] >>
startxref
para:/ID [<0> <0>] >> startxref

Duvido que seja possível garantir que /ID seja imutável no Pdftex, mas talvez isso possa ser feito no Luatex.

Responder2

Dê uma olhada na -Iopção de diff:

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

informação relacionada