跳转到内容

TeX Live

来自 Arch Linux 中文维基

根据Wikipedia:

TeX Live 是一种自由的的 TeX 排版系统发行版,包含主要的 TeX 相关程序、宏包和字体。

TeX Live 包括:

  • 多种 TeX 引擎,例如:
  • 基本宏包(在 TeX 术语中称为“格式”),例如:
  • 许多用户制作的包

TeX Live 的替代方案包括 MikTeX 和 Tectonic,它们采用最小化安装方式,并在运行时按需下载所需的包。

Arch-packaged TeX Live 与原生 TeX Live 的对比

安装 TeX Live 有多种方式。虽然 TeX Live 的一个快照应该可以通过 Arch Linux 包仓库获得(如下所述),但该快照大多数情况下每年只更新一次。相比之下,TeX Live 本身是一个滚动发布的发行版,基于用户每年必须升级一次的模型,但每个软件包可以在子日级别进行更新。

拥有原生且最新的 TeX Live 安装的优点包括可以访问最新的功能和 bug 修复,以及相关的文档。尽管在没有原生 TeX Live 的情况下(请参见 TEXMFLOCALTEXMFHOME),仍然可以升级或安装单独的软件包,但这需要额外的注意——必须确保所有相关软件包的版本彼此兼容。

与原生 TeX Live 相比,Arch 仓库中的软件包通常不包括文档,这是一个问题,因为来自 CTAN 的文档通常仅适用于 TeX 包的最新版本。

注意:多个 TeX Live 安装可以在单一系统上和平共存。

原生 TeX Live

安装

请参见 quickinstall 文档,并根据需要查看 full 文档。安装过程如下:

  1. 下载 netinstall 压缩包
  2. 解压压缩包并进入新创建的目录
  3. 运行安装脚本,perl ./install-tl,启动一个交互式安装程序(文本界面)
    1. 设置所需的安装路径
    2. 可选地选择 TeX Live 提供的某些“集合”包
    3. 可选地选择 Letter 纸张尺寸作为默认,而不是 A4
    4. 等待所有文件下载完毕
  4. 安装脚本会在过程结束时通知您,需要将 TeX Live 安装路径添加到系统可执行文件和文档路径中:PATHMANPATHINFOPATH。安装脚本会输出在退出前所需的具体路径。

或者,也可以安装 texlive-installerAUR 包,然后按照上述步骤运行 install-tl

更新

请参阅 tlmgr 文档,tlmgr update --all 将升级安装时选择的所有包集合。它还会安装已添加到安装的 TeX Live 包集合中的新包。

每年一次,当 TeX Live 发布新版本时,tlmgr update --all 会失败,这时需要重新安装 TeX Live。

Arch 打包的 TeX Live

请注意,texlive-binextra 中的某些工具有可选依赖项,未自动安装。例如,latexindent 依赖于 perl-yaml-tinyperl-file-homedir

提示:如果缺少特定的 .sty 文件,可以运行 pacman -F 来查找提供该文件的 Arch 包:
$ pacman -F soul.sty
extra/texlive-plaingeneric 2023.66594-19 (texlive)
    usr/share/texmf-dist/tex/generic/soul/soul.sty

如果需要安装一个可用的 CTAN TeX 包,请运行以下命令来确定它是否包含在 Arch 的 texlive- 包中:

$ tlmgr info ctan_package_name | grep collection

这将列出与 Arch texlive- 包对应的 TeX Live 包集合名称(也可以检查 texlive包组 组以确认是否存在此包)。例如,输出 collection: collection-plaingeneric 表示该 TeX 包包含在 texlive-plaingeneric 中。

另外,可以使用 tlmgr 手动安装单个 TeX 包(见下文)。

注意:某些 TeX Live 包中包含的工具和实用程序依赖于 ghostscriptperlpythonruby。有关详细信息,请查看每个包的可选依赖项。

tllocalmgr

警告:有建议认为 tllocalmgr 将不再工作。请参阅 [2]

tllocalmgr 工具由 tllocalmgrAUR 提供,允许您将来自 CTAN 的包作为 pacman 包安装(和更新)。请参见使用方法-h)了解详细信息。

