我正在使用 Linux/Unix 发行版安装的 (La)TeX。我遇到了一个我没有安装的软件包。如何找出哪个 Linux/Unix 软件包包含该 (La)TeX 软件包?
笔记:
- 这是一个公共服务问题,请在回答时考虑到这一点。好的答案应该比以往任何时候都更加详细。
- 如果发行版有“安装所有内容”包,那就值得一提。但有些人只想安装他们需要的东西,所以请仍然按照要求回答问题。
- 请在您的答案中指定 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 belongs /foo.sty
FreeBSD
尝试搜索端口波格尔. 勾选“装箱单”复选框,可按文件名进行搜索。
我还能在哪里寻求帮助?
- 当然是您的发行版的文档!
- 吃豆人罗塞塔:寻找等价于
apt-file search
- Unix 版 Rosetta Stone:寻找 的等价物
apt-file
。 - Unix 和 Linux Stack Exchange:如何找出文件属于哪个(未安装的)包?
答案2
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.cls
等extarticle.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 有两种方法可以做到这一点(好吧,无论如何,我知道的两种方法):
- 使用包管理器(
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-most
和texlive-lang
。我几乎从未遇到过缺少软件包的问题。缺点是它并不是一件轻量级的事情。
(编辑:清理了一些因包和包组之间的差异而导致的令人困惑的术语。)
编辑: 也可以看看Unix/Linux SE 上的这个答案