如何在 Linux 系统上安装单独的软件包?

如何在 Linux 系统上安装单独的软件包?

我需要在我的计算机上安装新的 TeX/LaTeX/ConTeXt 软件包。我正在运行 Ubuntu/Fedora/Slackware/Some-Version-Of Linux。有哪些可行的方法可以做到这一点?


笔记:   我们收到了很多问题,基本上可以归结为这个问题;我们觉得可以涵盖所有标准方法的问答。参见是否应该合并‘如何在 Ubuntu 上安装软件包 X’问题?讨论。问答是 CW,因此可以轻松添加更多信息。如果您有信息要添加,请这样做。如果您不确定,请在此处发表评论,或(最好)在聊天。问题和答案的评论将定期被删除,以确保信息清晰。

答案1

方法 1——(首选方法)

安装最新的 TeX Live

如果包在 TeX Live 中并且您想要或正在使用“vanilla”TeXLive,则适用这种情况。

如果你尚未安装 TeX Live,请按照以下说明操作如何在 Debian 或 Ubuntu 上安装“原始” TeXLive?(这些说明适用于一般的 Linux 系统,而不仅仅是基于 Debian 的系统)。

如何通过 TeX Live 安装软件包取决于您是作为单个用户安装 TeX Live 还是在系统范围内安装。如果是前者,请尝试:

tlmgr install <package>

如果是第二种,你会遇到一个小问题,即它tlmgr可能不在sudo自动搜索的路径中。因此,你需要先找到它,然后使用sudo完整路径来调用它。如果你的 shell 有内置命令,你可以使用命令来which查找。因此:tlmgrwhich tlmgr

which tlmgr
sudo /path/to/tlmgr install <package>

如果您的 shell 允许您将命令的输出用作一种变量,则可以使用以下命令来压缩上述内容(我们利用which无论命令在路径上出现多少次都会返回该命令的单个实例的事实):

sudo $(which tlmgr) install <package>

(你可以用风险较小的方法来测试你的 shell echo $(which tlmgr):这应该会产生与 相同的结果which tlmgr。)

方法 2:

通过您的包管理器查找并安装该包。

如果您正在使用发行版附带的 TeX 版本,并且不介意安装哪个版本的软件包,则适用这种情况。

Linux 发行版倾向于将 TeX 作为软件包集合,但通常不会像一个 TeX 软件包等于一个 Linux 软件包那样精细。因此,您需要找到包含所需 TeX 软件包的正确发行版软件包并安装它。不同的软件包管理器有不同的搜索方法,如果其他方法都失败了,通常有一个网站可以搜索特定文件:

方法 3

手动安装

在这种情况下,您有两个选择:全系统安装(系统上的所有用户)或仅为您安装。全系统意味着系统上的任何用户都可以使用它,仅为您安装意味着:它只会为您的帐户安装。两者之间的区别在于基本位置:

  • 系统范围:kpsewhich -var-value TEXMFLOCAL在终端中输入以找到正确的目录
  • 只为你:kpsewhich -var-value TEXMFHOME在终端中输入以找到正确的目录

这里需要注意的一点是,如果出现“软件包冲突”,即在多个位置(例如“系统”位置、“本地”位置和/或“个人用户”位置)发现同一个文件,则只会使用该文件的第一个实例。在这种情况下,优先顺序为通常:个人用户 ( TEXMFHOME) > 本地 ( TEXMFLOCAL) > 系统。可以通过运行 来确定完整列表(按正确顺序)kpsewhich --var-value TEXINPUTS

现在发生的事情有点取决于包。如果它在 TDS 中分发,那么您很幸运。转到 报告的目录kpsewhich,然后进入tex子目录(如果不存在,则创建它)。然后提取 TDS 文件(记住sudo全局使用,并检查您的umask是否设置为022)。 注意,首先检查 TDS 文件以确保它将提取到正确的位置:您可能需要向上或向下移动目录才能使其匹配

