在 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
,然后释放此锁。
执行:
- 将以下 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>