我如何找出哪个 Linux 包包含哪个 (La)TeX 包?

我如何找出哪个 Linux 包包含哪个 (La)TeX 包?

我正在使用 Linux/Unix 发行版安装的 (La)TeX。我遇到了一个我没有安装的软件包。如何找出哪个 Linux/Unix 软件包包含该 (La)TeX 软件包?

笔记:

  1. 这是一个公共服务问题,请在回答时考虑到这一点。好的答案应该比以往任何时候都更加详细。
  2. 如果发行版有“安装所有内容”包,那就值得一提。但有些人只想安装他们需要的东西,所以请仍然按照要求回答问题。
  3. 请在您的答案中指定 Linux/Unix 的类型。

我认为我们没有涵盖此问题的问题,但显然如果有人发现它那么我们就会删除它。

答案1

大多数 Linux 发行版都提供了一个工具来查找哪个发行版包包含哪个文件。有些发行版还提供了一个网站。

我想要哪一个文件?

  • 对于\usepackage{foo}(LaTeX 包),您需要foo.sty
  • 对于\documentclass{foo}(LaTeX 类),您需要foo.cls
  • 对于\input foo(TeX 宏文件),您需要foo.tex
  • 对于\bibligraphystyle{foo}(BibTeX 样式),您需要foo.bst
  • 对于字体,这取决于字体的编码。最简单的方法是查找做出必要声明的 LaTeX 包 ( foo.sty)。

如果你知道你想要哪个 CTAN 包,加拿大运输安全局,点击“来源”链接并查看那里的文件名。请注意,.dtx文件用于生成其他文件;通常其中一个生成的文件具有相同的名称和扩展名.sty(对于 LaTeX)或.tex(对于其他格式),但这是一种习惯,而不是规则。

如果您使用图形化包管理器,请检查它是否有按文件名搜索包的选项。如果没有,请参阅下面的命令行方法。

Debian、Ubuntu、Linux Mint、elementary OS……

在基于 Debian 的发行版中,该工具apt-file允许您按文件名搜索软件包数据库。首先,如果尚未安装,请安装它。您只需执行一次此操作,并apt-file update在升级到发行版的新版本后运行。

sudo apt-get install apt-file
sudo apt-file update

这是查找给定文件并安装包含该文件的包的示例。$表示 shell 提示符。

$ apt-file search /foils.sty
foiltex: /usr/share/texmf/tex/latex/foiltex/foils.sty
$ sudo apt-get install foiltex

一些 Debian 衍生产品可能包含该apt-file程序,但不包含其运行所需的数据库。如果是这样,您需要寻找其他方法。衍生产品很可能没有改变 TeX 包的组织方式,因此您可以使用 Web 查找它在 Debian 或 Ubuntu 中的位置:

Red Hat、CentOS、Fedora

现代版本使用dnf,它提供以下命令:

dnf provides '*/foils.sty'

旧版本使用yum,它具有类似的命令,但名称略有不同:

yum whatprovides '*/foils.sty'

请注意,这两个命令都需要完整路径,而不仅仅是文件的基本名称。但您可以使用 来*替换您不知道的路径的一部分,从而查找位于任意位置*/foils.sty的文件。foils.sty

一旦确定了包名称,就可以使用sudo dnf install …或安装它sudo yum install …

苏西

Schweinebacke 的回答。 简而言之:

zypper search --provides --match-exact 'tex(foo.sty)'
sudo zypper install …

Arch Linux

你可以使用 pacman 根据内容搜索软件包.首先更新本地数据库:

sudo pacman -Fy

(或者su -c 'pacman -Fy'使用您喜欢的任何方法以 root 身份运行命令)。然后,搜索特定文件名:

pacman -F /foo.sty

或者pkgfile foo.sty

一旦确定了包名称,就可以使用 安装它pacman -S

Gentoo

你可以使用 equery 搜索提供给定文件名的包

equery belongs /foo.sty

FreeBSD

尝试搜索端口波格尔. 勾选“装箱单”复选框,可按文件名进行搜索。

我还能在哪里寻求帮助?

答案2

一定要喜欢高科技猪Ubuntu

Debian 和 Debian 相关的 Linux 发行版apt-file查找包含某个文件的 Linux 包,例如:

apt-file update
apt-file search extarticle.cls

应该导致

texlive-latex-recommended: /usr/share/texlive/texmf-dist/tex/latex/extsizes/extarticle.cls

注意,此方法仅显示已安装的存储库的文件。

要使用此文件搜索,您仍然需要知道与 (La)TeX 包相关的文件。对于 LaTeX 类,这应该始终是类名加上附加的文件扩展名.cls。对于 LaTeX 包,您应该添加扩展名.sty。但最简单的方法是尝试使用该包并查看文件.log。 (La)TeX 会告诉您未找到哪个文件。这也适用于大多数其他类型的文件。

答案3

有一只鸭子在这里

对于 SuSE Linux 来说,这有点棘手,因为在包的文件列表中搜索仅针对已安装的包。

zypper search提供搜索已安装和尚未安装的软件包,提供能力。但您必须知道您正在搜索哪种功能。对于 TeX 功能,软件包包含的信息如下,tex(article.cls)tex(pgf.sty)可以这样做,例如:

zypper search --provides --match-exact 'tex(article.cls)'

要得到:

S | Name          | Summary                                | Type   
--+---------------+----------------------------------------+--------
  | texlive-latex | A TeX macro package that defines LaTeX | package

