宏包与字体管理

无论您的 TeX 安装看起来多么完整,您很快就会想要一个它缺少的软件包,或者一种许可开箱即用的字体。本页涵盖了您日常实际输入的命令 - TeX Live 的 tlmgr 及其 tlshell GUI、用于单独提供的字体的 getnonfreefonts 以及用于回答“该文件位于何处?”的 kpsewhich。 ——了解每个人所做的事情以及为什么要这样做。

使用 tlmgr 管理包

tlmgr(TeX Live Manager)是用于安装、删除和更新 TeX Live 软件包的官方命令。这就是您添加安装时缺少的数千个 CTAN 软件包中的任何一个的方法 - 在日语和英语设置上都是如此(MiKTeX 是一个单独的世界;见下文)。首先按名称安装包;它的依赖项默认出现。

terminal
# パッケージを 1 つ以上インストール(依存も自動で入る)
tlmgr install siunitx
tlmgr install collection-fontsrecommended

# 依存を引かずに本体だけ/既存の上書き再インストール
tlmgr install --no-depends siunitx
tlmgr install --reinstall siunitx

当包进入系统范围的树时,tlmgr 必须以管理员权限运行(Unix 上的 sudo tlmgr install …,Windows 上的提升 shell)。您还可以手动将文件放入每用户树 (TEXMFHOME) 中,但 tlmgr 管理发行版自己的树。哪棵树包含什么,以及路径如何解析,是“TeX 目录结构和路径”的主题 - 在这里我们只是相信 tlmgr 将东西放在正确的位置。

很容易错过的一件事:tlmgr installtlmgr remove 都不会刷新 系统目录中的符号链接,例如 /usr/local/bin。如果您的 PATH 直接指向 TeX Live 自己的 bin 目录,您可以忽略这一点,但如果您已使用 tlmgr path add 连接可执行文件、手册页和信息页的符号链接,则必须在安装包含新可执行文件的软件包后自行重新运行 tlmgr path add(以及删除一个可执行文件后的 tlmgr path remove)。

结对学习更新。 --self 使 tlmgr 本身(基础设施)保持最新状态; --all 使所有其他已安装的软件包保持最新。标准动作是同时给出两者 - tlmgr 首先替换自身,然后更新其余部分。这也是它自动删除放置在服务器上的包并自动安装集合的新成员的时候。

terminal
# 定番:自分自身 → 全パッケージの順で最新化
tlmgr update --self --all

# 特定パッケージだけ更新/更新があるか一覧で確認
tlmgr update siunitx
tlmgr update --list

tlmgr info 告诉您有关软件包的信息。它不带任何参数列出每个软件包,并用前导 i 标记已安装的软件包。给它一个名称,它就会打印描述、许可证、大小、包含的文件和 TeX 目录数据 - 甚至查询存储库以查找您尚未安装的软件包。当您只记得一半的名称时,search 会有所帮助:--global 搜索存储库而不是本地安装,而 --file 按包中的文件名进行搜索。

terminal
# パッケージの詳細(説明・ライセンス・収録ファイル)
tlmgr info siunitx

# 名前・説明から探す/ファイル名で横断検索
tlmgr search --global siunit
tlmgr search --global --file tikz.sty

选择存储库(CTAN 镜像)

存储库tlmgr 从中获取包的位置。默认情况下,它使用 CTAN 的自动镜像重定向,但是当连接速度较慢或您想要固定一个镜像时,请使用 tlmgr option repository 永久切换。别名 ctanhttps://mirror.ctan.org/systems/texlive/tlnet 的简写;指向它会自动引导您到附近的 CTAN 镜像。

terminal
# 既定(近くの CTAN ミラーへ自動振り分け)に設定
tlmgr option repository ctan

# 特定ミラーへ固定(例:好きな tlnet ミラーの URL)
tlmgr option repository https://example.org/CTAN/systems/texlive/tlnet

# 今の設定をまとめて確認(repository だけでなく paper なども)
tlmgr option show

要从不同的镜像拉取一次,请为该单次运行添加 --repository <url>,而无需触及永久设置。请注意,tlmgr option 还保留默认值,例如纸张尺寸:要立即为每个工具切换纸张,请使用 tlmgr paper a4(或每个程序,tlmgr dvips paper a4)。

GUI (tlshell) 和 MiKTeX

如果您不喜欢命令行,TeX Live 附带 tlshell,一个 Tcl/Tk GUI(使用 tlshell 启动它)。它是一个简单驱动 tlmgr 的前端,因此它可以执行相同的操作 - 搜索、安装、删除、批量更新包以及从窗口切换存储库。它甚至显示底层命令日志,这使得它成为了解 tlmgr 正在做什么的温和方式。

MiKTeX(主要是 Windows)是一个独立的世界:它的命令行不是 tlmgr,而是mpm(MiKTeX 包管理器),它的 GUI 是 MiKTeX Console。 MiKTeX 的特点是即时安装 - 当文档请求您没有的包时,它会在编译过程中下载并安装它(控制台允许您将其设置为始终安装、每次询问或从不)。想法是一样的;只是命令名称和工作流程不同。

字体单独发货 — getnonfreefonts

