biber 中的错误(通过 latexmk) - texlive 2022

biber 中的错误(通过 latexmk) - texlive 2022

在 macOS Monterey 版本 12.6 中,使用命令可以完美地在 TeX Live 2021 和 TeX Live 2022 中对相当复杂(论文模板)的 Latex 文件进行“正常”编译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>

相关内容