
私は 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-linux
x86_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
。
PATH
GUIアプリケーションが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 ファイルがあります。要約は次のとおりです。
TexLive 2019 のネットインストーラーをダウンロードし、デフォルトで root としてインストールしました。
/usr/local/texlive/2019
私はルートと通常のユーザー アカウントに対してこれを実行しました:
sudo mkdir -p /opt/tex/root sudo mkdir /opt/tex/charles sudo chown charles:charles /opt/tex/charles
私はルート
.bashrc
とユーザーを.profile
次のように変更しました:if [ -d "/opt/tex/$USER/bin" ] ; then PATH="/opt/tex/$USER/bin:$PATH" fi
私は、以下の README に示されているスクリプトを 32 ビット マシンと 64 ビット マシンにインストールしました。スクリプトは、両方のバイナリ ディレクトリ タイプを検索する方法を知っています。
通常のユーザーであれば、 と を入力するだけで、ルートにならずに TL ディストリビューションを切り替えることができますtl-switch yes
。tl-switch no
新しいリリースが登場したら、tl-switch yes 2020
などを使用して切り替えることができます。
上記の回答と同様に、スクリプトは、ユーザーの書き込み可能なディレクトリにある標準の TL ディストリビューションへのシンボリック リンクを作成するか、破棄します。/opt/tex
ただし、プロセス中にエラー チェックが実行され、時間が節約されます。
経由でルートになりsudo su
、同じ方法でディストリビューションを切り替え、更新やメンテナンスを行うtlmgr
ことができます。その際、通常のユーザーのコンテキストを変更する必要はありません。さらに、このアプローチは、必要な数のユーザーと TL ディストリビューションに拡張できます。
以下では、人によってニーズが異なるため、他の可能な解決策について説明します。ただし、少なくともこのアプローチは、およびによるディストリビューション パッケージへの自動フォールバックを回避するのに役立つ可能性がありますsudo
。secure_path
優れた基礎とフレームワークを提供してくれた @egreg に改めて感謝します。
tlスイッチ
/usr/local/texlive にインストールされた標準の TeXLive と、Debian、Ubuntu、Mint などのシステムにインストールされた TeXLive の Linux ディストリビューション バージョンの間でコンテキストを切り替えます。
スクリプトとインストールは、次の回答に基づいています。 複数のTeXliveインストール
注意: 一言sudo
コマンド検索パスの/etc/profile.d
前に標準の TL パスへのシンボリック リンクを配置するシェル スクリプトを作成した場合でも、コマンドはデフォルトではリンクをたどりません。/usr/bin
sudo
問題は、Debian とその仲間がsudo
を使用するようにビルドされていることですsecure_path
。この問題には、ユーザーの好みに応じてさまざまな回避策があります。参照:
https://stackoverflow.com/questions/257616/sudo がパスを変更する理由
標準の TL を root としてインストールし、このスクリプトを使用する場合は、sudo su
を実行する前に、たとえば と入力してコンテキストをスーパーユーザーに切り替える必要がありますtlmgr
。代替案としては、次のものがあります。
最も侵襲性の低いルート、例:
sudo env PATH=$PATH tlmgr -gui
以下の共通グループ ルートを使用し、 を使用せずに、経由でインストールした場合と同じように、
sudo
ディレクトリが の下に存在するように設定します。/usr/local/texlive/
sudo
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 ベースのものも含む) には、 と のコマンドがありますuseradd
。groupadd
これらのコマンドについては、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
。この方法の利点は、ユーザー同士を分離し、システムを大幅に変更せずにコンテキストを変更できることです。ただし、問題を回避するために、コンテキストはログアウトして再度ログインする前にのみ変更する必要があります。