interruptor tl

interruptor tl

Estoy usando Lubuntu 11.10. Tengo TeXlive 2011 completamente instalado.

Acabo de instalar install-tlel script en ejecución TeXlive 2013. Todo estuvo bien. Elijo el esquema pequeño. Ningún problema.

Así que segúnla guíadeberíamos hacer esto:

Una vez finalizada la instalación, debes agregar el directorio de archivos binarios de TeX Live a tu RUTA, excepto en Windows, donde el instalador se encarga de esto. Por ejemplo:

PATH=/usr/local/texlive/2013/bin/i386-linux:$PATH

Utilice la sintaxis de su shell, su directorio de instalación y el nombre de su plataforma binaria en lugar de i386-linux.

No hay problema hasta aquí. Cambié mi $PATHy al ejecutar pdflatex --versionen la terminal me salió

pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea versión 6.1.1

Pero me gustaría saber cómo atender la última sugerencia:

Si tiene varias instalaciones de TeX en una máquina determinada, debe cambiar la ruta de búsqueda para alternar entre ellas.

¿Como hacer eso?

Respuesta1

Supongamos que tiene tres instalaciones de TeX en su máquina, digamos Vanilla TeX Live 2014 y 2015, junto con TeX Live proporcionado por Ubuntu/Debian. Los binarios para las tres distribuciones vivirán en

/usr/local/texlive/2014/bin/<arch>
/usr/local/texlive/2015/bin/<arch>
/usr/bin

dónde <arch>podría estar i386-linuxu x86_64-linuxotra cadena relativa a la arquitectura de hardware de su máquina.

Si configura su PATHvariable con

export PATH=/usr/local/texlive/2015/bin/i386-linux:$PATH

en su .profilearchivo o con el método de agregar un archivo /etc/profile.d(que recomiendo), luego llamando

pdftex --version

desde un caparazón se mostrará

pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015)
kpathsea version 6.2.1
[...]

y estás seguro de que cualquier programa TeX utilizará el árbol ubicado en

/usr/local/texlive/2015

Esto se debe a cómo kpathseafunciona la biblioteca, a la que están vinculados todos los programas TeX Live: establece una cantidad de variables de entorno de ejecución basadas en el directorio donde se encuentra el binario llamado.

Puede intentar ver esto realizando las siguientes llamadas distintas desde el shell (nuevamente, use la cadena <arch>correspondiente a la arquitectura de su máquina)

kpsewhich plain.tex
/usr/local/texlive/2014/bin/x86_64-linux/kpsewhich plain.tex
/usr/bin/kpsewhich plain.tex

y recibirás tres respuestas diferentes:

/usr/local/texlive/2015/texmf-dist/tex/plain/base/plain.tex
/usr/local/texlive/2014/texmf-dist/tex/plain/base/plain.tex
/usr/share/texlive/texmf-dist/tex/plain/base/plain.tex

El programa kpsewhiches la interfaz pública de la kpathseabiblioteca.

Puede tener grandes problemas si PATHno está configurado de tal manera que las aplicaciones GUI vean el directorio binario Vanilla TeX Live.antes /usr/bin. En mis máquinas virtuales de prueba coloco un archivo llamado texlive.shque /etc/profile.dcontiene

export PATH=/opt/texbin:${PATH}

y hago un enlace simbólico /opt/texbinque apunta al TeX Live más reciente que tengo en la máquina, haciendo

sudo rm /opt/texbin
sudo ln -s /usr/local/texlive/2015/bin/x86_64-linux /opt/texbin

De esta manera echo $PATHse mostrará algo como

/opt/texbin:...:/usr/bin:...

siempre que ningún archivo posterior /etc/profile.dagregue algo delante de PATH. Lo importante es que /opt/texbinsea antes /usr/bin.

En una nueva versión de TeX Live sólo tienes que restablecer el enlace simbólico y no hacer nada más: los programas GUI y el shell encontrarán los binarios correctos. Pero, como se vio arriba, aún puedes ejecutar los programas en otras distribuciones de TeX.

Recuerde: cuando instala un TeX Live básico,nuncaestablezca la opción "Crear enlace simbólico en directorios del sistema" en "Sí". Asegúrese de que esté configurado en "No", particularmente en sistemas GNU/Linux, donde una distribución proporcionada por TeX Live tomaría el control en caso de actualizaciones.