tlmgr

使用 texlive-basic 时,tlmgr 工具应当开箱即用。

默认情况下,其需要root权限才可运行。

# tlmgr install package_name

如您想在不使用 root 权限的情况下运行程序,请使用内置的用户模式。默认情况下,该功能会将 CTAN 软件包安装到 ~/texmf 目录。 tlmgr 必须先对此目录进行初始化,因此请运行:

$ tlmgr init-usertree

现在,你可以使用用户模式:

$ tlmgr --usermode install package_name

要更改包的安装位置,请更改 TEXMFHOME 这个环境变量。

$ export TEXMFHOME="$HOME/.local/texmf"
$ tlmgr init-usertree
$ ...

tlmgr 会自行选择一个合适的镜像。不过,你也可以自行设置首选镜像网站。需要你在镜像路径末尾添加 /systems/texlive/tlnet。例如:

$ tlmgr option repository http://mirrors.rit.edu/CTAN/systems/texlive/tlnet

包文档

官方仓库中的包不包含字体/宏包的文档或源文件。

要使用texdoc 离线访问文档,请安装 texlive-doc 包,它包含完整的 TeX Live 文档和源文件。

您也可以在线访问文档:

用法

请参见以下资源:

有些人使用 TeX 编辑器来创建文档。

编译文档的高级封装器

通常来说,使用 latexmk(1) 等高级工具,或者使用 arara(1),比直接调用 pdflatex(1) 更有意义,主要是因为较低级的工具通常需要多次运行才能完全编译一个文档。

texmf 树和 Kpathsea

texmf 树(texmf 代表 TeX 和 Metafont)应遵循 TeX 目录结构,否则可能无法找到文件。[3]

TeX Live 使用 Kpathsea 库来通过文件名查找路径,跨越多个 texmf 树和当前工作目录。

Kpathsea 按逆序搜索以下变量(较晚的树会覆盖较早的树)。

变量 Arch 默认值 1) [4] 使用
TEXMFDIST /usr/share/texmf-dist 原始分发文件
TEXMFLOCAL /usr/local/share/texmf:/usr/share/texmf 系统管理员用于全局安装附加或更新的宏、字体等
TEXMFSYSVAR /var/lib/texmf updmap 和 fmtutil(用户模式)存储(缓存)运行时数据
TEXMFSYSCONFIG /etc/texmf updmap 和 fmtutil(用户模式)存储修改后的配置数据
TEXMFHOME ~/texmf 用户用于个别安装附加或更新的宏、字体等
TEXMFVAR ~/.texlive/texmf-var updmap 和 fmtutil(系统模式)存储(缓存)运行时数据
TEXMFCONFIG ~/.texlive/texmf-config 用户模式的配置数据
TEXMFCACHE $TEXMFSYSVAR;

$TEXMFVAR

使用 ConTeXt MkIV 和 LuaLaTeX 存储(缓存的)运行时数据
注意:默认值在/etc/texmf/web2c/texmf.cnf[5] 中定义;它们可以通过环境变量进行覆盖。

Kpathsea 提供了 kpsewhich(1) 命令来查找路径。当使用 --var-brace-value=VARIABLE 参数运行时,它还可以打印变量的值。

Kpathsea 使用文件名数据库(ls-R)来加速在系统级 texmf 树(通过 TEXMFDBS 变量配置)中的搜索。这意味着当系统级文件树发生更改时,需要以 root 运行 mktexlsr(1)texhash(符号链接)。texlive-basic 通过 pacman hook 实现了自动化,该 hook 针对所有默认的系统级 texmf 树,但 /usr/local/share/texmf[6] 因此,只要您通过 pacman 安装系统级软件包,就完全不需要运行 mktexlsrtexhash

提示:要设置本地存储库,您可以创建~/texmf/目录结构{format} 通常是latex),其中自定义类位于 ./{format}文件夹的根目录中,其他本地文件则放在同名文件夹中(例如,mycustompackage.sty放在./{formats}/mycustompackage/mycustompackage.sty文件夹中),然后运行texhash来更新用户数据库。

窍门与技巧

更改默认纸张尺寸

本文或本章节的事实准确性存在争议。

