Error en biber (a modo de latexmk) - texlive 2022

Error en biber (a modo de latexmk) - texlive 2022

La compilación “normal” de un archivo latex bastante complejo (plantilla de tesis), en macOS Monterey versión 12.6, funciona perfectamente en TeX Live 2021 y TeX Live 2022, con el comando latexmk -time -shell-escape -synctex=0 -emulate-aux-dir -pdf -silent template.

Para acelerar las pruebas de diferentes variantes de esta plantilla, yo...

  • haga varias copias de la fuente (cada copia en cada carpeta propia);
  • personalizar cada una de las copias según sea necesario; y
  • ejecute varias instancias de latexmk, una sobre cada copia, con el comando anterior.

Con TeX Live 2021, el script se ejecuta sin problemas.

Con TeX Live 2022, aparece este error: /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)

Intenté ejecutar dos instancias de biber (más o menos) al mismo tiempo y no hubo ningún problema. Supongo que el problema está relacionado con la combinación de latexmk + biber.

¿Alguien puede darnos alguna idea sobre el mensaje de error de este biberón?

Respuesta1

Puedes hacer esto forzando diferentes cachés para diferentes instancias de biber. Simplemente configure la variable de entorno PAR_TMPDIRde manera diferente para las instancias, ya que esto determina la ubicación del caché si está configurada:

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

Respuesta2

¡Esto no es realmente una solución, sino más bien mi solución al problema!

Contexto: en macOS, ejecutar dos instancias de latxmkal mismo tiempo, pero en carpetas diferentes.

Síntoma: latexmkfalla con un mensaje "no se puede ejecutar binario delgado"

Causa: latexmkestá ejecutando dos instancias biber al mismo tiempo.

Diagnóstico: biberutiliza su directorio cahce para leer y almacenar datos, y estas acciones no están protegidas adecuadamente para ejecuciones simultáneas de biber.

Solución: asegúrese de que solo haya una instancia de biberejecución llamando latexmka nuestra propia interfaz biber, que adquirirá un bloqueo del sistema de archivos antes de ejecutar el real bibery liberará este bloqueo después.

Implementación:

  1. Copie el siguiente script bash en algún directorio de su elección y asígnele un nombre biber(por ejemplo, $HOME/bin/biber). Recuerde personalizar la BIBERvariable en el 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. Ejecute tantas instancias latexmkcomo desee con el siguiente comando. Tenga en cuenta que $HOME/bindebe reemplazarse por el nombre del directorio donde guardó el script bash.
PATH=$HOME/bin:$PATH latexmk <your_flags> <your_latrex_file>

información relacionada