
我正在使用 Lubuntu 11.10。我已經完整安裝了 TeXlive 2011。
我剛剛安裝了 TeXlive 2013 運行install-tl
腳本。一切都很好。我選擇小方案。沒問題。
所以根據導遊我們應該這樣做:
安裝完成後,您必須將 TeX Live 二進位檔案的目錄新增至您的 PATH 中 — Windows 上除外,在 Windows 上,安裝程式會負責此操作。例如:
PATH=/usr/local/texlive/2013/bin/i386-linux:$PATH
使用 shell、安裝目錄和二進位平台名稱的語法,而不是 i386-linux。
到這裡為止都沒問題。我改變了我的,在終端上$PATH
執行時我得到了pdflatex --version
pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea 版本 6.1.1
但我想知道如何處理最後一個建議:
如果您在給定電腦上安裝了多個 TeX,則需要更改搜尋路徑以在它們之間切換。
怎麼做?
答案1
假設您的電腦上安裝了三個 TeX,例如 vanilla TeX Live 2014 和 2015,以及 Ubuntu/Debian 提供的 TeX Live。三個發行版的二進位檔案將位於
/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
從 shell 將顯示
pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015)
kpathsea version 6.2.1
[...]
並且您確信任何 TeX 程式都會使用位於
/usr/local/texlive/2015
這是因為kpathsea
所有 TeX Live 程式都連結到的程式庫的工作方式:它根據被呼叫的二進位檔案所在的目錄設定許多運行時環境變數。
<arch>
您可以嘗試透過從 shell 執行以下不同的呼叫來查看這一點(同樣,使用與您的電腦體系結構相對應的字串)
kpsewhich plain.tex
/usr/local/texlive/2014/bin/x86_64-linux/kpsewhich plain.tex
/usr/bin/kpsewhich plain.tex
你會收到三個不同的答案:
/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
in 的文件/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 程式和 shell 將找到正確的二進位檔案。但是,如上所示,您仍然可以在其他 TeX 發行版中執行程式。
請記住:當您安裝普通 TeX Live 時,絕不將選項「在系統目錄中建立符號連結」設定為「是」。確保將其設為“否”,特別是在 GNU/Linux 系統上,在升級時,提供 TeX Live 的發行版將接管。
答案2
我很欣賞@egreg的回答,並基於它建立了我自己的解決方案,因為我寫了一本使用 TL 2017 的書,但我想使用 TL 2019 進行包裝維護。
然而,由於基於 Debian 的系統由於其編譯方式而無法很好地使用此解決方案sudo
,因此我在以下位置創建了一個解決方案和一個 BASH 腳本:https://github.com/ServusCarolus/tl-switch
以下是截至本文的儲存庫中的 README.md 檔案。這是 TL;DR:
我下載了 TexLive 2019 的網路安裝程序,並在預設情況下以 root 身份安裝:
/usr/local/texlive/2019
我為 root 和我的普通使用者帳戶執行了此操作:
sudo mkdir -p /opt/tex/root sudo mkdir /opt/tex/charles sudo chown charles:charles /opt/tex/charles
我像這樣修改了 root
.bashrc
和我的使用者:.profile
if [ -d "/opt/tex/$USER/bin" ] ; then PATH="/opt/tex/$USER/bin:$PATH" fi
我在 32 位元電腦和 64 位元電腦上安裝了下面的自述文件中所示的腳本。該腳本知道如何找到這兩種二進位目錄類型。
作為普通用戶,我只需輸入tl-switch yes
和即可切換 TL 發行版,而無需成為 root 用戶tl-switch no
。當新版本出現時,我可以透過tl-switch yes 2020
等等進行切換。
與上面的答案類似,該腳本會在用戶的可寫目錄下創建或銷毀指向普通 TL 發行版的符號鏈接,/opt/tex
但它會在此過程中進行一些錯誤檢查並節省時間。
我透過成為root sudo su
,我可以以相同的方式切換發行版,更新並進行維護,tlmgr
並且不需要改變我的普通用戶的上下文。此外,這種方法可以擴展到我想要的盡可能多的用戶和 TL 發行版。
下面我談談其他可能的解決方案,因為不同的人有不同的需求。但至少這種方法可能有助於避免因sudo
和導致自動回退到發行版包secure_path
。再次感謝@egreg 提供了良好的基礎和框架。
tl開關
在安裝在 /usr/local/texlive 下的普通 TeXLive 和安裝在 Debian、Ubuntu、Mint 等系統上的 Linux 發行版 TeXLive 之間切換上下文。
腳本和安裝基於以下答案: 多個 TeXlive 安裝
警告:一句話sudo
即使建立 shell 腳本以便在命令搜尋路徑/etc/profile.d
之前放置指向普通 TL 路徑的符號鏈接,預設情況下該命令也不會遵循該鏈接。/usr/bin
sudo
問題是 Debian 和朋友建構sudo
使用secure_path
.此問題有多種解決方法,具體取決於使用者的偏好。看:
https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path
以 root 身分安裝 vanilla TL 並使用此腳本時,必須sudo su
在執行之前鍵入例如將上下文切換到超級使用者的命令tlmgr
。替代方案包括:
侵入性最小的途徑,例如:
sudo env PATH=$PATH tlmgr -gui
使用下面的通用群組路由,不要使用
sudo
,而是將目錄設定為存在於下面/usr/local/texlive/
,如果您透過 安裝的話sudo
。sudo
正如上面的連結所討論的,以各種方式重新定義。 YMMV。
不管上述問題如何,正常使用都能如預期進行。
編輯文件時請務必小心。例如,sudo echo "$USER"
應該指向普通用戶,而不是 root。這意味著應該避免~./
使用檔案路徑等快捷方式。應使用明確的完整路徑。
雖然 的 GUI 介面tlmgr
在通過 運行時不會創建 root 擁有的文件sudo
,但在運行時應避免使用許多桌面整合的 GUI 程式sudo
。這樣做可能會在主目錄樹中建立 root 擁有的檔案。這會阻止用戶程式正確保存資訊。
若要執行完整的上下文切換,請執行su
或sudo su
,具體取決於發行版。
附註:建立一個小組
避免問題的另一種方法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
。請參閱這些指令的手冊頁。因此,您可以使用:
sudo groupadd texusers
sudo usermod -a -G texusers "$USER"
然後可以將 TL 安裝為 texusers 群組的一部分。也可以看看:https://www.howtoing.com/create-a-shared-directory-in-linux/
第 1 步:安裝 Vanilla TL
若要安裝 vanilla TL,請參閱:https://www.tug.org/texlive/acquire.html
注意:安裝 vanilla TL 時切勿安裝符號連結。
第 2 步:建立目錄
我們為每個使用者建立路徑來建立目錄連結:
sudo mkdir -p /opt/tex/root
sudo mkdir "/opt/tex/$USER"
sudo chown "$USER":$USER" "/opt/tex/$USER"
我們為每個使用者重複最後兩行,很可能會用每個使用者名稱取代 $USER,例如:
sudo mkdir /opt/tex/bob
sudo chown bob:bob /opt/tex/bob
第 3 步:修改設定檔
我們將此片段放入每個使用者.profile
和 root 中.bashrc
:
if [ -d "/opt/tex/$USER/bin" ] ; then
PATH="/opt/tex/$USER/bin:$PATH"
fi
另一種方法是將片段放入每個人的 中.bashrc
,然後加入source .bashrc
每個人的 中.profile
。每次開啟終端時,都會更新路徑環境。或者可以設定終端機來開啟登入 shell。
編輯 root 的 時.bashrc
,請記住使用sudo su
或指定/root/.bashrc
為文件。否則sudo nano ~/.bashrc
引用使用者的.bashrc
檔案。
第四步:安裝腳本
我們轉到下載或克隆存儲庫的目錄並找到tl-switch
腳本。然後我們輸入:
sudo cp ./tl-switch /usr/local/bin
chmod +x /usr/local/bin/tl-switch
現在所有用戶都可以運行該腳本。
第 5 步:重新啟動
安裝過程完成後,在使用 TeXLive 之前最好重新啟動計算機,以便 root 和使用者的路徑可以正確更新。
第 6 步:切換到 Vanilla TeXLive 或從 Vanilla TeXLive 切換
當使用者(或 root)想要啟用對 vanilla TL 2019 的存取時,只需鍵入:
tl-switch yes
若要在 下方指定另一個安裝/usr/local/texlive
,請使用,例如:
tl-switch yes 2018
若要停用 vanilla TL 並使用發行版,只需鍵入:
tl-switch no
如果在會話中間變更上下文,搜尋路徑將不會變更。上面的步驟 3 提到了一個(某種程度上)解決這個問題的方法。
最後的想法
該方法的一個直接缺點是需要sudo su
在運行之前將上下文切換到超級用戶tlmgr
。它的好處包括將使用者彼此隔離,並允許使用者在不進行大量系統修改的情況下更改上下文。然而,只有在登出並重新登入之前才應該更改上下文,以避免問題。