跳转至内容

TeX Live

来自 ArchWiki
(重定向自 Tex)

根据 Wikipedia

TeX LiveTeX 排版系统的一个免费软件发行版,它包含了主要的 TeX 相关程序、宏包和字体。

TeX Live 包含

  • 许多 TeX 引擎,例如
  • 基本的宏包(在 TeX 术语中称为 formats),例如
  • 许多用户生成的宏包

TeX Live 的替代品包括 MikTex 和 Tectonic,它们提供最小化安装,并在需要时下载必要的宏包。

Arch打包的TeX Live vs 原生TeX Live

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

拥有原生且最新的 TeX Live 安装的好处包括可以访问最新的功能和错误修复以及相关的文档。虽然在没有原生 TeX Live 的情况下也可以升级或安装单个宏包(参见 TEXMFLOCALTEXMFHOME),但这需要额外小心——有必要确保所有相关宏包的版本相互兼容。

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

原生TeX Live

安装

请参阅 quickinstall 文档,如果需要,还可以参考 完整文档。过程归结为

  1. 下载 netinstall 存档
  2. 解压存档并切换到新创建的目录
  3. 运行安装脚本 perl ./install-tl,该脚本在文本界面中启动交互式安装过程
    1. 设置所需的安装路径
    2. 可选地,选择 TeX Live 提供的宏包 collections 的一个子集
    3. 可选地,选择 Letter 纸张大小作为默认值,而不是 A4
    4. 等待所有内容下载完成
  4. 正如安装脚本在过程结束时会通知你的那样,有必要将 TeX Live 安装添加到系统的可执行文件和文档路径中:PATHMANPATHINFOPATH。安装脚本会在退出前打印出确切的必需添加项。

或者,也可以安装 texlive-installerAUR 软件包并按照上述过程运行 install-tl

更新

请参阅 tlmgr 文档,tlmgr update --all 会升级安装过程中选择的 collections 的所有宏包。它还会安装已安装的 TeX Live collection 中新添加的任何宏包。

每年一次,当有新的 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 collection 名称(也可以检查 texlive 组以确认是否存在这样的软件包)。例如,输出 collection: collection-plaingeneric 意味着该 TeX 软件包包含在 texlive-plaingeneric 中。

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

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

tllocalmgr

警告 有人建议 tllocalmgr 将不再工作。请参见 [2]

tllocalmgr 工具由 tllocalmgrAUR 提供,它允许你将 CTAN 上的宏包安装(和更新)为 pacman 软件包。有关详细信息,请参阅 其用法-h)。

tlmgr

使用 texlive-basictlmgr 工具应该可以开箱即用。默认情况下,它需要 root 权限才能运行

# tlmgr install package_name

如果你想在没有 root 权限的情况下运行它,请使用内置的用户模式功能。默认情况下,这会将 CTAN 宏包安装到 ~/texmftlmgr 必须先初始化此目录。为此,请运行

$ 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 编辑器来创建文档。

编译文档的高级封装器

与直接调用 pdflatex(1) 等工具相比,使用 latexmk(1) (被 Overleaf 使用 [3]),rubber(1)arara(1) 等更高级的自动化工具通常更有意义,因为低级工具通常需要多次运行才能完全编译单个文档。

texmf 树和 Kpathsea

texmf 树(texmf 是 TeX 和 Metafont 的缩写)应该遵循 TeX Directory Structure,否则文件可能找不到。[4]

TeX Live 使用 Kpathsea 库在多个 texmf 树和当前工作目录中按文件名查找路径。

Kpathsea 按以下变量进行搜索(后面的树覆盖前面的树)。

变量 Arch 默认 1) 用于 [5]
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 updmap 和 fmtutil(系统模式)用于存储修改后的配置数据
TEXMFCACHE $TEXMFSYSVAR;$TEXMFVAR ConTeXt MkIV 和 LuaLaTeX 用于存储(缓存的)运行时数据
注意 默认值在 /etc/texmf/web2c/texmf.cnf 中定义[6];它们可以通过 环境变量覆盖。

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

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

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

技巧与提示

更改默认纸张大小

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

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

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

通常,你会运行 texconfigtlmgr,它们也能够更改其他有用的设置。

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

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

也可以通过运行 kpsewhich pdftexconfig.tex 来查找该文件。更改指定 pdfpageheightpdfpagewidth 的两行。例如,要使用 letter 尺寸,请将

\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

然后更新 fontconfig

$ fc-cache && mkfontscale && mkfontdir
  • 这可能会与 XeTeX/XeLaTeX 发生冲突,如果相同的字体(单独地)同时供 TeX 和 Fontconfig 使用,即如果搜索路径中有多个相同的字体副本。
  • Type 1 字体将不再适用于 LibreOffice 5.3 及更高版本。

更新 babelbib 语言定义

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:你不应该更改 /usr/share/texmf-dist/。(在 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

参见