
Estoy usando Lubuntu 11.10. Tengo TeXlive 2011 completamente instalado.
Acabo de instalar install-tl
el 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 $PATH
y al ejecutar pdflatex --version
en 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-linux
u x86_64-linux
otra cadena relativa a la arquitectura de hardware de su máquina.
Si configura su PATH
variable con
export PATH=/usr/local/texlive/2015/bin/i386-linux:$PATH
en su .profile
archivo 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 kpathsea
funciona 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 kpsewhich
es la interfaz pública de la kpathsea
biblioteca.
Puede tener grandes problemas si PATH
no 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.sh
que /etc/profile.d
contiene
export PATH=/opt/texbin:${PATH}
y hago un enlace simbólico /opt/texbin
que 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 $PATH
se mostrará algo como
/opt/texbin:...:/usr/bin:...
siempre que ningún archivo posterior /etc/profile.d
agregue algo delante de PATH
. Lo importante es que /opt/texbin
sea 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:
Descargué el instalador de red para TexLive 2019 y lo instalé como root con el valor predeterminado:
/usr/local/texlive/2019
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
Modifiqué root
.bashrc
y mi usuario.profile
así:if [ -d "/opt/tex/$USER/bin" ] ; then PATH="/opt/tex/$USER/bin:$PATH" fi
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 yes
y tl-switch no
. Cuando aparecen nuevos lanzamientos, puedo cambiar tl-switch yes 2020
y 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/tex
Pero realiza algunas comprobaciones de errores en el proceso y ahorra tiempo.
Me convierto en root sudo su
y puedo cambiar de distribución de la misma manera, actualizar y realizar mantenimiento tlmgr
y 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 sudo
y 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.d
colocar un enlace simbólico a la ruta TL estándar antes /usr/bin
en la ruta de búsqueda del comando, el sudo
comando no seguirá el enlace de forma predeterminada.
El problema es que Debian y sus amigos construyen sudo
para 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 su
para cambiar contextos al superusuario antes de ejecutar tlmgr
. Las alternativas incluyen:
La ruta menos invasiva, por ejemplo:
sudo env PATH=$PATH tlmgr -gui
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 desudo
.Redefinir
sudo
de 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 tlmgr
no 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 su
o sudo su
, según la distribución.
Excursus: hacer un grupo
Otra forma de evitar problemas sudo
es 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 useradd
y 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 .profile
y 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 .bashrc
y luego lo agregaría source .bashrc
al 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 su
o especificar /root/.bashrc
como archivo. De lo contrario, sudo nano ~/.bashrc
se refiere al .bashrc
archivo del usuario.
Paso 4: instale el script
Nos dirigimos al directorio donde descargamos o clonamos el repositorio y localizamos el tl-switch
script. 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 su
cambiar 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.