%20-%20texlive%202022.png)
«Обычная» компиляция довольно сложного (шаблон диссертации) файла 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
и снимет эту блокировку впоследствии.
Выполнение:
- Скопируйте следующий скрипт 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>