biber のエラー (latexmk 経由) - texlive 2022

biber のエラー (latexmk 経由) - texlive 2022

macOS Monterey バージョン 12.6 でのかなり複雑な (論文テンプレート) LaTeX ファイルの「通常の」コンパイルは、コマンド を使用することで、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)

2 つの biber インスタンス (多かれ少なかれ) を同時に実行してみましたが、問題はありませんでした。問題は の組み合わせに関連していると思われますlatexmk + biber

誰かこの biber のエラー メッセージについて何か情報を提供してもらえませんか?

答え1

これは、 の異なるインスタンスに異なるキャッシュを強制することで実現できます。インスタンスごとにbiber環境変数を別々に設定するだけで、設定されている場合、キャッシュの場所が決まります。PAR_TMPDIR

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

答え2

これは実際には解決策ではありませんが、問題に対する私の回避策です。

コンテキスト: macOS で、latxmk異なるフォルダーで 2 つのインスタンスを同時に実行します。

症状: latexmkシンバイナリを実行できません

原因:latexmkのインスタンスが 2 つbiber 同時に実行されています。

診断:biberキャッシュ ディレクトリを使用してデータの読み取りと保存を行いますが、これらのアクションは の同時実行に対して適切に保護されていませんbiber

解決策:独自のフロントエンドを呼び出しbiberて、のインスタンスが 1 つだけ実行されるようにします。これにより、 を実際に実行する前にファイル システム ロックが取得され、実行後にこのロックが解放されます。latexmkbiberbiber

実装:

  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>

関連情報