TL-Schalter

TL-Schalter

Ich verwende Lubuntu 11.10. TeXlive 2011 ist bei mir vollständig installiert.

Ich habe gerade das Skript TeXlive 2013 installiert install-tl. Alles war in Ordnung. Ich habe das kleine Schema gewählt. Kein Problem.

Also lautder Führerwir sollten dies tun:

Nach Abschluss der Installation müssen Sie das Verzeichnis mit den TeX Live-Binärdateien zu Ihrem PATH hinzufügen – außer unter Windows, wo das Installationsprogramm dies übernimmt. Beispiel:

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

Verwenden Sie die Syntax für Ihre Shell, Ihr Installationsverzeichnis und Ihren binären Plattformnamen anstelle von i386-linux.

Bis hierhin kein Problem. Ich habe meine geändert $PATHund bei der Ausführung pdflatex --versionauf dem Terminal bekam ich

pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea Version 6.1.1

Ich würde aber gerne wissen, wie ich mit dem letzten Vorschlag umgehen soll:

Wenn Sie auf einem Computer mehrere TeX-Installationen haben, müssen Sie den Suchpfad ändern, um zwischen ihnen zu wechseln.

Wie geht das?

Antwort1

Angenommen, Sie haben drei TeX-Installationen auf Ihrem Rechner, beispielsweise Vanilla TeX Live 2014 und 2015, zusammen mit dem TeX Live von Ubuntu/Debian. Die Binärdateien für die drei Distributionen befinden sich in

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

wobei dies <arch>sein könnte i386-linux, x86_64-linuxoder eine andere Zeichenfolge relativ zur Hardwarearchitektur Ihres Computers.

Wenn Sie Ihre PATHVariable mit

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

in Ihrer .profileDatei oder mit der Methode zum Hinzufügen einer Datei /etc/profile.d(was ich empfehle) und anschließendem Aufrufen

pdftex --version

aus einer Schale wird zeigen

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

und Sie sind sicher, dass jedes TeX-Programm den Baum verwendet, der sich in befindet

/usr/local/texlive/2015

Dies liegt an der Funktionsweise der kpathseaBibliothek, mit der alle TeX Live-Programme verknüpft sind: Sie legt eine Reihe von Laufzeitumgebungsvariablen basierend auf dem Verzeichnis fest, in dem sich die aufgerufene Binärdatei befindet.

Sie können dies versuchen, indem Sie die folgenden unterschiedlichen Aufrufe von der Shell aus durchführen (verwenden Sie auch hier die Zeichenfolge, die der <arch>Architektur Ihres Computers entspricht).

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

und Sie erhalten drei verschiedene Antworten:

/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

Das Programm kpsewhichist die öffentliche Schnittstelle zur kpathseaBibliothek.

Sie könnten große Probleme bekommen, wenn Ihr System PATHnicht so eingestellt ist, dass die GUI-Anwendungen das Vanilla TeX Live-Binärverzeichnis sehen.Vor /usr/bin. In meinen virtuellen Testmaschinen platziere ich eine Datei namens texlive.shin, /etc/profile.ddie

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

und ich erstelle einen symbolischen Link /opt/texbinauf die neueste Version von TeX Live, die ich auf meinem Rechner installiert habe. Dazu mache ich

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

Auf diese Weise echo $PATHwird etwas wie

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

vorausgesetzt, dass keine spätere Datei in /etc/profile.detwas vor einfügt PATH. Wichtig ist, dass /opt/texbinvor steht /usr/bin.

Bei einer neuen Version von TeX Live müssen Sie nur den symbolischen Link zurücksetzen und sonst nichts tun: Die GUI-Programme und die Shell finden die richtigen Binärdateien. Aber wie oben gezeigt, können Sie die Programme immer noch in anderen TeX-Distributionen ausführen.

Denken Sie daran: Wenn Sie ein Vanilla TeX Live installieren,niemalsStellen Sie die Option „Symlink in Systemverzeichnissen erstellen“ auf „Ja“. Achten Sie darauf, dass sie auf „Nein“ eingestellt ist, insbesondere auf GNU/Linux-Systemen, wo bei Upgrades eine von der Distribution bereitgestellte TeX Live übernehmen würde.

Antwort2

Ich schätze die Antwort von @egreg und habe meine eigene Lösung darauf aufgebaut, da ich ein Buch geschrieben habe, das TL 2017 verwendet, aber die Paketwartung mit TL 2019 durchführen wollte.

Da diese Lösung jedoch auf Debian-basierten Systemen aufgrund der Kompilierung nicht gut funktioniert sudo, habe ich eine Lösung und ein BASH-Skript unter folgender Adresse erstellt:https://github.com/ServusCarolus/tl-switch