如果它没有在 TDS 中分发,则有两个选择:如果该包可从 TeX Live 获得,则可以从以下位置获取 TDS 打包版本http://mirror.ctan.org/systems/texlive/tlnet/archive/.tar.xz,并将其解压到临时目录中。在大多数情况下,它将包含 tex、fonts 等子目录。按照上述方法将这些复制到 TEXMF 树中。如果它包含目录 texmf-dist 或类似目录,则它是一个还会在 texmf 层次结构之外发送一些脚本或不同内容的包,在这种情况下最好联系专家。最后,您还可以从 CTAN 或原始分发渠道下载包,解压它,然后可能会有说明 - 在这种情况下请按照说明进行操作 - 但一般模式非常相似。如果它是一个 LaTeX 包,请为其创建一个目录<base dir>/tex/latex/<package name>并提取文件(.sty加上可能.clsETC。) 那里。文档文件放入<base dir>/doc/latex/<package name>

如果您全局安装了它,您现在需要通过 运行mktexlsr(或等效地texhashsudo。 如果mktexlsr不在sudo搜索路径中,您需要找到它。 您可以执行以下操作:

which mktexlsr
sudo /path/to/mktexlsr

或者如果你的 shell 允许的话:

sudo $(which mktexlsr)

对于本地安装来说这不是必需的。

方法 4:

指向它

.sty这是针对您有一个或文件但出于某种原因不想集中安装的情况.cls。例如,它可能特定于某个项目(例如不常见的期刊风格文件),或者它可能与其他包发生冲突,或者您可能希望将其与存储库中的源文件一起保存。

如上所述,TeX 系列程序咨询小路在查找输入文件(包括.sty.cls文件)时。您可以使用环境变量覆盖此变量,该变量(在 unix 上)由冒号分隔的一系列目录组成;TeX 依次搜索这些目录中的每一个。因此,如果您在子目录中TEXINPUTS有一个文件,那么.stystyles

TEXINPUTS=styles:

将导致 TeX 首先在该目录中搜索该文件。

在 Windows 上,您可能需要使用;而不是:

注意结尾的冒号:后面跟着一个空的路径元素,这会导致 TeX 在该位置插入标准搜索路径。因此TEXINPUTS=:styles会导致 TeX 搜索标准路径子目录styles

如上所述,您可以使用kpsewhich它来检查配置是否正确。

% ls styles
myfancypackage.sty
% kpsewhich myfancypackage.sty    # doesn't find anything
% export TEXINPUTS=styles:
% kpsewhich myfancypackage.sty
styles/myfancypackage.sty         # found it!
%

注释和补充

注意sudo

当你将 TeX Live 添加到路径中时,它将不是通常会添加到 root 用户的路径中,因此使用 不会显示。sudo上面的方法用于which查找tlmgrETC。,从“普通用户”路径并将正确的指令传递给sudo。这适用于bashzshshell:如果您使用另一个 shell,则可能需要提供完整路径tlmgr

运行 时sudo,所使用的环境是超级用户和本地用户的混合环境。除了上面提到的路径之外,确保设置umask足够宽松也很重要:用户应该拥有umask077但 root 拥有022umask控制新创建文件的默认权限:只有077root 才能读取(从而使用)它们。使用022,每个人都可以读取(并可能执行)它们。

如果您的系统没有sudo默认安装,则可能在其软件包存储库中安装了它。如果没有,请参阅sudo 有多通用?寻找替代方案。

注意mktexlsrtexhash

为了加快搜索速度,该kpathsea库使用缓存,缓存文件位于ls-R不同的目录中。这些缓存包含所有需要的文件kpathsea 查找是否正确搜索了该目录(遵循任何递归搜索指令)。文件由命令mktexlsr(即“Make TeX's ls-R files”的缩写)重新创建,该命令必须手动运行(由对该目录具有写权限的人运行,通常是 root - 请参阅须藤) (如果需要)。此命令以前称为texhash,并且仍然是此命令的别名(技术上,符号链接)。

注意kpsewhich

TeX 使用kpathsea库来查找文件。查找的位置取决于配置文件或用户 shell 中设置的各种变量。kpathsea输入 即可显示要搜索的目录列表kpsewhich --var-value TEXINPUTS。输出结果有些简略。以下内容将稍微阐明一下:

  1. 路径以冒号分隔(如环境变量中$PATH
  2. 如果路径以!!它开头,则意味着ls-R将查阅文件而不是文件系统。
  3. 如果路径以 结尾,//则会进行递归搜索。
  4. 可以使用括号对路径或路径的一部分进行分组。

因此

{!!/usr/local/texlive/2012/texmf-dist,!!/usr/local/texlive/2012/texmf-var}}//

意味着将按该顺序搜索/usr/local/texlive/2012/texmf-dist/usr/local/texlive/2012/texmf-var。两者实际上都将使用存储ls-R在搜索基础中的缓存(例如/usr/local/texlive/2012/texmf-dist/ls-R)。并且两个搜索都将是递归的。

测试安装

检查是否找到安装文件的最简单方法是运行

kpsewhich <package_name>

<package_name>包括扩展名)。如果列出了新安装的文件,则一切正常。如果没有,但显示某物那么可能是安装了此软件包的另一个版本,并且首先被发现。如果是这种情况,那么

kpsewhich --all <package_name>

将列出所有匹配的名称,以便您可以测试是否能找到它。

如果确实找到了但没有使用它,您要么必须选择一个比所找到的版本更早搜索的位置,要么删除首先找到的版本。

如果根本没有找到,则可能存在以下原因。

  1. 如果您完整安装了 TeX Live,该kpsewhich命令是否来自新安装?尝试which kpsewhich找出答案。如果不是,请调整您的$PATH并重试。(如果您的路径正确,可能是您的 shell 没有注意到它:尝试rehash更正此问题(Bourne-Again Shells))。

  2. 如果你只安装了一个包,那么你把它放在 TeX 可以找到的地方了吗?可以通过运行以下命令找到 TeX 搜索的完整目录列表

     kpsewhich --var-value TEXMF
    

这些都是以递归方式搜索的。

  1. 如果它位于 TeX 搜索的目录中,并且该目录已添加到列表中,!!则 TeX 将参考缓存,而不是磁盘上的实际文件。要重新创建缓存,请以超级用户身份运行mktexlsr或。texhash

依赖包

如果您不使用包管理器安装 TeX 或其中一个包(即您没有使用方法 1),那么包管理器将不知道您刚刚安装的内容已安装。这意味着安装依赖于这些手动安装的包的系统包将尝试再次安装它们。最简单的解决方案是让它们这样做,因为通常情况下,您的手动安装的东西会先于系统包找到。如果空间紧张,许多发行版都有“假的”可以安装以欺骗包管理器的包。请参阅如何在 Debian 或 Ubuntu 上安装“原始” TeXLive?更多细节。

答案2

由于我使用 Ubuntu,所以我安装了 TeX Live,当然我也用它apt-get来安装包。

我发现缺少编译文档所需的一些文件。apt-cache按照建议使用方法 1我发现上面这个texlive-latex-extra包就是我需要的。但是下载文件太大了(327 MB)。

仅基本软件包,很容易安装

sudo apt-get install texlive-latex-extra --no-install-recommends

包括--no-install-recommends避免大量(320 MB)的额外内容。

答案3

如果您无法安装该包(无论什么原因),您也可以将 .sty 文件放在使用它的 .tex 文件旁边。LaTeX 编译器也会在当前目录中搜索。

答案4

对于任何使用 Arch Linux 的人来说,Arch 维基说:

tllocalmgr实用程序由tllocalmgr-git,让你可以从 CTAN 安装(和更新)软件包作为 pacman 软件包,请参阅它的用法-h)了解详情。

要安装,tllocalmgr-git可以使用 AUR 助手,例如yay

yay -S tllocalmgr-git

然后只需运行:

tllocalmgr

然后 TexLive Local Manager Shell 就可以使用了。要安装软件包,只需运行:

> install threeparttable  # could be anyother package
> texhash                 # refresh the TeX file database

相关内容