tlスイッチ

tlスイッチ

私は Lubuntu 11.10 を使用しています。TeXlive 2011 を完全にインストールしています。

TeXlive 2013 実行スクリプトをインストールしましたinstall-tl。すべて順調でした。小さいスキームを選択しました。問題なし。

つまり、ガイド私たちはこうすべきです:

インストールが完了したら、TeX Live バイナリのディレクトリを PATH に追加する必要があります。ただし、Windows の場合はインストーラがこれを処理します。例:

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

i386-linux の代わりに、シェル、インストール ディレクトリ、バイナリ プラットフォーム名の構文を使用します。

ここまでは問題ありませんでした。ターミナルで$PATH実行したときに変更したところ、pdflatex --version

pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea バージョン 6.1.1

しかし、最後の提案をどのように処理するかを知りたいです:

特定のマシンに複数の TeX がインストールされている場合は、それらを切り替えるために検索パスを変更する必要があります。

どうやってするか?

答え1

マシンに3つのTeXがインストールされているとします。たとえば、Vanilla TeX Live 2014と2015、Ubuntu/Debianが提供するTeX Liveです。3つのディストリビューションのバイナリは次の場所にあります。

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

ここで、 は、またはマシンのハードウェア アーキテクチャに関連する別の文字列で<arch>ある可能性があります。i386-linuxx86_64-linux

PATH変数を次のように設定すると

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

ファイルに.profileファイルを追加する方法/etc/profile.d(私が推奨する方法)で、次に

pdftex --version

シェルから表示される

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

そして、どのTeXプログラムも、以下の場所にあるツリーを使用するはずです。

/usr/local/texlive/2015

これは、すべての TeX Live プログラムがリンクされているライブラリの動作によるものですkpathsea。ライブラリは、呼び出されたバイナリが存在するディレクトリに基づいて、いくつかのランタイム環境変数を設定します。

シェルから次の個別の呼び出しを実行してこれを確認してみてください(ここでも、<arch>マシンのアーキテクチャに対応する文字列を使用してください)。

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

すると、3 つの異なる回答が返されます。

/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

このプログラムはライブラリkpsewhichへのパブリック インターフェースですkpathsea

PATHGUIアプリケーションがVanilla TeX Liveバイナリディレクトリを参照するように設定されていない場合、大きな問題が発生する可能性があります。前に /usr/bin私のテスト仮想マシンでtexlive.sh/etc/profile.d

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

/opt/texbinそして、マシン上にある最新のTeX Liveを指すシンボリックリンクを作成します。

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

この方法ではecho $PATH次のようなものが表示されます

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

以降のファイルでは、/etc/profile.dの前に何かが追加されませんPATH。重要なのは、 が/opt/texbinの前にあることです/usr/bin

TeX Live の新しいリリースでは、シンボリック リンクをリセットするだけで、他に何もする必要はありません。GUI プログラムとシェルは正しいバイナリを見つけます。ただし、上記のように、他の TeX ディストリビューションでもプログラムを実行できます。

覚えておいてください: バニラTeX Liveをインストールすると、一度もない「システム ディレクトリにシンボリック リンクを作成する」オプションを「はい」に設定します。特に GNU/Linux システムでは、アップグレードの際に TeX Live ディストリビューションが引き継ぐため、このオプションは必ず「いいえ」に設定してください。

答え2

私は @egreg の回答に感謝し、それを基に独自のソリューションを作成しました。TL 2017 を使用する本を執筆しましたが、パッケージのメンテナンスは TL 2019 を使用して行いたかったからです。

ただし、Debian ベースのシステムではコンパイル方法の都合上、このソリューションはうまく動作しないためsudo、次の場所にソリューションと BASH スクリプトを作成しました。https://github.com/ServusCarolus/tl-switch

さらに下には、この投稿時点でのリポジトリの README.md ファイルがあります。要約は次のとおりです。

  1. TexLive 2019 のネットインストーラーをダウンロードし、デフォルトで root としてインストールしました。/usr/local/texlive/2019

  2. 私はルートと通常のユーザー アカウントに対してこれを実行しました:

    sudo mkdir -p /opt/tex/root
    sudo mkdir /opt/tex/charles
    sudo chown charles:charles /opt/tex/charles
    
  3. 私はルート.bashrcとユーザーを.profile次のように変更しました:

    if [ -d "/opt/tex/$USER/bin" ] ; then
        PATH="/opt/tex/$USER/bin:$PATH"
    fi
    
  4. 私は、以下の README に示されているスクリプトを 32 ビット マシンと 64 ビット マシンにインストールしました。スクリプトは、両方のバイナリ ディレクトリ タイプを検索する方法を知っています。

通常のユーザーであれば、 と を入力するだけで、ルートにならずに TL ディストリビューションを切り替えることができますtl-switch yestl-switch no新しいリリースが登場したら、tl-switch yes 2020などを使用して切り替えることができます。

上記の回答と同様に、スクリプトは、ユーザーの書き込み可能なディレクトリにある標準の TL ディストリビューションへのシンボリック リンクを作成するか、破棄します。/opt/texただし、プロセス中にエラー チェックが実行され、時間が節約されます。

経由でルートになりsudo su、同じ方法でディストリビューションを切り替え、更新やメンテナンスを行うtlmgrことができます。その際、通常のユーザーのコンテキストを変更する必要はありません。さらに、このアプローチは、必要な数のユーザーと TL ディストリビューションに拡張できます。

以下では、人によってニーズが異なるため、他の可能な解決策について説明します。ただし、少なくともこのアプローチは、およびによるディストリビューション パッケージへの自動フォールバックを回避するのに役立つ可能性がありますsudosecure_path優れた基礎とフレームワークを提供してくれた @egreg に改めて感謝します。

