tl開關

tl開關

我正在使用 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-linuxx86_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.shin 的文件/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:

  1. 我下載了 TexLive 2019 的網路安裝程序,並在預設情況下以 root 身份安裝:/usr/local/texlive/2019

  2. 我為 root 和我的普通使用者帳戶執行了此操作:

    sudo mkdir -p /opt/tex/root
    sudo mkdir /opt/tex/charles
    sudo chown charles:charles /opt/tex/charles
    
  3. 我像這樣修改了 root.bashrc和我的使用者:.profile

    if [ -d "/opt/tex/$USER/bin" ] ; then
        PATH="/opt/tex/$USER/bin:$PATH"
    fi
    
  4. 我在 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/binsudo

問題是 Debian 和朋友建構sudo使用secure_path.此問題有多種解決方法,具體取決於使用者的偏好。看: https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path

以 root 身分安裝 vanilla TL 並使用此腳本時,必須sudo su在執行之前鍵入例如將上下文切換到超級使用者的命令tlmgr。替代方案包括:

  1. 侵入性最小的途徑,例如:

    sudo env PATH=$PATH tlmgr -gui
    
  2. 使用下面的通用群組路由,不要使用sudo,而是將目錄設定為存在於下面/usr/local/texlive/,如果您透過 安裝的話sudo

  3. sudo正如上面的連結所討論的,以各種方式重新定義。 YMMV。

不管上述問題如何,正常使用都能如預期進行。

編輯文件時請務必小心。例如,sudo echo "$USER"應該指向普通用戶,而不是 root。這意味著應該避免~./使用檔案路徑等快捷方式。應使用明確的完整路徑。

雖然 的 GUI 介面tlmgr在通過 運行時不會創建 root 擁有的文件sudo,但在運行時應避免使用許多桌面整合的 GUI 程式sudo。這樣做可能會在主目錄樹中建立 root 擁有的檔案。這會阻止用戶程式正確保存資訊。

若要執行完整的上下文切換,請執行susudo 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 的發行版)也有命令useraddgroupadd。請參閱這些指令的手冊頁。因此,您可以使用:

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。它的好處包括將使用者彼此隔離,並允許使用者在不進行大量系統修改的情況下更改上下文。然而,只有在登出並重新登入之前才應該更改上下文,以避免問題。

相關內容