Respuesta2

Agradezco la respuesta de @egreg y basé mi propia solución en ella, ya que escribí un libro que usa TL 2017 pero quería hacer mantenimiento de paquetes usando TL 2019.

Sin embargo, dado que los sistemas basados ​​en Debian no funcionarán bien con esta solución debido a cómo se compilan sudo, creé una solución y un script BASH en:https://github.com/ServusCarolus/tl-switch

Más abajo se encuentra el archivo README.md del repositorio a partir de esta publicación. Aquí está el TL;DR:

  1. Descargué el instalador de red para TexLive 2019 y lo instalé como root con el valor predeterminado:/usr/local/texlive/2019

  2. Hice esto para root y para mi cuenta de usuario normal:

    sudo mkdir -p /opt/tex/root
    sudo mkdir /opt/tex/charles
    sudo chown charles:charles /opt/tex/charles
    
  3. Modifiqué root .bashrcy mi usuario .profileasí:

    if [ -d "/opt/tex/$USER/bin" ] ; then
        PATH="/opt/tex/$USER/bin:$PATH"
    fi
    
  4. Instalé el script como se muestra en el archivo README a continuación en mi máquina de 32 bits y en mi máquina de 64 bits. El script sabe cómo encontrar ambos tipos de directorios binarios.

Como usuario normal, puedo cambiar de distribución de TL sin convertirme en root simplemente escribiendo tl-switch yesy tl-switch no. Cuando aparecen nuevos lanzamientos, puedo cambiar tl-switch yes 2020y así sucesivamente.

De manera similar a la respuesta anterior, el script crea o destruye un enlace simbólico a las distribuciones TL básicas en el directorio de escritura del usuario en /opt/texPero realiza algunas comprobaciones de errores en el proceso y ahorra tiempo.

Me convierto en root sudo suy puedo cambiar de distribución de la misma manera, actualizar y realizar mantenimiento tlmgry hacerlo sin alterar el contexto de mi usuario normal. Además, este enfoque se adapta a tantos usuarios y distribuciones de TL como desee.

A continuación hablo de otras posibles soluciones porque diferentes personas tienen diferentes necesidades. Pero al menos este enfoque podría ayudar a evitar el recurso automático a los paquetes de distribución debido a sudoy secure_path. Gracias de nuevo a @egreg por proporcionar una buena base y marco.

interruptor tl

Cambie el contexto entre Vanilla TeXLive instalado en /usr/local/texlive y la versión de distribución de Linux de TeXLive instalada en un sistema como Debian, Ubuntu, Mint, etc.

El script y la instalación se basan en las respuestas en: Múltiples instalaciones de TeXlive

Advertencia: unas palabras sobresudo

Incluso si uno crea un script de shell para /etc/profile.dcolocar un enlace simbólico a la ruta TL estándar antes /usr/binen la ruta de búsqueda del comando, el sudocomando no seguirá el enlace de forma predeterminada.

El problema es que Debian y sus amigos construyen sudopara usar secure_path. Existen varias soluciones a este problema, según las preferencias del usuario. Ver: https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path

Al instalar Vanilla TL como root y usar este script, se debe escribir, por ejemplo, sudo supara cambiar contextos al superusuario antes de ejecutar tlmgr. Las alternativas incluyen:

  1. La ruta menos invasiva, por ejemplo:

    sudo env PATH=$PATH tlmgr -gui
    
  2. Utilice la ruta de grupo común a continuación y no utilice sudo, pero configure los directorios para que existan /usr/local/texlive/como lo haría si lo hubiera instalado a través de sudo.

  3. Redefinir sudode varias maneras, como se explica en el enlace de arriba. YMMV.

Independientemente de los problemas anteriores, el uso normal funciona como se esperaba.

Tenga cuidado al editar archivos. Por ejemplo, sudo echo "$USER"debería apuntar al usuario normal, no al root. Eso significa que uno debe evitar atajos como ~./en las rutas de archivos. Se deben utilizar rutas completas e inequívocas.

