Quem sabe sobre o formato do fdb_latexmk?

Quem sabe sobre o formato do fdb_latexmk?

A ferramenta de construção latexmké amplamente utilizada. Ao compilar xxx.texcom latexmk xxx, um arquivo intermediário xxx.fdb_latexmké criado. Embora eu consiga descobrir algumas propriedades desse arquivo de texto, quero ter certeza. Pesquisei no código fonte latexmk que está disponível emhttps://github.com/debian-tex/latexmk/blob/master/latexmk.pl, mas meu conhecimento de Perl é tão fraco que eu... bem, eu realmente não entendo.

O que eu já entendi:

  • a primeira linha # Fdb version 4pode se referir à versão latexmk que é 4.xxx no meu caso.
  • o resto são seções conforme descrito abaixo. Existem casos com uma única seção.

Cada seção tem um determinado formato:

  • a primeira linha é a única linha sem recuo. Poderia ser algo como
["lualatex"] 1702989679 "bewerbung.tex" "bewerbung.pdf" "bewerbung" 1702989681 0

Parece referir-se a uma regra e por isso chamo-lhe linha de regra.

  • cada linha subsequente a seguir até a linha (generated)refere-se a uma fonte, portanto, eu a chamo de linha de origem.
  • então vem uma linha (generated),
  • cada linha seguinte (generated)até a linha (rewritten before read) parece se referir a um alvo, então eu a chamo de linha de destino.
  • a última linha de uma seção é(rewritten before read)

Questões:

  • A lista acima é uma forma geral ou isso é verdade apenas para meus arquivos acidentalmente?
  • A linha da regra parece começar com ["nome da regra"] onde o nome da regra pode ser definido pelo usuário ou integrado. O resto da linha, em particular os muitos números, não estão claros para mim.
  • As linhas de origem parecem começar "file path"referindo-se a um arquivo de origem. Depois vem um número que não consigo interpretar, depois o tamanho do arquivo e um hash, provavelmente para identificar alterações, depois algo entre aspas: está vazio se o arquivo de origem não for criado, mas o nome da regra que criou o arquivo.
  • As linhas de destino parecem claras: nome do arquivo gerado entre aspas.

Quem pode me ajudar a descobrir os detalhes?

Responder1

Mantenedor do Latexmk aqui. Como os arquivos .fdb_latexmk são destinados ao uso interno do latexmk, não há (atualmente) documentação oficial. Esta resposta é a abordagem mais próxima da documentação.

No código-fonte do latexmk, a sub-rotina bastante curta rdb_write define efetivamente o formato, mostrando o que está escrito. Os nomes das variáveis ​​cujos valores estão escritos dão uma indicação do significado.

A versão na primeira linha é simplesmente um número de versão do layout usado para os arquivos .fdb_latexmk. Sempre que preciso alterar os tipos de informações nesses arquivos, atualizo o número da versão. Quando latexmk lê um arquivo .fdb_latexmk, ele verifica o número da versão do fdb e abandona a leitura se o número da versão for diferente do atual. (O arquivo evidentemente teria sido criado por uma versão diferente do latexmk.) A versão atual do fdb é 4.

O recuo é puramente uma conveniência para os humanos que leem o arquivo e é ignorado quando o arquivo é lido pelo latexmk. Linhas em branco e linhas de comentários são ignoradas (exceto a linha de comentário inicial que fornece o número da versão do fdb). As linhas de comentários são aquelas que começam com um possível espaço em branco seguido de '#' ou '%'.

A estrutura geral é exatamente o que você vê.

Para cada regra existe uma seção que é introduzida por uma linha que começa ["..."] com o nome da regra. Os campos que seguem na mesma linha são:

  1. Hora do sistema no início da última vez que a regra foi executada.
  2. Arquivo de origem primário, por exemplo, o arquivo .tex do documento para pdflatex.
  3. Arquivo de destino primário (se houver), por exemplo, o arquivo .pdf de saída para pdflatex.
  4. O nome base dos arquivos, por exemplo, arquivos de log e similares.
  5. A hora do sistema em que a regra foi verificada pela última vez para saber se uma nova execução era necessária.
  6. Um código de status para a última execução: 0 para sucesso. Atualmente, outros valores possíveis são: 1 se a regra não conseguiu criar o arquivo de saída pretendido, 2 se houve algum outro tipo de erro.

Seguindo essa linha de regra há uma linha para cada um dos arquivos de origem (conhecidos) da regra: Cada linha tem o nome do arquivo (entre aspas duplas), depois o tempo de modificação, tamanho e assinatura md5 do arquivo, conforme medido apenas antes da regra ser executada. Finalmente há o nome da regra, se houver, que gerou o arquivo, entre aspas duplas.

Depois disso, há outra parte dos dados da regra encabeçada por uma linha contendo '(gerado)'. Esta é uma lista de nomes de arquivos (entre aspas duplas, um por linha) para arquivos gerados durante a execução da regra.

A parte final dos dados da regra é encabeçada por uma linha contendo '(reescrito antes de ler)'. É seguido por uma lista de nomes de arquivos (novamente entre aspas duplas, um por linha). Normalmente esta lista está vazia. Todos os arquivos aqui existiam no início da execução e foram lidos durante a execução, mas foram reescritos antes da primeira vez em que foram lidos.

Devo acrescentar que quando nomes de arquivos não-ASCII são encontrados, eles são codificados como UTF-8.

informação relacionada