誰知道fdb_latexmk的格式?

誰知道fdb_latexmk的格式?

該建置工具latexmk被廣泛使用。xxx.tex使用進行編譯時,會建立latexmk xxx一個中間檔案。xxx.fdb_latexmk雖然我可以找出該文字檔案的一些屬性,但我想確定一下。我研究了其源代碼,latexmk 可以在https://github.com/debian-tex/latexmk/blob/master/latexmk.pl,但是我的perl知識太薄弱了,以至於我......好吧,我不太明白。

我已經明白了:

  • 第一行# Fdb version 4可以參考 Latexmk 版本,在我的例子中是 4.xxx 。
  • 其餘部分如下所述。有些情況只有一個部分。

每個部分都有一定的形式:

  • 第一行是唯一沒有縮排的行。可能是這樣的
["lualatex"] 1702989679 "bewerbung.tex" "bewerbung.pdf" "bewerbung" 1702989681 0

似乎指的是一條規則,所以我稱之為規則線。

  • 直到行之後的每個後續行都(generated)引用來源,因此我將其稱為來源行。
  • 然後出現一行(generated)
  • (generated)直到該行之後的每一行(rewritten before read) 似乎都指向一個目標,因此我將其稱為目標行。
  • 一節的最後一行是(rewritten before read)

問題:

  • 上面的列表是一般形式還是我的文件只是偶然出現這種情況?
  • 規則行似乎以 [“規則名稱”] 開頭,其中規則名稱可以是使用者定義的或內建的。該行的其餘部分,特別是許多數字我不清楚。
  • 原始碼行似乎是從"file path"引用原始檔開始的。然後是一個我無法解釋的數字,然後是文件的大小和哈希值,很可能是為了識別更改,然後是引號中的內容:如果未創建源文件,則為空,但創建文件的規則名稱。
  • 目標行看起來很清楚:產生的檔案名稱用引號引起來。

誰能幫我了解詳情?

答案1

Latexmk 維護者在這裡。由於 .fdb_latexmk 檔案供 Latexmk 內部使用,因此(目前)沒有官方文件。這個答案是最接近文檔的方法。

在 Latexmk 原始碼中,相當短的子程式 rdb_write 透過顯示寫入的內容來有效地定義格式。其值被寫入的變數的名稱給出了含義的指示。

第一行中的版本只是 .fdb_latexmk 檔案所用佈局的版本號。每當我發現需要更改這些文件中的信息類型時,我都會更新版本號。當latexmk讀取.fdb_latexmk檔案時,它會檢查fdb版本號,如果版本號與目前版本號不同,則放棄讀取。 (該檔案顯然是由不同版本的 Latexmk 創建的。)目前的 fdb 版本是 4。

縮排純粹是為了方便人們閱讀文件,在 Latexmk 讀取文件時會被忽略。空白行和註解行將被忽略(給出 fdb 版本號的初始註解行除外)。註解行是以可能的空格開頭,後面跟著“#”或“%”。

整體結構正是您所看到的。

對於每個規則,都有一個由以規則名稱開頭 ["..."] 的行引入的部分。同一行後面的欄位是:

  1. 上次運行規則開始時的系統時間。
  2. 主要來源文件,例如 pdflatex 文件的 .tex 檔案。
  3. 主要目標檔案(如果有),例如 pdflatex 的輸出 .pdf 檔案。
  4. 文件的基本名稱,例如日誌文件等。
  5. 上次檢查規則是否需要重新運行時的系統時間。
  6. 上次運行的狀態碼:0 表示成功。目前,其他可能的值是:如果規則無法建立預期的輸出文件,則為 1;如果存在其他類型的錯誤,則為 2。

該規則行後面是該規則的每個(已知)源文件的一行:每行都有文件名(用雙引號引起來),然後是文件的修改時間、大小和 md5 簽名,如剛剛測量的在規則運行之前。最後是產生檔案的規則名稱(如果有),用雙引號引起來。

之後是規則資料的另一部分,以包含「(生成)」的行開頭。這是規則運行期間產生的檔案的檔案名稱清單(用雙引號括起來,每行一個)。

規則資料的最後部分以包含「(在讀取之前重寫)」的行開頭。接下來是檔名列表(同樣用雙引號引起來,每行一個)。通常這個清單是空的。這裡的任何檔案都在運行開始時存在,並在運行期間被讀取,但它們在第一次讀取之前被重寫。

我應該補充一點,當我遇到非 ASCII 檔案名稱時,它們會被編碼為 UTF-8。

相關內容