Aunque la interfaz GUI de tlmgrno creará archivos propiedad de root cuando se ejecute a través de sudo, se debe evitar el uso de muchos programas GUI integrados en el escritorio mientras se ejecuta sudo. Hacerlo puede crear archivos propiedad de root en el árbol de directorios de inicio. Eso puede impedir que los programas de usuario guarden información correctamente.

Para realizar un cambio de contexto completo, utilice suo sudo su, según la distribución.

Excursus: hacer un grupo

Otra forma de evitar problemas sudoes hacer que la instalación de TeXLive pueda ser escrita por todos los usuarios de TeX. El problema aquí es que podría sobrevenir el caos si varios usuarios interfieren con la instalación. Incluimos esto para que esté completo:

sudo addgroup texusers
sudo addgroup "$USER" texusers
sudo mkdir -p /usr/local/texlive
sudo chgrp -R texusers /usr/local/texlive
sudo chmod -R 2775 /usr/local/texlive

Tenga en cuenta que adduser y addgroup son Debianismos; Otras distribuciones (y también las basadas en Debian) tienen los comandos useraddy groupadd. Consulte las páginas de manual para esos comandos. Por lo tanto, usarías en su lugar:

sudo groupadd texusers
sudo usermod -a -G texusers "$USER"

Entonces uno puede instalar TL como parte del grupo texusers. Ver también:https://www.tecmint.com/create-a-shared-directory-in-linux/

Paso 1: Instale Vanilla TL

Para instalar Vanilla TL, consulte:https://www.tug.org/texlive/acquire.html

Nota: Nunca instale los enlaces simbólicos al instalar Vanilla TL.

Paso 2: crear directorios

Creamos rutas para que cada usuario cree enlaces de directorio:

sudo mkdir -p /opt/tex/root
sudo mkdir "/opt/tex/$USER"
sudo chown "$USER":$USER" "/opt/tex/$USER"

Repetimos las dos últimas líneas para cada usuario, probablemente sustituyendo cada nombre de usuario por $USER, por ejemplo:

sudo mkdir /opt/tex/bob
sudo chown bob:bob /opt/tex/bob

Paso 3: Modificar perfiles

Ponemos este fragmento en el de cada usuario .profiley en el de root .bashrc:

if [ -d "/opt/tex/$USER/bin" ] ; then
    PATH="/opt/tex/$USER/bin:$PATH"
fi

Otro enfoque pondría el fragmento en el de todos .bashrcy luego lo agregaría source .bashrcal de todos .profile. Eso renovaría el entorno de la ruta cada vez que uno abre una terminal. O se pueden configurar terminales para abrir un shell de inicio de sesión.

Al editar la raíz .bashrc, recuerde usar sudo suo especificar /root/.bashrccomo archivo. De lo contrario, sudo nano ~/.bashrcse refiere al .bashrcarchivo del usuario.

Paso 4: instale el script

Nos dirigimos al directorio donde descargamos o clonamos el repositorio y localizamos el tl-switchscript. Luego escribimos:

sudo cp ./tl-switch /usr/local/bin
chmod +x /usr/local/bin/tl-switch

Todos los usuarios ahora tendrán acceso para ejecutar el script.

Paso 5: reiniciar

Una vez finalizado el procedimiento de instalación, es bueno reiniciar la máquina antes de usar TeXLive para que las rutas de root y de los usuarios puedan actualizarse correctamente.

Paso 6: Cambiar hacia y desde Vanilla TeXLive

Cuando un usuario (o root) quiere habilitar el acceso a Vanilla TL 2019, solo necesita escribir:

tl-switch yes

Para especificar otra instalación en /usr/local/texlive, use, por ejemplo:

tl-switch yes 2018

Para deshabilitar Vanilla TL y usar la versión de distribución, solo es necesario escribir:

tl-switch no

Si uno cambia de contexto en medio de una sesión, las rutas de búsqueda no cambiarán. Una forma de abordar esto (de alguna manera) se menciona en el Paso 3 anterior.

Pensamientos finales

Una desventaja inmediata de este método es la necesidad de, por ejemplo, sudo sucambiar el contexto al superusuario antes de ejecutar tlmgr. Sus beneficios incluyen aislar a los usuarios entre sí y permitir cambiar contextos sin modificaciones extensas del sistema. Sin embargo, sólo se deben cambiar los contextos antes de cerrar sesión y volver a iniciarla para evitar problemas.

información relacionada