原因: 可以通过直接编辑配置文件来实现。(在 Talk:TeX Live 中讨论)

目前无法使用 texlive 工具设置默认页面大小,因为它们与标准的 Arch 软件包不兼容。

通常情况下,你会运行 texconfigtlmgr ,它们还可以更改其他有用的设置。

您可以按如下方式编辑配置文件。

  • 要为 pdftex 系列命令( pdftexpdflatex 等)设置纸张大小,请编辑 /etc/texmf/tex/generic/tex-ini-files/pdftexconfig.tex 文件。

也可以通过运行 kpsewhich pdftexconfig.tex 来发现。修改指定 pdfpageheightpdfpagewidth 的两行。例如,要使用信纸大小,请修改

\pdfpageheight = 297 true mm
\pdfpagewidth  = 210 true mm

\pdfpageheight = 11 true in
\pdfpagewidth  = 8.5 true in

遗憾的是,这只有在 .fmt 二进制文件重新构建后才会生效。您可以使用 fmtutil-sys 来完成此操作。使用 pacman 重新安装 texlive-bin 也能达到同样的效果。

  • 对于 dvips ,您可以使用 -t 选项指定纸张尺寸: dvips -t letter foo.dvi 。要更改默认值,请编辑 /etc/texmf/dvips/config/config.ps 文件。

也可以使用 kpsewhich config.ps 命令来查找。该文件的末尾列出了 dvips 已知的所有纸张尺寸。列表中第一个纸张尺寸将作为默认值。只需将您希望设为默认值的纸张尺寸移动到列表顶部即可。一旦该文件发生更改, dvips 的行为就会受到影响。

让字体在Fontconfig下识别

默认情况下,各种 TeX Live 宏包自带的字体不会自动被 Fontconfig 识别 。如果您想在 XeTeX 或 LibreOffice 等软件中使用这些字体,最简单的方法是在字体目录中创建一个指向用户字体路径下子目录的符号链接。对于 OpenType 字体,请运行以下命令:

$ ln -s /usr/share/texmf-dist/fonts/opentype/public/some_fonts_you_want ~/font_path/OTF/

要使 fontconfig 能够访问它们,请运行:

$ fc-cache ~/font_path
$ mkfontscale ~/font_path/OTF
$ mkfontdir ~/font_path/OTF

TrueType 字体和 Type 1 字体的操作步骤类似。在上面的几行代码中,将 opentype 替换为 truetypetype1 ,将 OTF 替换为 TTFType1

或者, texlive-basic 包含文件 /usr/share/fontconfig/conf.avail/09-texlive-fonts.conf ,其中包含 TeX Live 使用的字体目录列表。您可以将此文件与以下命令一起使用:

# ln -s /usr/share/fontconfig/conf.avail/09-texlive-fonts.conf /etc/fonts/conf.d/09-texlive-fonts.conf

然后更新系统配置

$ fc-cache && mkfontscale && mkfontdir
注意:如果 TeX 和 Fontconfig 分别使用了相同的字体,即搜索路径上有多个相同的字体副本,则可能会与 XeTeX/XeLaTeX 发生冲突。 LibreOffice 5.3 及更高版本将不再提供 Type 1 字体。

更新babelbib语言定义

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:您不应该更改 /usr/share/texmf-dist/ 。(在Talk:TeX Live#Talk:TeX_Live讨论)

如果您遇到 babelbib 没有您需要的最新语言定义这一特殊问题,并且不想重新编译所有内容,您可以从 https://www.tug.org/texlive/devsrc/Master/texmf-dist/tex/latex/babelbib/ 手动获取这些定义,并将其放入 /usr/share/texmf-dist/tex/latex/babelbib/ 中。例如:

$ cd /usr/share/texmf-dist/tex/latex/babelbib/ 
# wget https://www.tug.org/texlive/devsrc/Master/texmf-dist/tex/latex/babelbib/romanian.bdf
# wget [...all-other-language-files...]
# wget https://www.tug.org/texlive/devsrc/Master/texmf-dist/tex/latex/babelbib/babelbib.sty

之后,您需要运行 texhash 来更新 TeX 数据库:

# texhash

相关页面