%20-%20texlive%202022.png)
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_TMPDIR
de 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 latxmk
al mismo tiempo, pero en carpetas diferentes.
Síntoma: latexmk
falla con un mensaje "no se puede ejecutar binario delgado"
Causa: latexmk
está ejecutando dos instancias biber
al mismo tiempo.
Diagnóstico: biber
utiliza 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 biber
ejecución llamando latexmk
a nuestra propia interfaz biber
, que adquirirá un bloqueo del sistema de archivos antes de ejecutar el real biber
y liberará este bloqueo después.
Implementación:
- 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 laBIBER
variable 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
- Ejecute tantas instancias
latexmk
como desee con el siguiente comando. Tenga en cuenta que$HOME/bin
debe reemplazarse por el nombre del directorio donde guardó el script bash.
PATH=$HOME/bin:$PATH latexmk <your_flags> <your_latrex_file>