TeX Live
根据 Wikipedia
- TeX Live 是 TeX 排版系统的一个免费软件发行版,它包含了主要的 TeX 相关程序、宏包和字体。
TeX Live 包含
TeX Live 的替代品包括 MikTex 和 Tectonic,它们提供最小化安装,并在需要时下载必要的宏包。
Arch打包的TeX Live vs 原生TeX Live
安装 TeX Live 有多种方式。虽然 Arch Linux 的软件包仓库中应该有 TeX Live 的快照(如下所述),但大多数情况下,该快照每年只更新一次。相比之下,TeX Live 本身是一个滚动发行版,基于用户每年需要升级一次的模型,但单个宏包的升级可以亚日级别进行。
拥有原生且最新的 TeX Live 安装的好处包括可以访问最新的功能和错误修复以及相关的文档。虽然在没有原生 TeX Live 的情况下也可以升级或安装单个宏包(参见 TEXMFLOCAL 和 TEXMFHOME),但这需要额外小心——有必要确保所有相关宏包的版本相互兼容。
原生TeX Live
安装
请参阅 quickinstall 文档,如果需要,还可以参考 完整文档。过程归结为
- 下载 netinstall 存档
- 解压存档并切换到新创建的目录
- 运行安装脚本
perl ./install-tl,该脚本在文本界面中启动交互式安装过程- 设置所需的安装路径
- 可选地,选择 TeX Live 提供的宏包 collections 的一个子集
- 可选地,选择 Letter 纸张大小作为默认值,而不是 A4
- 等待所有内容下载完成
- 正如安装脚本在过程结束时会通知你的那样,有必要将 TeX Live 安装添加到系统的可执行文件和文档路径中:
PATH、MANPATH、INFOPATH。安装脚本会在退出前打印出确切的必需添加项。
或者,也可以安装 texlive-installerAUR 软件包并按照上述过程运行 install-tl。
更新
请参阅 tlmgr 文档,tlmgr update --all 会升级安装过程中选择的 collections 的所有宏包。它还会安装已安装的 TeX Live collection 中新添加的任何宏包。
每年一次,当有新的 TeX Live 版本发布时,tlmgr update --all 会失败,届时需要重新安装 TeX Live。
Arch打包的TeX Live
texlive组包含大多数 TeX Live 软件包,这些软件包基于上游 collections 进行分类(参见 [1])。- texlive-basic,核心安装,基于 medium 上游安装方案。该软件包包含用于自动化 mktexlsr、fmtutil 和 updmap 的 pacman 钩子。
- texlive-latex 包含基本的 LaTeX 宏包。(例如,如果你打算使用
pdflatex,则需要此软件包)。 - texlive-latexrecommended 和 texlive-latexextra 包含许多有用的 LaTeX 宏包,例如
polyglossia、amsmath和graphicx。 - texlive-fontsrecommended 包含基本字体(包括默认的 Latin Modern)
- texlive-fontsextra 包含额外的字体,可以在 LaTeX Font Catalogue 上查看。
- texlive-xetex 和 texlive-luatex 分别包含 XeTeX 和 LuaTeX 的宏包。
- texlive-bibtexextra 包含 BibLaTeX 宏包以及额外的 BibTeX 样式和参考文献数据库。
- texlive-mathscience 包含数学、自然科学和计算机科学的基本宏包。
texlive-lang组包含为具有非拉丁字符的语言提供字符集和功能的宏包。- biber 为 BibLaTeX 提供了一个可选的参考文献处理后端。
请注意,texlive-binextra 中的一些工具具有可选依赖项,这些依赖项不会自动安装。例如,latexindent 依赖于 perl-yaml-tiny 和 perl-file-homedir。
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 宏包(见下文)。
tllocalmgr
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 文档和源文件。
你也可以在线访问文档
- https://tug.org/texlive/Contents/live/doc.html
- https://ctan.org/ – TeX 相关所有材料的中心
- https://texdoc.org/ (
http://texdoc.org/pkg/packagename直接显示相关 PDF)
用法
请参阅以下资源
- Wikibooks:LaTeX
- The Not So Short Introduction to LaTeX 2ε
- Getting to Grips with LaTeX – Andrew Roberts
- The TeX FAQ
一些人使用 TeX 编辑器来创建文档。
编译文档的高级封装器
通常,使用像 latexmk(1)(Overleaf 使用 [3]),rubber(1) 或 arara(1) 这样的高级自动化工具,比直接调用 pdflatex(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 用于存储(缓存的)运行时数据 |
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)。[7] 因此,只要您通过 pacman 安装系统范围的软件包,您就不需要运行 mktexlsr 或 texhash。
~/texmf/tex/{format}/ 目录结构({format} 通常是 latex),其中自定义类位于 ./{format} 文件夹的根目录,其他本地文件放置在同名文件夹中(例如,mycustompackage.sty 放在 ./{formats}/mycustompackage/mycustompackage.sty),然后运行 texhash 来更新用户数据库。技巧与提示
更改默认纸张大小
目前无法使用 texlive 工具设置默认页面大小,因为它们不适用于标准的 Arch 软件包。
通常,你会运行 texconfig 或 tlmgr,它们也能够更改其他有用的设置。
你可以按如下方式编辑配置文件。
- 要为 pdftex 系列命令(pdftex、pdflatex 等)设置纸张大小,请编辑
/etc/texmf/tex/generic/tex-ini-files/pdftexconfig.tex文件。
也可以通过运行 kpsewhich pdftexconfig.tex 来查找该文件。更改指定 pdfpageheight 和 pdfpagewidth 的两行。例如,要使用 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 替换为 truetype 或 type1,并将 OTF 替换为 TTF 或 Type1。
或者,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 语言定义
如果你遇到了非常特殊的问题,即 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