有些字体带有“免费使用,但不得出售”之类的许可证,因此它们不能在 TeX Live 中使用,而 TeX Live 也在出售 DVD 上分发。 TUG 的 getnonfreefonts 脚本负责安装这些字体。 CTAN 保存字体及其 TeX 支持文件;该脚本获取它们并将所有内容连接起来,以便 TeX 可以找到它们。

首先安装脚本本身一次(按照 tug.org/fonts/getnonfreefonts/ 中的步骤操作)。当前的用法要求您明确选择 --user (个人安装)或 --sys (系统范围安装)。使用 --lsfonts 列出它提供的字体,然后按名称安装一种字体。例如,打字机字体 luximono 就是这样的目标之一。

terminal
# 自分専用ツリーで、入れられるフォントの一覧を見る
getnonfreefonts --user --lsfonts

# 自分専用ツリーへ個別に入れる/配布元のものを全部入れる
getnonfreefonts --user luximono
getnonfreefonts --user --all

主要区别是 --user--sys--user 安装到您的个人树 (TEXMFHOME) 中,而 --sys 安装到系统范围的树中。旧笔记中的单独 getnonfreefonts-sys 命令不再存在。对于计算机上的每个人,请使用管理员权限运行 getnonfreefonts --sys ...。之后,文件名数据库可能需要刷新 (mktexlsr),尽管脚本通常会处理它。这些字体和数据库命令包含在“字体和 DB 工具”中。

terminal
# システム全体のツリーへ(全ユーザ向け・要管理者権限)
sudo getnonfreefonts --sys luximono

# 念のため手動でファイル名 DB を更新する場合
sudo -H mktexlsr

使用 kpsewhich 查找文件

TeX 通过名为 kpathsea 的搜索库定位文件,而 kpsewhich 是从 shell 查询相同搜索的工具。它回答“这个类实际上解析到哪个文件?”和“两个版本有冲突吗?”一次性完成——大多数故障排除的第一步。给它一个文件名,它会打印 TeX 将拾取的第一个路径。

terminal
# このファイルが解決される実際のパスを表示
kpsewhich article.cls
kpsewhich siunitx.sty

# 同名ファイルが複数あれば全部出す(衝突の発見に)
kpsewhich -all siunitx.sty

除了路径之外,它还报告配置变量值-var-value=VAR 打印变量 VAR 的扩展 — 方便查找用户树 (TEXMFHOME) 或配置树 (TEXMFCONFIG) 的实际位置。存在两种扩展:-expand-var 仅扩展变量,而 -expand-path 完全扩展包括大括号的路径。

terminal
# 設定変数の値を見る(ユーザツリーの場所など)
kpsewhich -var-value=TEXMFHOME
kpsewhich -var-value=TEXMFCONFIG

# 変数だけ展開 / パス全体を完全展開
kpsewhich -expand-var='$TEXMFHOME'
kpsewhich -expand-path='$TEXMF'

要消除不同类型的同名文件的歧义,请使用 -format=NAME。例如,BibTeX 样式 (.bst) 和参考书目数据 (.bib) 具有单独的搜索路径,因此命名文件类型可以解析正确的路径。 -show-path=NAME 打印该类型的整个搜索路径,显示搜索哪些目录以及搜索顺序。列出带有 kpsewhich --help 的类型名称。

terminal
# ファイル種別を指定して探す(.bst と .bib は別パス)
kpsewhich -format=bst plainnat.bst
kpsewhich -format=bib mybibliography.bib

# その種別の探索パス全体を表示(探索順の確認)
kpsewhich -show-path=tex

当搜索路径取决于引擎时,将上下文与 -engine=NAME-progname=NAME 进行匹配(例如 -progname=lualatex)。搜索本身的机制——texmf.cnf的角色以及如何遍历树——属于“TeX目录结构和路径”;在这里,我们纯粹使用 kpsewhich 作为检查什么解析为什么的工具。

手稿工作的实用顺序

当报告或论文因 File ... not found 失败时,不要立即将网络上的随机 .sty 放入手稿目录中。首先将文件名包名分开。如果 kpsewhich siunitx.sty 找不到任何内容,请运行 tlmgr search --global --file siunitx.sty 来查找哪个 TeX Live 软件包提供了它,然后才将其安装为分发包,例如tlmgr install siunitx。这使得 tlmgr 可以跟踪依赖项、更新和删除。

对于协作和 CI,“我在我的笔记本电脑上安装过一次”是不可重现的。在 README 或构建配置中记录 TeX Live 年份、额外包名称以及任何固定存储库或 Docker 标签。在提交之前运行 tlmgr update --self --all 意味着使用与昨天不同的包构建 PDF。单独测试更新;对于提交的版本,冻结有效的环境。

  • 仅限会议模板的文件可能位于手稿存储库内,因为它们属于该提交包而不是分发版。
  • 通用软件包应与 tlmgr 一起安装;手稿文件夹中的陈旧副本将继续隐藏更新的 TeX Live 版本并造成令人困惑的故障。
  • 共享机器和 CI 应在 README 或 .latexmkrc 中记录所需的包,并固定 Docker 标签或 TeX Live 年份以实现可重复性。