Weiter unten finden Sie die README.md-Datei aus dem Repo zum Zeitpunkt dieses Beitrags. Hier ist die Kurzfassung:

  1. Ich habe das Net-Installationsprogramm für TexLive 2019 heruntergeladen und es als Root unter der Standardeinstellung installiert:/usr/local/texlive/2019

  2. Ich habe dies für Root und für mein normales Benutzerkonto getan:

    sudo mkdir -p /opt/tex/root
    sudo mkdir /opt/tex/charles
    sudo chown charles:charles /opt/tex/charles
    
  3. Ich habe Root .bashrcund meinen Benutzer .profilefolgendermaßen modifiziert:

    if [ -d "/opt/tex/$USER/bin" ] ; then
        PATH="/opt/tex/$USER/bin:$PATH"
    fi
    
  4. Ich habe das Skript wie in der README-Datei unten gezeigt auf meinem 32-Bit-Computer und meinem 64-Bit-Computer installiert. Das Skript kann beide binären Verzeichnistypen finden.

Als normaler Benutzer kann ich die TL-Distribution wechseln, ohne Rootberechtigung zu haben, indem ich einfach tl-switch yesund eingebe tl-switch no. Wenn neue Versionen erscheinen, kann ich über wechseln tl-switch yes 2020und so weiter.

Ähnlich wie die Antwort oben erstellt oder zerstört das Skript einen symbolischen Link zu den Vanilla-TL-Distributionen im beschreibbaren Verzeichnis des Benutzers unter. /opt/texDabei führt es jedoch einige Fehlerprüfungen durch und spart Zeit.

Ich werde Root sudo suund kann auf die gleiche Weise zwischen Distributionen wechseln, Updates und Wartungsarbeiten durchführen tlmgr, ohne dabei den Kontext meines normalen Benutzers zu ändern. Darüber hinaus lässt sich dieser Ansatz auf so viele Benutzer und TL-Distributionen skalieren, wie ich möchte.

Im Folgenden spreche ich über andere mögliche Lösungen, da unterschiedliche Personen unterschiedliche Anforderungen haben. Aber zumindest könnte dieser Ansatz helfen, den automatischen Fallback auf die Distributionspakete aufgrund von sudound zu vermeiden secure_path. Nochmals vielen Dank an @egreg für die Bereitstellung einer guten Grundlage und eines guten Rahmens.

TL-Schalter

Wechseln Sie den Kontext zwischen dem unter /usr/local/texlive installierten Standard-TeXLive und der Linux-Distro-Version von TeXLive, die auf einem System wie Debian, Ubuntu, Mint usw. installiert ist.

Das Skript und die Installation basieren auf den Antworten unter: Mehrere TeXlive-Installationen

Vorbehalt: Ein Wort zusudo

Selbst wenn man ein Shell-Skript erstellt, um vor dem Befehlssuchpfad /etc/profile.deinen symbolischen Link zum Vanilla-TL-Pfad einzufügen , folgt der Befehl dem Link standardmäßig nicht./usr/binsudo

Das Problem besteht darin, dass Debian und seine Kollegen so gebaut werden, sudodass sie verwenden secure_path. Es gibt verschiedene Workarounds für dieses Problem, je nach den Vorlieben des Benutzers. Siehe: https://stackoverflow.com/questions/257616/warum-ändert-sudo-den-pfad

Wenn Sie Vanilla TL als Root installieren und dieses Skript verwenden, müssen Sie sudo suvor dem Ausführen beispielsweise eingeben, um den Kontext zum Superuser zu wechseln tlmgr. Alternativen sind:

  1. Der am wenigsten invasive Weg, zB:

    sudo env PATH=$PATH tlmgr -gui
    
  2. Benutzen Sie die unten stehende allgemeine Gruppenroute und verwenden Sie nicht sudo, sondern legen Sie die Verzeichnisse so fest, dass sie unter vorhanden sind /usr/local/texlive/, als hätten Sie die Installation über durchgeführt sudo.

  3. Definieren Sie es sudoauf verschiedene Weise neu, wie im obigen Link beschrieben. Ihre Abweichung kann abweichen.

Ungeachtet der oben genannten Probleme funktioniert der normale Gebrauch wie erwartet.

Gehen Sie beim Bearbeiten von Dateien vorsichtig vor. Beispielsweise sudo echo "$USER"sollte auf den normalen Benutzer verweisen, nicht auf root. Das heißt, Sie sollten Abkürzungen wie ~./in Dateipfaden vermeiden. Sie sollten eindeutige, vollständige Pfade verwenden.