或者

zypper search --provides --match-exact 'tex(pgf.sty)'

要得到

 S | Name        | Summary                                   | Type   
 --+-------------+-------------------------------------------+--------
   | texlive-pgf | Create PostScript and PDF graphics in TeX | package

您还可以使用通配符,例如:

zypper search --provides 'tex(*article.cls)'

获取几个带有类名的包…article.cls,例如article.clsextarticle.cls

 S | Name               | Summary                                      | Type   
 --+--------------------+----------------------------------------------+--------
   | texlive-afparticle | Typesetting articles for Archives of Foren-> | package
   | texlive-bangtex    | Writing Bangla and Assamese with LaTeX       | package
   | texlive-bxjscls    | Japanese document class collection for all-> | package
   | texlive-elsarticle | Class for articles for submission to Elsev-> | package
   | texlive-extsizes   | Extend the standard classes' size options    | package
   | texlive-gzt        | Bundle of classes for "La Gazette des Math-> | package
   | texlive-jsclasses  | Classes tailored for use with Japanese       | package
   | texlive-latex      | A TeX macro package that defines LaTeX       | package
   | texlive-luatexja   | Typeset Japanese with Lua(La)TeX             | package
   | texlive-platex     | PLaTeX2e and miscellaneous macros for pTeX   | package
   | texlive-skb        | Tools for a repository of long-living docu-> | package
   | texlive-uplatex    | PLaTeX2e and miscellaneous macros for upTeX  | package

如果你搜索要安装的软件包,也可以使用功能进行安装,例如,

sudo zypper install --dry-run 'tex(datatool.sty)'

将安装包texlive-datatool-2017.132.2.27svn41772-33.1.noarch

答案4

arch linux 徽标

Arch 有两种方法可以做到这一点(好吧,无论如何,我知道的两种方法):

  • 使用包管理器(pacman),
  • 并附带一个名为的附加工具pkgfile

吃豆人

首先,更新数据库中尚未安装在您的系统上的软件包中的文件(现在有点拗口),然后您可以使用以下命令进行查询-F

sudo pacman -Fy

然后您可以像这样查询数据库(以 texmaker 为例):

$ pacman -Fo /usr/bin/texmaker
usr/bin/texmaker is owned by community/texmaker 5.0.2-1

这里的问题是你需要知道文件的实际路径。如果你正在寻找 (La)TeX 包,这没什么用处(至少对我来说不是——我当然不记得我的 texmf-dist 树)。但仍然有这个选择。

不过,更适合我们用例的是s允许搜索文件名的选项(请注意,datatool.sty如果使用 运行查询,则查询将产生空结果pacman -Fo):

$ pacman -Fs datatool.sty
extra/texlive-latexextra 2017.45733-1
    usr/share/texmf-dist/tex/latex/datatool/datatool.sty

根据手册页,此搜索机制应该也支持正则表达式,但我还没有找到让它们工作的方法。所以如果我想进行通配符搜索,到目前为止我需要使用另一种方法。

感谢 Fox 对该选项的提示-x;我在浏览手册页时忽略了这一点:

$ pacman -Fxs 'data.*\.sty'

这将为您提供与正则表达式匹配的软件包和软件包内的文件的列表:

extra/texlive-latexextra 2017.45733-1
    usr/share/texmf-dist/tex/latex/dataref/dataref.sty
    usr/share/texmf-dist/tex/latex/datatool/databar.sty
    usr/share/texmf-dist/tex/latex/datatool/databib.sty
    usr/share/texmf-dist/tex/latex/datatool/datagidx.sty
    [ etc. ]

软件包

首先,照常安装:

sudo pacman -S pkgfile
sudo pgkfile --update

默认的工作方式与人们预期的非常相似:

$ pkgfile datatool.sty
extra/texlive-latexextra

但是假设我们想tikz通过正则表达式语法找到所有拥有包含以下内容的文件的包(不区分大小写):

$ pkgfile -ri '.*tikz.*'
extra/gnuplot
extra/rocs
extra/texlive-core
extra/texlive-latexextra
extra/texlive-pictures
extra/texlive-science
community/auctex
community/gap-packages
community/polymake
community/sagemath-doc

然后,如果您想要获取特定文件,则可以查询这些包。例如auctex

$ pkgfile -l auctex|grep -i tikz
community/auctex        /usr/share/emacs/site-lisp/auctex/style/tikz.el
community/auctex        /usr/share/emacs/site-lisp/auctex/style/tikz.elc

并且相同的查询也可以用 pacman 运行(不过,有趣的是,它实际上比 pkgfile 慢,至少在我的计算机上):

$ pacman -Fl auctex | grep -i tikz
auctex usr/share/emacs/site-lisp/auctex/style/tikz.el
auctex usr/share/emacs/site-lisp/auctex/style/tikz.elc

建筑维基

Arch wiki 也有TeX Live 上的页面,可能值得一看。基本上,您有以下软件包组:

  • texlive-most:包括大多数 TeX Live 应用程序
  • texlive-lang:提供各种字符集和非英语功能

请注意,texlive-core基于中等的TeX Live 的安装方案。

我通常只在我的计算机上安装texlive-mosttexlive-lang。我几乎从未遇到过缺少软件包的问题。缺点是它并不是一件轻量级的事情。

编辑:清理了一些因包和包组之间的差异而导致的令人困惑的术语。)


编辑: 也可以看看Unix/Linux SE 上的这个答案

相关内容