A ferramenta de construção latexmk
é amplamente utilizada. Ao compilar xxx.tex
com 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 4
pode 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:
- Hora do sistema no início da última vez que a regra foi executada.
- Arquivo de origem primário, por exemplo, o arquivo .tex do documento para pdflatex.
- Arquivo de destino primário (se houver), por exemplo, o arquivo .pdf de saída para pdflatex.
- O nome base dos arquivos, por exemplo, arquivos de log e similares.
- A hora do sistema em que a regra foi verificada pela última vez para saber se uma nova execução era necessária.
- 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.