該建置工具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 版本號的初始註解行除外)。註解行是以可能的空格開頭,後面跟著“#”或“%”。
整體結構正是您所看到的。
對於每個規則,都有一個由以規則名稱開頭 ["..."] 的行引入的部分。同一行後面的欄位是:
- 上次運行規則開始時的系統時間。
- 主要來源文件,例如 pdflatex 文件的 .tex 檔案。
- 主要目標檔案(如果有),例如 pdflatex 的輸出 .pdf 檔案。
- 文件的基本名稱,例如日誌文件等。
- 上次檢查規則是否需要重新運行時的系統時間。
- 上次運行的狀態碼:0 表示成功。目前,其他可能的值是:如果規則無法建立預期的輸出文件,則為 1;如果存在其他類型的錯誤,則為 2。
該規則行後面是該規則的每個(已知)源文件的一行:每行都有文件名(用雙引號引起來),然後是文件的修改時間、大小和 md5 簽名,如剛剛測量的在規則運行之前。最後是產生檔案的規則名稱(如果有),用雙引號引起來。
之後是規則資料的另一部分,以包含「(生成)」的行開頭。這是規則運行期間產生的檔案的檔案名稱清單(用雙引號括起來,每行一個)。
規則資料的最後部分以包含「(在讀取之前重寫)」的行開頭。接下來是檔名列表(同樣用雙引號引起來,每行一個)。通常這個清單是空的。這裡的任何檔案都在運行開始時存在,並在運行期間被讀取,但它們在第一次讀取之前被重寫。
我應該補充一點,當我遇到非 ASCII 檔案名稱時,它們會被編碼為 UTF-8。