Erro no biber (por meio de latexmk) - texlive 2022

Erro no biber (por meio de latexmk) - texlive 2022

A compilação “normal” de um arquivo látex bastante complexo (modelo de tese), no macOS Monterey versão 12.6, funciona perfeitamente no TeX Live 2021 e no TeX Live 2022, com o comando latexmk -time -shell-escape -synctex=0 -emulate-aux-dir -pdf -silent template.

Para acelerar o teste de diferentes variantes deste modelo, eu…

  • faça várias cópias da fonte (cada cópia em cada pasta);
  • personalize cada uma das cópias conforme necessário; e
  • execute várias instâncias de latexmk, uma sobre cada cópia, com o comando acima.

Com o TeX Live 2021, o script funciona perfeitamente.

Com o TeX Live 2022, recebo este erro: /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)

Tentei rodar duas instâncias do biber (mais ou menos) ao mesmo tempo e não houve problema. Acho que o problema está relacionado à combinação de latexmk + biber.

Alguém pode fornecer algumas dicas sobre a mensagem de erro deste biber?

Responder1

Você pode fazer isso forçando caches diferentes para instâncias diferentes do biber. Basta definir a variável de ambiente PAR_TMPDIRde forma diferente para as instâncias, pois isso determina o local do cache, se definido:

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

Responder2

Esta não é realmente uma solução, mas sim minha solução alternativa para o problema!

Contexto: no macOS, executando duas instâncias latxmkao mesmo tempo, mas em pastas diferentes.

Sintoma: latexmkfalha com uma mensagem “não é possível executar binário fino

Causa: latexmkestá executando duas instâncias biber ao mesmo tempo.

Diagnóstico: biberusa seu diretório cahce para ler e armazenar dados, e essas ações não são devidamente protegidas para execuções simultâneas de biber.

Solução: certifique-se de que haja apenas uma única instância de biberexecução chamando latexmknosso próprio frontend for biber, que adquirirá um bloqueio do sistema de arquivos antes de executar o real bibere liberará esse bloqueio posteriormente.

Implementação:

  1. Copie o seguinte script bash para algum diretório de sua escolha e nomeie-o biber(por exemplo, $HOME/bin/biber). Lembre-se de personalizar a BIBERvariável no script.
#!/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. Execute quantas instâncias latexmkdesejar com o seguinte comando. Observe que $HOME/bindeve ser substituído pelo nome do diretório onde você salvou o script bash.
PATH=$HOME/bin:$PATH latexmk <your_flags> <your_latrex_file>

informação relacionada