Obwohl die GUI-Schnittstelle von tlmgrkeine Dateien erstellt, die root gehören, wenn sie über ausgeführt wird sudo, sollte man die Verwendung vieler in den Desktop integrierter GUI-Programme vermeiden, während ausgeführt wird sudo. Dadurch können Dateien erstellt werden, die root gehören, und zwar im Home-Verzeichnisbaum. Dies kann dazu führen, dass Benutzerprogramme Informationen nicht richtig speichern.

Um einen vollständigen Kontextwechsel durchzuführen, führen Sie je nach Verteilung entweder suoder aus.sudo su

Exkurs: Eine Gruppe bilden

Eine weitere Möglichkeit, Probleme zu vermeiden, sudobesteht darin, die TeXLive-Installation für alle TeX-Benutzer beschreibbar zu machen. Das Problem dabei ist, dass Chaos entstehen kann, wenn sich mehrere Benutzer in die Installation einmischen. Der Vollständigkeit halber führen wir Folgendes auf:

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

Beachten Sie, dass adduser und addgroup Debian-ismen sind; andere Distributionen (auch solche auf Debian-Basis) haben die Befehle useraddund groupadd. Informationen zu diesen Befehlen finden Sie in den Manpages. Daher würden Sie stattdessen Folgendes verwenden:

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

Dann kann man TL als Teil der Texusers-Gruppe installieren. Siehe auch:https://www.tecmint.com/create-a-shared-directory-in-linux/

Schritt 1: Vanilla TL installieren

Informationen zur Installation von Vanilla TL finden Sie unter:https://www.tug.org/texlive/acquire.html

Hinweis: Installieren Sie bei der Installation von Vanilla TL niemals die symbolischen Links.

Schritt 2: Verzeichnisse erstellen

Wir erstellen für jeden Benutzer Pfade zum Erstellen von Verzeichnislinks:

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

Wir wiederholen die letzten beiden Zeilen für jeden Benutzer und ersetzen höchstwahrscheinlich jeden Benutzernamen durch $USER, zB:

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

Schritt 3: Profile ändern

Wir fügen diesen Code-Schnipsel in die Verzeichnisse aller Benutzer .profileund Root-Benutzer ein .bashrc:

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

Ein anderer Ansatz würde das Snippet in jedermanns packen und dann zu jedermanns .bashrchinzufügen . Dadurch würde die Pfadumgebung jedes Mal erneuert, wenn ein Terminal geöffnet wird. Oder man kann Terminals so einstellen, dass eine Login-Shell geöffnet wird.source .bashrc.profile

Denken Sie beim Bearbeiten des Stammverzeichnisses daran, als Datei .bashrczu verwenden sudo suoder anzugeben . Andernfalls wird stattdessen die Datei des Benutzers verwendet ./root/.bashrcsudo nano ~/.bashrc.bashrc

Schritt 4: Installieren Sie das Skript

Wir gehen in das Verzeichnis, in das wir das Repository heruntergeladen oder geklont haben, und suchen das tl-switchSkript. Dann geben wir ein:

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

Alle Benutzer haben jetzt Zugriff auf die Ausführung des Skripts.

Schritt 5: Neustart

Nach Abschluss des Installationsvorgangs empfiehlt es sich, den Computer vor der Verwendung von TeXLive neu zu starten, damit die Pfade für Root und Benutzer ordnungsgemäß aktualisiert werden können.

Schritt 6: Umschalten von und zu Vanilla TeXLive

Wenn ein Benutzer (oder Root) den Zugriff auf Vanilla TL 2019 aktivieren möchte, muss er nur Folgendes eingeben:

tl-switch yes

Um eine andere Installation unter anzugeben /usr/local/texlive, verwenden Sie beispielsweise:

tl-switch yes 2018

Um Vanilla TL zu deaktivieren und die Distro-Version zu verwenden, müssen Sie nur Folgendes eingeben:

tl-switch no

Wenn man mitten in einer Sitzung den Kontext ändert, ändern sich die Suchpfade nicht. Eine Möglichkeit, dies (einigermaßen) zu umgehen, wird oben in Schritt 3 erwähnt.

Abschließende Gedanken

Ein unmittelbarer Nachteil dieser Methode ist, dass man beispielsweise sudo suvor dem Ausführen den Kontext zum Superuser wechseln muss tlmgr. Zu den Vorteilen gehört, dass Benutzer voneinander isoliert werden und Kontexte ohne umfangreiche Systemänderungen geändert werden können. Um Probleme zu vermeiden, sollten Kontexte jedoch nur vor dem Ab- und erneuten Anmelden geändert werden.

verwandte Informationen