¿Quién sabe sobre el formato de fdb_latexmk?

¿Quién sabe sobre el formato de fdb_latexmk?

La herramienta de construcción latexmkse utiliza ampliamente. Al compilar xxx.texcon , se crea latexmk xxxun archivo intermedio . xxx.fdb_latexmkAunque puedo descubrir algunas propiedades de ese archivo de texto, quiero estar seguro. Investigué en cuyo código fuente latexmk está disponible enhttps://github.com/debian-tex/latexmk/blob/master/latexmk.pl, pero mi conocimiento de Perl es tan débil que yo... bueno, realmente no lo entiendo.

Lo que ya entiendo:

  • La primera línea # Fdb version 4podría referirse a la versión latexmk que es 4.xxx en mi caso.
  • el resto son secciones como se describe a continuación. Hay casos con una sola sección.

Cada sección tiene una forma determinada:

  • La primera línea es la única línea sin sangría. Podría ser algo como
["lualatex"] 1702989679 "bewerbung.tex" "bewerbung.pdf" "bewerbung" 1702989681 0

Parece referirse a una regla y por eso la llamo línea de regla.

  • Cada línea subsiguiente hasta la línea (generated)se refiere a una fuente, por lo que la llamo línea de fuente.
  • Luego viene una línea (generated),
  • cada línea que sigue (generated)hasta que la línea (rewritten before read) parece referirse a un objetivo, así que la llamo línea de objetivo.
  • la última línea de una sección es(rewritten before read)

Preguntas:

  • ¿La lista anterior es una forma general o esto se aplica a mis archivos solo accidentalmente?
  • La línea de regla parece comenzar con ["nombre de regla"] donde el nombre de la regla puede ser definido por el usuario o integrado. El resto de la línea, en particular los numerosos números, no me quedan claros.
  • Las líneas fuente parecen comenzar haciendo "file path"referencia a un archivo fuente. Luego viene un número que no puedo interpretar, luego el tamaño del archivo y un hash, muy probablemente para identificar cambios, luego algo entre comillas: está vacío si el archivo fuente no se creó, sino el nombre de la regla que creó el archivo.
  • Las líneas de destino parecen claras: nombre del archivo generado entre comillas.

¿Quién puede ayudarme a conocer los detalles?

Respuesta1

Mantenedor de Latexmk aquí. Dado que los archivos .fdb_latexmk están destinados al uso interno de latexmk, (actualmente) no existe documentación oficial. Esta respuesta es el enfoque más cercano a la documentación.

En el código fuente de latexmk, la subrutina bastante corta rdb_write define efectivamente el formato, mostrando lo que está escrito. Los nombres de las variables cuyos valores están escritos dan una indicación del significado.

La versión en la primera línea es simplemente un número de versión del diseño utilizado para los archivos .fdb_latexmk. Cada vez que necesito cambiar los tipos de información en estos archivos, actualizo el número de versión. Cuando latexmk lee un archivo .fdb_latexmk, verifica el número de versión de fdb y abandona la lectura si el número de versión es diferente al actual. (Evidentemente, el archivo habría sido creado con una versión diferente de latexmk). La versión actual de fdb es 4.

La sangría es puramente una conveniencia para los humanos que leen el archivo y se ignora cuando latexmk lee el archivo. Las líneas en blanco y las líneas de comentarios se ignoran (excepto la línea de comentario inicial que proporciona el número de versión de fdb). Las líneas de comentarios son aquellas que comienzan con posibles espacios en blanco seguidos de '#' o '%'.

La estructura general es exactamente lo que ves.

Para cada regla hay una sección que es introducida por una línea que comienza ["..."] con el nombre de la regla. Los campos que siguen en la misma línea son:

  1. Hora del sistema al inicio de la última vez que se ejecutó la regla.
  2. Archivo fuente principal, por ejemplo, el archivo .tex del documento para pdflatex.
  3. Archivo de destino principal (si lo hay), por ejemplo, el archivo .pdf de salida para pdflatex.
  4. El nombre base de archivos, por ejemplo, archivos de registro y similares.
  5. La hora del sistema en la que se verificó la regla por última vez para determinar si era necesaria una nueva ejecución.
  6. Un código de estado para la última ejecución: 0 para éxito. Actualmente, otros valores posibles son: 1 si la regla no pudo crear el archivo de salida deseado, 2 si hubo algún otro tipo de error.

Después de esa línea de regla hay una línea para cada uno de los archivos fuente (conocidos) de la regla: cada línea tiene el nombre del archivo (entre comillas dobles), luego la hora de modificación, el tamaño y la firma md5 del archivo, medido justo antes de que se ejecutara la regla. Finalmente está el nombre de la regla, si la hay, que generó el archivo, entre comillas dobles.

Después de eso, hay otra parte de los datos de la regla encabezada por una línea que contiene '(generado)'. Esta es una lista de nombres de archivos (entre comillas dobles, una por línea) para los archivos generados durante la ejecución de la regla.

La parte final de los datos de la regla está encabezada por una línea que contiene "(reescrito antes de leer)". Le sigue una lista de nombres de archivos (nuevamente entre comillas dobles, una por línea). Normalmente esta lista está vacía. Todos los archivos aquí existían al comienzo de la ejecución y se leyeron durante la ejecución, pero se reescribieron antes de la primera vez que se leyeron.

Debo agregar que cuando se encuentran nombres de archivos que no son ASCII, se codifican como UTF-8.

información relacionada