我正在使用 Lubuntu 11.10。我已经完整安装了 TeXlive 2011。
我刚刚安装了 TeXlive 2013 运行install-tl
脚本。一切都很好。我选择小方案。没问题。
因此根据导游我们应该这样做:
安装完成后,您必须将 TeX Live 二进制文件的目录添加到 PATH 中 — 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
其中/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 发行版中运行这些程序。
请记住:当你安装 vanilla TeX Live 时,绝不将选项“在系统目录中创建符号链接”设置为“是”。确保将其设置为“否”,特别是在 GNU/Linux 系统上,因为在升级时,发行版提供的 TeX Live 会接管。
答案2
我很欣赏@egreg 的回答,并在此基础上提出了自己的解决方案,因为我写了一本使用 TL 2017 的书,但我想使用 TL 2019 进行包维护。
然而,由于基于 Debian 的系统由于其编译方式而无法很好地使用此解决方案sudo
,因此我创建了一个解决方案和一个 BASH 脚本:https://github.com/ServusCarolus/tl-switch
下面是截至本文发布时 repo 中的 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
我按照下面的 README 所示在 32 位机器和 64 位机器上安装了该脚本。该脚本知道如何查找这两种二进制目录类型。
作为普通用户,我只需输入tl-switch yes
和即可切换 TL 发行版,而无需成为 root 用户tl-switch no
。当出现新版本时,我可以通过tl-switch yes 2020
等进行切换。
与上面的答案类似,该脚本会在用户可写目录中创建或销毁指向 vanilla TL 分布的符号链接,/opt/tex
但它会在此过程中进行一些错误检查并节省时间。
我通过成为 root 用户sudo su
,并且能够以同样的方式切换发行版,更新和维护,tlmgr
并且无需改变普通用户的上下文。此外,这种方法可以扩展到我想要的尽可能多的用户和 TL 发行版。
下面我讨论其他可能的解决方案,因为不同的人有不同的需求。但至少这种方法可能有助于避免由于sudo
和而自动回退到发行版软件包secure_path
。再次感谢@egreg提供良好的基础和框架。
tl-开关
在安装在 /usr/local/texlive 下的 vanilla TeXLive 和安装在 Debian、Ubuntu、Mint 等系统上的 Linux 发行版 TeXLive 之间切换上下文。
脚本和安装基于以下答案: 多个 TeXlive 安装
警告:关于sudo
即使有人创建一个 shell 脚本以便在命令搜索路径/etc/profile.d
之前放置一个指向 vanilla 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
是让所有 TeX 用户都可以写入 TeXLive 安装。这里的问题是,如果多个用户干预安装,可能会造成混乱。我们为了完整性而包括这一点:
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.tecmint.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
和根用户中.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
文件。
步骤4:安装脚本
我们进入下载或克隆存储库的目录并找到tl-switch
脚本。然后输入:
sudo cp ./tl-switch /usr/local/bin
chmod +x /usr/local/bin/tl-switch
现在所有用户都有权运行该脚本。
步骤5:重新启动
安装过程完成后,最好在使用 TeXLive 之前重新启动机器,以便正确更新 root 和用户的路径。
步骤 6:切换到 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
。它的好处包括将用户彼此隔离,并允许用户在不进行大量系统修改的情况下更改上下文。然而,为了避免出现问题,应该只在注销和重新登录之前更改上下文。