%20-%20texlive%202022.png)
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_TMPDIR
de 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 latxmk
ao mesmo tempo, mas em pastas diferentes.
Sintoma: latexmk
falha com uma mensagem “não é possível executar binário fino”
Causa: latexmk
está executando duas instâncias biber
ao mesmo tempo.
Diagnóstico: biber
usa 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 biber
execução chamando latexmk
nosso próprio frontend for biber
, que adquirirá um bloqueio do sistema de arquivos antes de executar o real biber
e liberará esse bloqueio posteriormente.
Implementação:
- 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 aBIBER
variá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
- Execute quantas instâncias
latexmk
desejar com o seguinte comando. Observe que$HOME/bin
deve ser substituído pelo nome do diretório onde você salvou o script bash.
PATH=$HOME/bin:$PATH latexmk <your_flags> <your_latrex_file>