%20-%20texlive%202022.png)
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 つだけ実行されるようにします。これにより、 を実際に実行する前にファイル システム ロックが取得され、実行後にこのロックが解放されます。latexmk
biber
biber
実装:
- 次の 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
latexmk
次のコマンドを使用して、のインスタンスを必要な数だけ実行します。 は$HOME/bin
、bash スクリプトを保存したディレクトリの名前に置き換える必要があることに注意してください。
PATH=$HOME/bin:$PATH latexmk <your_flags> <your_latrex_file>