Ошибка в biber (через latexmk) - texlive 2022

Ошибка в biber (через latexmk) - texlive 2022

«Обычная» компиляция довольно сложного (шаблон диссертации) файла latex в 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.

Может ли кто-нибудь прояснить сообщение об ошибке этого бибера?

решение1

Вы можете сделать это, принудительно задавая разные кэши для разных экземпляров biber. Просто установите переменную окружения PAR_TMPDIRпо-разному для экземпляров, так как это определяет местоположение кэша, если установлено:

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

решение2

Это не совсем решение, а скорее мой обходной путь к проблеме!

Контекст: в macOS запуск двух экземпляров latxmkодновременно, но в разных папках.

Симптом: latexmkпроисходит сбой с сообщением «не может выполнить тонкий двоичный файл

Причина: одновременно latexmkзапущены два экземпляра .biber

Диагноз: biberиспользует свой каталог кэша для чтения и хранения данных, и эти действия не защищены должным образом для одновременного выполнения biber.

Решение: убедитесь, что запущен только один экземпляр, biberвызвав latexmkнаш собственный интерфейс for 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>

Связанный контент