biber 中的錯誤(透過 Latexmk) - texlive 2022

biber 中的錯誤(透過 Latexmk) - texlive 2022

在 macOS Monterey 版本 12.6 中,使用指令 可以在 TeX Live 2021 和 TeX Live 2022 中完美地運行相當複雜(論文模板)乳膠檔案的「正常」編譯latexmk -time -shell-escape -synctex=0 -emulate-aux-dir -pdf -silent template

為了加快此模板不同變體的測試,我......

  • 製作原始程式碼的多個副本(每個副本位於各自的資料夾中);
  • 根據需要自訂每個副本;和
  • latexmk使用上面的命令運行 的多個實例,每個副本一個。

使用 TeX Live 2021,腳本運行順利。

使用 TeX Live 2022,我收到此錯誤: /var/folders/f1/4fh25zqx0_bd81r_n925d_4r0000gp/T/par-6a6d6c/cache-ff0e0f52fce2a47a2eaf3d127e3cbc846f2f7d08/thin/biber: cannot execute thin binary /var/folders/f1/4fh25zqx0_bd81r_n925d_4r0000gp/T/par-6a6d6c/cache-ff0e0f52fce2a47a2eaf3d127e3cbc846f2f7d08/thin/biber (errno=8)

我嘗試同時運行兩個 biber 實例(或多或少),沒有問題。我猜這個問題與 的組合有關latexmk + biber

有人可以提供一些有關此 biber 錯誤訊息的見解嗎?

答案1

您可以透過為 的不同實例強制使用不同的快取來實現此目的biber。只需PAR_TMPDIR為實例設定不同的環境變量,因為這決定了快取位置(如果設定):

mkdir /tmp/bibercache{1,2}
PAR_TEMPDIR=/tmp/bibercache1 biber ...
PAR_TEMPDIR=/tmp/bibercache2 biber ...

答案2

這不是真正的解決方案,而是我解決問題的方法!

latxmk上下文:在 macOS 中,同時運行兩個實例,但在不同的資料夾中。

症狀:latexmk失敗並顯示訊息“無法執行精簡二進位文件

原因: 同時latexmk運行兩個執行個體。biber

診斷:biber使用其cahce目錄來讀取和存儲數據,並且這些操作對於並發執行的biber.

biber解決方案:透過latexmk呼叫我們自己的前端來確保只有一個正在運行的實例biber,該前端將在運行真實實例之前獲取檔案系統鎖biber,然後釋放該鎖。

執行:

  1. 將以下 bash 腳本複製到您選擇的某個目錄並命名biber(例如,$HOME/bin/biber)。請記住BIBER在腳本中自訂變數。
#!/bin/bash

# Please set BIBER to the real biber command.
# Check its location with the command "type biber".
BIBER=/Library/TeX/texbin/biber

LOCKFILE=/tmp/biber.lock

_lock() { 
# Wait until the Lock File does not exists, then create it
 while ! { set -C; 2>/dev/null >$LOCKFILE; }; do :; done
}

_unlock() {
    rm -f $LOCKFILE
}

_lock
$BIBER $@
_unlock

  1. latexmk使用以下命令運行任意數量的實例。請注意,$HOME/bin必須替換為保存 bash 腳本的目錄名稱。
PATH=$HOME/bin:$PATH latexmk <your_flags> <your_latrex_file>

相關內容