tlスイッチ

/usr/local/texlive にインストールされた標準の TeXLive と、Debian、Ubuntu、Mint などのシステムにインストールされた TeXLive の Linux ディストリビューション バージョンの間でコンテキストを切り替えます。

スクリプトとインストールは、次の回答に基づいています。 複数のTeXliveインストール

注意: 一言sudo

コマンド検索パスの/etc/profile.d前に標準の TL パスへのシンボリック リンクを配置するシェル スクリプトを作成した場合でも、コマンドはデフォルトではリンクをたどりません。/usr/binsudo

問題は、Debian とその仲間がsudoを使用するようにビルドされていることですsecure_path。この問題には、ユーザーの好みに応じてさまざまな回避策があります。参照: https://stackoverflow.com/questions/257616/sudo がパスを変更する理由

標準の TL を root としてインストールし、このスクリプトを使用する場合は、sudo suを実行する前に、たとえば と入力してコンテキストをスーパーユーザーに切り替える必要がありますtlmgr。代替案としては、次のものがあります。

  1. 最も侵襲性の低いルート、例:

    sudo env PATH=$PATH tlmgr -gui
    
  2. 以下の共通グループ ルートを使用し、 を使用せずに、経由でインストールした場合と同じように、sudoディレクトリが の下に存在するように設定します。/usr/local/texlive/sudo

  3. sudo上記のリンクで説明されているように、さまざまな方法で再定義します。状況によって異なります。

上記の問題に関係なく、通常の使用では期待どおりに機能します。

ファイルを編集するときは注意してください。たとえば、 はsudo echo "$USER"root ではなく通常のユーザーを指す必要があります。つまり、~./ファイル パスのようなショートカットは避ける必要があります。明確なフル パスを使用する必要があります。

の GUI インターフェイスは、tlmgr経由で実行されたときに root 所有のファイルを作成しませんがsudo、 の実行中は多くのデスクトップ統合 GUI プログラムの使用は避けるべきですsudo。そうすると、ホーム ディレクトリ ツリーに root 所有のファイルが作成される可能性があります。これにより、ユーザー プログラムが情報を適切に保存できなくなる可能性があります。

完全なコンテキスト スイッチを実行するには、ディストリビューションに応じて、suまたはのいずれかを実行します。sudo su

余談: グループを作る

問題を回避するもう 1 つの方法sudoは、TeXLive のインストールをすべての TeX ユーザーが書き込み可能にすることです。ここでの問題は、複数のユーザーがインストールに干渉すると混乱が生じる可能性があることです。完全性のために、次の内容を含めます。

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

adduser と addgroup は Debian 特有のコマンドであることに注意してください。他のディストリビューション (Debian ベースのものも含む) には、 と のコマンドがありますuseraddgroupaddこれらのコマンドについては、man ページを参照してください。したがって、代わりに以下を使用します。

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

次に、TL を texusers グループの一部としてインストールできます。以下も参照してください。https://www.tecmint.com/create-a-shared-directory-in-linux/

ステップ1: Vanilla TLをインストールする

バニラ TL のインストールについては、以下を参照してください。https://www.tug.org/texlive/acquire.html

注意: バニラ TL をインストールするときは、シンボリック リンクをインストールしないでください。

ステップ2: ディレクトリを作成する

ディレクトリ リンクを作成するために、各ユーザーのパスを作成します。

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

各ユーザーに対して最後の 2 行を繰り返します。おそらく各ユーザー名を $USER に置き換えます。例:

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

ステップ3: プロファイルの変更

このスニペットを各ユーザー.profileとルートに配置します.bashrc:

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

別の方法としては、スニペットを全員の に配置し.bashrc、それをsource .bashrc全員の に追加します.profile。これにより、ターミナルを開くたびにパス環境が更新されます。または、ターミナルを設定してログイン シェルを開くこともできます。

ルートの を編集するときは.bashrc、 を使用するsudo suか、 を/root/.bashrcファイルとして指定することを忘れないでください。それ以外の場合は、代わりにsudo nano ~/.bashrcユーザーの.bashrcファイルを参照します。

ステップ4: スクリプトをインストールする

リポジトリをダウンロードまたはクローンしたディレクトリに移動し、tl-switchスクリプトを見つけます。次に、次のように入力します。

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

これで、すべてのユーザーがスクリプトを実行できるようになります。

ステップ5: 再起動

インストール手順が完了したら、TeXLive を使用する前にマシンを再起動して、ルートとユーザーのパスが適切に更新されるようにすることをお勧めします。

ステップ6: Vanilla TeXLiveへの切り替え

ユーザー (または root) が vanilla TL 2019 へのアクセスを有効にしたい場合は、次のように入力するだけです。

tl-switch yes

の下に別のインストールを指定するには/usr/local/texlive、例えば次のようにします。

tl-switch yes 2018

バニラ TL を無効にしてディストリビューション バージョンを使用するには、次のように入力するだけです。

tl-switch no

セッションの途中でコンテキストを変更しても、検索パスは変更されません。これを(ある程度)解決する方法の 1 つは、上記の手順 3 で説明されています。

最終的な考え

sudo suこの方法の直接的な欠点は、たとえば、を実行する前にコンテキストをスーパーユーザーに切り替える必要があることですtlmgr。この方法の利点は、ユーザー同士を分離し、システムを大幅に変更せずにコンテキストを変更できることです。ただし、問題を回避するために、コンテキストはログアウトして再度ログインする前にのみ変更する必要があります。

関連情報