% $Id$
% TeX Live documentation.  Originally written by Sebastian Rahtz and
% Michel Goossens, now maintained by Karl Berry and others.
% Translated by Jiang Jiang  <gzjjgod@gmail.com>,
%               Jinsong Zhao <jinsong.zhao@gmail.com>,
%               Yue Wang     <yulewang@gmail.com>
%               Helin Gai    <helin.gai@gmail.com>
% Public domain.
%
\documentclass{article}
\let\tldocenglish=1  % for live4ht.cfg

\usepackage{tex-live-zh-cn, indentfirst}

\title{%
  {\huge \textit{\TeX\ Live 指南---2024}}%
}

\author{Karl Berry 编写 \\[3mm]
        \url{https://tug.org/texlive/}
       }

\date{2024 年 5 月}

\begin{document}
\maketitle

\begin{multicols}{2}
\tableofcontents
%\listoftables
\end{multicols}

\section{简介}
\label{sec:intro}

\subsection{\protect\TeX\protect\ Live 与 \protect\TeX\protect\ Collection}

本文档描述 \TL{} 软件的主要功能和特性，\TL{} 是 \TeX{} 及其相关程序在
GNU/Linux 及其他类 Unix 系统、\macOS{} 和 Windows
系统下的一套发行版。

你可以通过下载、从 \TeX{} 用户组织分发给会员的 \TK{}
\DVD{} 或其他途径获得 \TL{}。\TL{} 和 \TK{} 都由 \TeX{} 用户组织共同协作
完成，第~\ref{sec:tl-coll-dists}~节将简要介绍 \DVD 的内容。
这篇文档, 主要介绍 \TL{} 本身。

\TL{} 包含了 \TeX{}, \LaTeXe{}, \ConTeXt, \MF, \MP, \BibTeX{}
和许多其他程序的可执行文件; 种类繁多的宏包、字体和文档; 并支持世界上许多
不同种语言的排版。

文档末尾的第~\ref{sec:history}~节 (第~\pageref{sec:history}~页)
将简要介绍这一版 \TL{} 的重要改变。

\htmlanchor{platforms}
\subsection{操作系统支持}
\label{sec:os-support}

\TL{} 为多种基于 Unix 的平台提供了二进制文件，包括 \GNU/Linux、
\macOS{}、和 Cygwin。它所包含的源代码还可在没有二进制文件的平台上编译安装。

至于 Windows，\TL{} 仅支持 Windows~7 及后续版本。
Windows Vista \emph{或许}还可以继续工作，但 \TL{} 不能在 Windows XP
或者更早的版本上运行。\TL{} 包含了 64 位的 Windows
可执行文件。

除了 \TL{} 以外，Windows 和 \macOS{} 用户还有其它的选择，请参考
第~\ref{sec:tl-coll-dists}~节。

\subsection{\protect\TL{} 的基本安装}
\label{sec:basic}

你可以用 \DVD{} 或通过网络来安装 \TL{}
(\url{https://tug.org/texlive/acquire.html})。
网络安装程序本身很小，而且它会从网上下载一切所需的东西。

\DVD{} 的安装程序可以把 \TL{} 安装到你的本地磁盘上，但你不能直接从 \TK{}
\DVD{} (或者 \TK{} 和 \TL{} 的 \code{.iso} 镜像) 上运行 \TL{}。
你\emph{可以}在 \USB{} 盘上安装一套可运行的版本 (参见 \ref{sec:portable-tl})。
安装方法将在下面的章节介绍 (\p.\pageref{sec:install})，这里提供一个快速入门: 

\begin{itemize*}

\item 对于 Unix，安装脚本是 \filename{install-tl}; 在 Windows 则需要调用
\filename{install-tl-windows}。安装程序将在指定了 \code{-gui} 选项的情况下
以图形界面模式工作 (这是 Windows 下的默认模式)，或在指定了 \code{-gui=text}
选项的情况下以文本模式工作 (这是其它系统下的默认模式)。

\item 安装完成后可以得到一个名为 \prog{tlmgr} 的程序: `\TL\ Manager'。
和安装程序一样，它可以在 \GUI{} 模式或文本模式下运行。你不但可以用它
来安装或卸载软件包，还可以用来完成各种配置工作。

\end{itemize*}

\htmlanchor{security}
\subsection{关于安全的考虑}
\label{sec:security}

尽我们所知，核心的 \TeX\ 程序本身是 (而且一直是) 非常健壮的。然而，尽
管每个人都尽力而为，大家贡献给 \TeX\ Live 的程序却不一定能达到同样的程度，
所以，当运行不受信任的输入程序时，你应该一直保持警惕; 为了提高安全性，
请使用单独的子目录或者 chroot。

在 Windows 系统上特别需要注意对当前目录的文件进行检查，因为通常情况下，
Windows 会忽视搜索路径而优先使用当前目录下的程序。这给许多可能的攻击带
来了方便。我们已经堵住了很多漏洞，但毫无疑问还有漏洞存在，尤其是在第三
方程序方面。因此，我们建议检查当前目录下的可疑文件，尤其是可执行文件
(二进制文件或者脚本)。一般情况下，它们不应该存在，而且更不应该在处理文
档时生成。

最后，\TeX\ (及其相关程序) 在处理文档时是可以写文件的，这个功能可能被
各方滥用，所以我们再一次强调在新的子目录下处理未知文档是最保险的选择。

另一个关乎安全的方面是确保下载的内容与它被创建时一致。如果安装了 \prog{gpg}
(GNU Privacy Guard) 程序，\prog{tlmgr} 程序 (第~\ref{sec:tlmgr}~节) 会自动
对现在内容进行加密验证。\prog{gpg} 不和 \TL{} 一起分发，但可以参见
\url{https://texlive.info/tlgpg/} 了解更多信息。

\subsection{获得帮助}
\label{sec:help}

\TeX{} 社群是活跃而友好的，几乎所有认真的提问都能得到回答。尽管如此，这种由志愿者
和业余用户组成的技术支持仍然显得不太正式，所以，在提问前最好做好功课。(如果你更喜欢
有保障的商业性技术支持，可以放弃 \TL{}，改为购买商业 \TeX{} 系统，在
\url{https://tug.org/interest.html#vendors} 上有一份销售商的列表。)

大概按照推荐使用的顺序，我们列出了这样一份资源列表: 

\begin{description}
\item [起步] 如果你刚刚接触 \TeX，\url{https://tug.org/begin.html}~页面提供了这个
系统的简短介绍。

\item [CTAN] 如果你在寻找某个特定的宏包、字体、程序等等，CTAN 就是你首先该找的地方。
这里是一个所有 \TeX{} 相关内容的巨大集合。目录表条目还可以告诉你一个宏包能否用于 \TL{}
或 MiK\TeX。参见 \url{https://ctan.org}。

\item [\TeX{} FAQ] \TeX{} FAQ 汇集了各类问题——从最基础到最晦涩的。它可以在
\url{https://texfaq.org}~页面找到。

\item [\TeX{} 网上资源] \url{https://tug.org/interest.html}~页面上有
许多和 \TeX{} 相关的链接，包括讨论这个系统方方面面的许多书籍、手册和文章。

\item [支持网站] 一般性的网络检索没有坏处。最重要的 \TeX\ 技术支持网站包括
\LaTeX{} 社区网站 \url{http://latex.org/}, 问答网站 \url{https://tex.stackexchange.com},
和邮件列表 \url{https://lists.tug.org/texhax}。它们的内容归档中有多年以来的提问和
回答供你搜索。

\item [提问] 如果你还是找不到答案，可以在 \url{https://latex.org} 和
\url{https://tex.stackexchange.com/} 网站上提问，或者发送邮件到
\email{texhax@tug.org} (提问并不需要订阅)。不过，在提问前，
请先阅读 FAQ 上的这一条: \url{https://texfaq.org/FAQ-askquestion}，
它能提高你获得有用回答的可能性。

\item [\TL{} 技术支持] 如果你需要报告错误，或者提出对 \TL{} 的发行、安装或
文档的建议和意见，可以使用 \email{tex-live@tug.org} 这个邮件列表。不过，如果问题
是针对 \TL{} 中包含的某个特定程序，那最好还是写信给这个程序的维护者或邮件列表。
用 \code{-{}-help} 参数来运行程序一般都能得到用来报告其 bug 的地址。

\end{description}

另一方面，你也不妨帮助其他有问题的朋友。上述所有资源对所有人开放，所以请随时参
与，开始阅读，在你能力所及的范围内提供帮助。

% don't use \TL so the \uppercase in the headline works.  Also so
% tex4ht ends up with the right TeX.  Likewise the \protect's.
\section{\protect\TeX\protect\ Live 概览}
\label{sec:overview-tl}

这个小节描述的是 \TL{} 以及它所属的 \TK{} 的内容。

\subsection{\protect\TeX\protect\ Collection: \protect\TL,
            Mac\protect\TeX, MiK\protect\TeX, CTAN}
\label{sec:tl-coll-dists}

\TK{} \DVD{} 包含了以下内容: 

\begin{description}

\item [\TL] 是一个完全跨平台的 \TeX{} 系统，它可以安装在本
地磁盘上。主页: \url{https://tug.org/texlive/}。

\item [Mac\TeX] 针对 \macOS{}，在 \TL{} 的基础上增加了原生的 \macOS{} 的安装程序
和一些其它的 Mac 应用程序。主页:  \url{https://tug.org/mactex/}。

\item [\MIKTEX] 另一个用于 Windows、GNU/Linux 和 \macOS{} 的完全跨平台的
\TeX\ 发行版 (但 DVD 上只包含Windows 的二进制文件)。它有一个集成的包管理器，
可以根据需要从互联网安装缺失的组件。主页: \url{https://miktex.org/}。

\item [CTAN] 一份 \CTAN{} 仓库的快照 (\url{https://ctan.org/})。
\CTAN{} 并不一定遵循 \TL{} 的版权协议，因此在分发或修改时要格外小心。

\end{description}

\subsection{\protect\TL{} 的顶层目录}
\label{sec:tld}

这是一个简短的 \TL{} 发行版顶层目录的列表及描述。

\begin{ttdescription}
\item[bin] \TeX{} 系统程序，按平台组织。

\item[readme-*.dir] 关于 \TL{} 的多种语言的简介和有用的链接，同时有 \HTML{}
和纯文本版本。

\item[source] 所有程序的源代码，包括主要的基于 \Webc{} 的 \TeX{} 发行版。

\item[texmf-dist] 最主要的文件树，见下文的 \dirname{TEXMFDIST}。

\item[tlpkg] 用来维护安装程序所用到的脚本、程序和数据，以及对 Windows 的特殊支持。
\end{ttdescription}

至于文档，顶层目录下的 \OnCD{doc.html} 文件中提供的完整链接会有帮助。
几乎所有内容的文档 (宏包、格式文件、字体、程序手册、man page、 Info 文件等) 都在
\dirname{texmf-dist/doc} 目录下，不管它被放在哪里，你都可以使用
\cmdname{texdoc} 程序来寻找这些文档。

\TL\ 本身的文档在 \dirname{texmf-dist/doc/texlive} 目录下，有以下这些语言的版本: 

\begin{itemize*}
\item{捷克/斯洛伐克语:} \OnCD{texmf-dist/doc/texlive/texlive-cz}
\item{德语:} \OnCD{texmf-dist/doc/texlive/texlive-de}
\item{英语:} \OnCD{texmf-dist/doc/texlive/texlive-en}
\item{法语:} \OnCD{texmf-dist/doc/texlive/texlive-fr}
\item{意大利语:} \OnCD{texmf-dist/doc/texlive/texlive-it}
\item{日语:} \OnCD{texmf-dist/doc/texlive/texlive-ja}
\item{波兰语:} \OnCD{texmf-dist/doc/texlive/texlive-pl}
\item{俄语:} \OnCD{texmf-dist/doc/texlive/texlive-ru}
\item{塞尔维亚语:} \OnCD{texmf-dist/doc/texlive/texlive-sr}
\item{西班牙语:} \OnCD{texmf-dist/doc/texlive/texlive-es}
\item{简体中文:} \OnCD{texmf-dist/doc/texlive/texlive-zh-cn}
\end{itemize*}


\subsection{预定义的 texmf 目录树概览}
\label{sec:texmftrees}

本小节列出了系统中用于指定 texmf 目录的所有预定义变量及其用途，
以及 \TL{} 的默认布局。\texttt{tlmgr~conf} 命令可
以列出这些变量的值，这样你可以很容易找到它们和你所安装到的目录
名称的对应关系。

所有这些目录树，包括个人的，都应该遵循 \TeX\ 目录结构 (\TeX\
Directory Structure, \TDS, \url{https://tug.org/tds})，
包括其中所有细小的子目录，否则文件就可能找不到。
第 \ref{sec:local-personal-macros} 节 (第
\pageref{sec:local-personal-macros} 页) 有更详细的介绍。
这里描述的顺序和搜索的优先级相反，也就是说，
列在更靠后的目录树会被更优先搜索。

\begin{ttdescription}
\item [TEXMFDIST] 这个目录树包含几乎所有原有发行版本的文件——配置文件、脚本、宏
包、字体等等。(主要的例外是每个平台的可执行文件，它们存储在同级的 \code{bin/} 目
录下。)

\item [TEXMFSYSVAR] 给 \verb+texconfig-sys+、\verb+updmap-sys+、\verb+fmtutil-sys+
和 \verb+tlmgr+ 使用的 (全站的) 目录树，用于存储 (缓存) 运行时的数据，如格式文件和
生成的映射文件。

\item [TEXMFSYSCONFIG] 给 \verb+texconfig-sys+、\verb+updmap-sys+ 和
\verb+fmtutil-sys+ 使用的 (全站的) 目录树，用于存储修改过的配置数据。

\item [TEXMFLOCAL] 系统管理员用来安装供整个系统使用的额外的或更新过的宏包、字体等
的目录树。

\item [TEXMFHOME] 用户用来安装供他们自己独立使用的的额外的或更新过的宏包、字体等的目录树。
这个变量根据不同的用户选择不同的个人目录。

\item [TEXMFVAR] 给 \verb+texconfig+、\verb+updmap-user+ 和 \verb+fmtutil-user+
使用的 (个人的) 目录树，用于存储 (缓存) 运行时的数据，如格式文件和生成的映射文件。

\item [TEXMFCONFIG] 给 \verb+texconfig+、\verb+updmap-sys+、和 \verb+fmtutil-sys+
使用的 (个人的) 目录树，用于存储修改过的配置数据。

\item [TEXMFCACHE] 给 \ConTeXt\ MkIV 和 Lua\LaTeX\ 使用的目录树，
用于存储 (缓存) 运行时的数据。缺省为 \code{TEXMFSYSVAR}; 若该目录不可写，则使用
\code{TEXMFVAR}。
\end{ttdescription}

\noindent
默认的目录结构: 
\begin{description}
  \item[全系统根目录] 可以包含多个 \TL{} 版本:
  (在 Unix 下默认是 \texttt{/usr/local/texlive})
  \begin{ttdescription}
    \item[2023] 上一个版本。
    \item[2024] 当前版本。
    \begin{ttdescription}
      \item [bin] ~
      \begin{ttdescription}
        \item [i386-linux] \GNU/Linux 二进制文件 (32 位)
        \item [...]
        \item [universal-darwin] \macOS{}\ 二进制文件
        \item [x86\_64-linux] \GNU/Linux 二进制文件 (64 位)
        \item [windows] Windows 二进制文件 (64 位)
      \end{ttdescription}
      \item [texmf-dist\ \ ]      \envname{TEXMFDIST} 和 \envname{TEXMFMAIN}
      \item [texmf-var \ \ ]      \envname{TEXMFSYSVAR}, \envname{TEXMFCACHE}
      \item [texmf-config]        \envname{TEXMFSYSCONFIG}
    \end{ttdescription}
    \item [texmf-local] \envname{TEXMFLOCAL} 用来存放在不同版本间共享的数据。
  \end{ttdescription}
  \item[用户主 (home) 目录] (\texttt{\$HOME} 或
      \texttt{\%USERPROFILE\%})
    \begin{ttdescription}
      \item[.texlive2023] 给上个版本的，个人生成和配置的数据。
      \item[.texlive2024] 给这个版本的，个人生成和配置的数据。
      \begin{ttdescription}
        \item [texmf-var\ \ \ ] \envname{TEXMFVAR}, \envname{TEXMFCACHE}
        \item [texmf-config]    \envname{TEXMFCONFIG}
      \end{ttdescription}
    \item[texmf] \envname{TEXMFHOME} 个人的宏包文件，等等。
  \end{ttdescription}
\end{description}

\subsection{\protect\TeX\ 的扩展版本}
\label{sec:tex-extensions}

Knuth 所开发的原始 \TeX{} 本身已经冻结了，仅修改少量的错误。
它在 \TL\ 中仍然作为 \prog{tex} 程序出现，在可预见的未来也仍然如此。
\TL{} 包括了一些建立在 \TeX\ 基础上的扩展程序 (也称为 \TeX\ 引擎): 

\begin{description}

\item [\eTeX] 为 \TeX\ 增加了一套新的原语 (primitive)。
\label{text:etex} (包括宏展开，字符扫描，mark 的分类，额外的调试功能，等等)
以及用于双向排版的 \TeXXeT{} 扩展模式。在默认情况下，\eTeX{} 100\% 兼容原始的 \TeX。
参见 \OnCD{texmf-dist/doc/etex/base/etex_man.pdf}。

\item [pdf\TeX] 在 \eTeX\ 扩展的基础上构建，在 \dvi{} 输出之外增加对
PDF 输出的支持，以及许多非输出相关的扩展。
它是许多常见格式，如 \prog{etex}, \prog{latex} 或 \prog{pdflatex}，调用的程序 。
它的主页在 \url{http://www.pdftex.org/}，文档见
\OnCD{texmf-dist/doc/pdftex/manual/pdftex-a.pdf}。可以在
\OnCD{texmf-dist/doc/pdftex/samplepdftex/samplepdf.tex} 找到展示部分功能的例
子。

\item  [Lua\TeX] 增加了对 Unicode 输入以及 OpenType/TrueType 字体和系统字体的支持。
它集成的 Lua 语言解释器 (\url{https://lua.org}) 为许多棘手的 \TeX{}
问题提供了解决方案。当以 \filename{texlua} 命令执行时，它就像一个独立的
Lua 解释器一样运行。其网站是 \url{http://www.luatex.org}，
参考手册在 \OnCD{texmf-dist/doc/luatex/luatex.pdf}。

\item [(e)(u)p\TeX] 原生支持日语排版需求; 
p\TeX\ 是基本引擎，而 ep\TeX 添加了\eTeX\ 功能，
而 up\TeX\ 添加了 Unicode 支持。

\item [Xe\TeX] 通过标准的第三方库，
增加了对 Unicode 输入以及 OpenType/TrueType 字体和系统字体的支持。
参见 \url{https://tug.org/xetex}。

\item [\OMEGA\ (Omega)] 基于 Unicode (16 位字符集)，因而同时支持处理世界上
几乎所有的语言文字。它同时还支持所谓的 `\OMEGA{} 翻译过程'
(\OMEGA{} Translation Processes, OTPs),
用于对任意输入进行复杂的变换操作。Omega 现在已经不作为独立的程序出现在 \TL{}
中了; 改为只支持 Aleph: 

\item [Aleph] 结合了 \OMEGA\ 与 \eTeX\ 扩展。
参见 \OnCD{texmf-dist/doc/aleph/base}。

\end{description}


\subsection{\protect\TL\ 中其他值得一提的程序}

这里给出 \TL{} 中其他的一些常用程序: 

\begin{cmddescription}

\item [bibtex, biber] 参考文献支持。

\item [makeindex, upmendex, xindex, xindy] 索引支持。

\item [dvips] 将 \dvi{} 转换为 \PS{}。

\item [dvipdfmx] 将 \dvi{} 转换为 PDF，是 (前面提到过的)
pdf\TeX\ 的一套替换方案。

\item [xdvi] X Window 系统下的 \dvi{} 阅读器。

\item [dviconcat, dviselect] 从 \dvi{} 文件中剪切和粘贴页面。

\item [psselect, psnup, \ldots] \PS{} 实用程序。

\item [pdfjam, pdfjoin, \ldots] PDF 实用程序。

\item [context, mtxrun] Con\TeX{}t 和 PDF 处理工具。

\item [htlatex, \ldots] \cmdname{tex4ht}: \AllTeX{} 到 HTML (还有 XML
以及 DocX等其他格式) 的转换器。

\end{cmddescription}

\htmlanchor{installation}
\section{安装}
\label{sec:install}

\subsection{启动安装程序}
\label{sec:inst-start}

首先请找来一张 \TK{} 的 \DVD{}，或者下载 \TL{} 的网络安装程序。参见
\url{https://tug.org/texlive/acquire.html} 以了解更多关于获得这个软件的信息和方法。

\begin{description}
\item [网络安装程序，.zip 或 .tar.gz 格式: ] 从 \CTAN 的 \dirname{systems/texlive/tlnet}
下载压缩包; 链接 \url{http://mirror.ctan.org/systems/texlive/tlnet} 应该
能重定位到一个附近的、保持更新的镜像。你可以下载同时支持 Unix 和
Windows 的 \filename{install-tl.zip} 或者小得多、但只支持 Unix 的
\filename{install-unx.tar.gz}。解压后，\filename{install-tl} 和
\filename{install-tl-windows.bat} 就会出现在 \dirname{install-tl} 子目录中。

\item[网络安装程序，Windows .exe:] 和上述一样从 \CTAN{} 下载，然后双击。它会作为
第一阶段的安装程序和解压工具启动; 见图~\ref{fig:nsis}。它提供了两个选项: 
``Install'' 和 ``Unpack only''。

\item [\TeX{} Collection \DVD:] 打开 \DVD\ 的 \dirname{texlive} 子目录。
在 Windows 下，安装程序通常在插入 \DVD 后就自动启动了。要获得 \DVD 的
话，可以加入一个 \TeX\ 用户组织 (非常推荐这么做，\url{https://tug.org/usergroups.html})
或是单独购买 (\url{https://tug.org/store})。又或者是自己从 CTAN 下载 \ISO\ 镜像刻录 \DVD。
在从 \DVD\ 或者 \ISO{} 安装后，如果还希望从 Internet 获得持续的更新，请看第~\ref{sec:dvd-install-net-updates}~节。

\end{description}

\begin{figure}[tb]
  \centering
  \def\figdesc{Windows \code{.exe} 安装程序的第一阶段}
  \tlpng{../texlive-common/nsis_installer}{.6\linewidth}{\figdesc}
  \caption{\figdesc. 点击 Install 选项将出现如图~\ref{fig:basic-w32} 所示的窗口.}\label{fig:nsis}
\end{figure}

无论安装程序的来源如何，所运行的都是相同的安装程序。
两者最显著的区别在于，使用网络安装程序时，最终得到的是当前可用的软件包。
这与 DVD 和 ISO 镜像不同，后者在主要公开发布版本之间不会更新。

如果你需要通过代理服务器下载，使用 \filename{~/.wgetrc}
文件或设置环境变量来配置 Wget 的代理设置
(\url{https://www.gnu.org/software/wget/manual/html_node/Proxies.html}),
或者等效地设置你所使用的下载工具。如果你是从 \DVD\ 或者 \ISO\ 镜像来安装就
没有关系了。

下一小节将更详细地介绍安装程序的启动。

\subsubsection{Unix}

下面的内容中，\texttt{>} 表示命令提示符; 用户输入显示成 \Ucom{\texttt{bold}} 的样子。
\filename{install-tl} 是一个 Perl 脚本。在 Unix 兼容的系统下最简单
的启动它的方法是这样的: 
\begin{alltt}
> \Ucom{perl /path/to/installer/install-tl}
\end{alltt}
(或者你可以直接运行 \Ucom{/path/to/installer/install-tl} 一旦它有可执行属性，
或者先 \texttt{cd} 到这个目录中，等等; 
我们不会把所有这些执行方法列出来。)
你可能需要扩大终端窗口才能在一屏内显示完整的文本安装程序界面
(图~\ref{fig:text-main})。

要在 \GUI\ 模式下安装 (见图~\ref{fig:advanced-lnx})，你需要安装 Tcl/Tk。
安装后你可以运行: 
\begin{alltt}
> \Ucom{perl install-tl -gui}
\end{alltt}

原有的 \code{-wizard} 和 \code{-perltk}/\code{-expert} 选项现在做着和 \code{-gui} 选项同样的事。
要列出所有这些选项: 
\begin{alltt}
> \Ucom{perl install-tl -help}
\end{alltt}

\textbf{关于 Unix 权限: } \TL{} 安装程序将遵照你安装时的 \code{umask} 设置。
因此，如果你希望你的安装能被除你之外的其他用户使用，
就必须保证你设置的权限足够，比如 \code{umask 002}。更多关于
\code{umask} 的信息请参见你自己系统的文档。

\textbf{关于 Cygwin 的特殊考虑: } 和其他 Unix 兼容系统不同，Cygwin
默认并没有包含一切运行 \TL{} 安装程序所必须的程序，见第~\ref{sec:cygwin}~节。

\subsubsection{\macOS{}}
\label{sec:macosx}

如第~\ref{sec:tl-coll-dists}~节提到的，我们给 \macOS{} 准备了一套独立的
发行版，叫做 Mac\TeX\ (\url{https://tug.org/mactex})。我们推荐在 \macOS{}
使用原生的 Mac\TeX\ 安装程序，而不是 \TL，因为原生的安装程序做了一些
针对 Mac 的调整，尤其是方便在 \macOS{} 下的多个 \TL\ 发行版之间切换，
这使用了被称为 \TeX{}Dist 的数据结构。

Mac\TeX\ 严格依赖 \TL 构建，所以主 \TeX\ 树和二进制文件也是完全一致的。不过
它添加了一些用来存放 Mac 专有文档和程序的目录。

\subsubsection{Windows}\label{sec:wininst}

如果你使用的是下载了 zip 并解压后的目录，又或者 \DVD 安装程序无法自动启动了，请
双击 \filename{install-tl-windows.bat}。

你也可以从命令行提示符下启动安装程序。下面 用 \texttt{>} 表示命令提示符; 
用户输入显示成 \Ucom{\texttt{bold}} 的样子。如果你正在安装程序目录下，
只需要运行: 
\begin{alltt}
> \Ucom{install-tl-windows}
\end{alltt}

或者你也可以通过绝对路径来运行，比如: 
\begin{alltt}
> \Ucom{D:\bs{}texlive\bs{}install-tl-windows}
\end{alltt}
这是对 \TK\ \DVD 而言的，假定 \dirname{D:} 是光驱。图~\ref{fig:basic-w32}
展示了 \GUI\ 安装程序的初始基本界面，它是 Windows 下的默认形式。

要在文本模式下安装，使用: 
\begin{alltt}
> \Ucom{install-tl-windows -no-gui}
\end{alltt}

要列出所有可用的选项: 
\begin{alltt}
> \Ucom{install-tl-windows -help}
\end{alltt}

如果同一目录中还包含 \texttt{install-tl-windows.exe}，
则在以上命令中添加 \texttt{.bat} 扩展名。
这通常不会发生，除非你已经在本地获取了 \dirname{tlnet} 目录的镜像。

在 \TL\ 安装路径中，应避免使用非 ASCII 字符。
这尤其是在 Windows 11 下可能会出现的问题，
因为它的用户被强制使用微软网络帐户。
请参阅 \url{https://tug.org/texlive/windows.html\#nonascii} 了解一些解决方法。

\begin{figure}[tb]
\begin{boxedverbatim}
Installing TeX Live 2024 from: ...
Platform: x86_64-linux => 'GNU/Linux on x86_64'
Distribution: inst (compressed)
Directory for temporary files: /tmp
...
 Detected platform: GNU/Linux on Intel x86_64
 
 <B> binary platforms: 1 out of 16

 <S> set installation scheme: scheme-full

 <C> customizing installation collections
     40 collections out of 41, disk space required: 8296 MB (free: 138718 MB)

 <D> directories:
   TEXDIR (the main TeX directory):
     /usr/local/texlive/2024
   ...

 <O> options:
   [ ] use letter size instead of A4 by default
   ...
 
 <V> set up for portable installation

Actions:
 <I> start installation to hard disk
 <P> save installation profile to 'texlive.profile' and exit
 <H> help
 <Q> quit
\end{boxedverbatim}
\vskip-.5\baselineskip
\caption{文本安装程序主界面 (\GNU/Linux)}\label{fig:text-main}
\end{figure}

\begin{figure}[tb]
\tlpng{../texlive-common/basic-w32}{.6\linewidth}{基本安装界面 (Windows)}
\caption{基本安装界面 (Windows); 
  Advanced 按钮会提供类似图~\ref{fig:advanced-lnx} 的界面}\label{fig:basic-w32}
\end{figure}

\begin{figure}[tb]
\tlpng{../texlive-common/advanced-lnx}{\linewidth}{Advanced installer screen (\GNU/Linux)}
\caption{高级 \GUI{} 安装界面
  (\GNU/Linux)}\label{fig:advanced-lnx}
\end{figure}
  

\htmlanchor{cygwin}
\subsubsection{Cygwin}
\label{sec:cygwin}

在开始安装之前，如果你还没装过\filename{perl} 和 \filename{wget} 软件包，
请先使用 Cygwin 的 \filename{setup.exe} 程序安装它们。
此外还推荐安装下列软件包: 
\begin{itemize*}
\item \filename{fontconfig} [\XeTeX\ 和 Lua\TeX\ 需要]
\item \filename{ghostscript} [各种实用工具需要]
\item \filename{libXaw7} [\code{xdvi} 需要]
\item \filename{ncurses} [给安装程序提供 \code{clear} 命令]
\end{itemize*}

\subsubsection{文本化安装程序}

图~\ref{fig:text-main} 展示了 Unix 下文本模式的主界面，这是 Unix
下安装程序的默认界面。

这只是一个命令行安装程序; 完全没有光标支持。
例如，你无法在复选框或输入字段之间用 Tab 上下切换。
你只能在提示符下输入特定的字符
(注意大小写) 然后按下 Enter，
之后整个终端窗口就会把新的内容刷新出来。

文本化安装程序之所以这么简陋是因为它要尽可能支持最多的平台，就算
只有一个 Perl 的系统也能运行它。

\subsubsection{图形化安装程序}
\label{sec:graphical-inst}

默认的图形化安装程序的初始界面很简单，只有几个选项; 见图~\ref{fig:basic-w32}。
它可以这样启动: 
\begin{alltt}
> \Ucom{install-tl -gui}
\end{alltt}
按下 Advanced 按钮可以获得文本化安装程序的大部分选项; 见图~\ref{fig:advanced-lnx}。

\texttt{perltk}/\texttt{expert} 和 \texttt{wizard} GUI 选项现在调用常规的图形化安装程序。

\subsection{执行安装程序}
\label{sec:runinstall}

安装程序应该不需要文档就足够明确，但下面还是对这些选项和子菜单作一点说明。

\subsubsection{二进制系统菜单 (只对 Unix 适用)}
\label{sec:binary}

\begin{figure}[tb]
\begin{boxedverbatim}
Available platforms:
===============================================================================
   a [ ] Cygwin on x86_64 (x86_64-cygwin)
   b [ ] MacOSX current (10.14-) on ARM/x86_64 (universal-darwin)
   c [ ] MacOSX legacy (10.6-) on x86_64 (x86_64-darwinlegacy)
   d [ ] FreeBSD on x86_64 (amd64-freebsd)
   e [ ] FreeBSD on Intel x86 (i386-freebsd)
   f [ ] GNU/Linux on ARM64 (aarch64-linux)
   g [ ] GNU/Linux on RPi(32-bit) and ARMv7 (armhf-linux)
   h [ ] GNU/Linux on Intel x86 (i386-linux)
   i [X] GNU/Linux on x86_64 (x86_64-linux)
   j [ ] GNU/Linux on x86_64 with musl (x86_64-linuxmusl)
   k [ ] NetBSD on x86_64 (amd64-netbsd)
   l [ ] NetBSD on Intel x86 (i386-netbsd)
   m [ ] Solaris on Intel x86 (i386-solaris)
   o [ ] Solaris on x86_64 (x86_64-solaris)
   p [ ] Windows (64-bit) (windows)
\end{boxedverbatim}
\vskip-.5\baselineskip
\caption{Binaries (二进制程序) 菜单}\label{fig:bin-text}
\end{figure}

图~\ref{fig:bin-text} 展示了文本模式下的 binaries (二进制程序)
菜单。默认情况下只会安装你当前平台下的二进制程序。在这个菜单下，
你也可以选择安装其他平台的二进制程序。
如果你要将 \TeX\ 树共享在异构网络上，又或者将使用双启动的系统，
这会比较有用。

\subsubsection{选择要安装的组件}
\label{sec:components}

\begin{figure}[tbh]
\begin{boxedverbatim}
Select scheme:
===============================================================================
 a [X] full scheme (everything)
 b [ ] medium scheme (small + more packages and languages)
 c [ ] small scheme (basic + xetex, metapost, a few languages)
 d [ ] basic scheme (plain and latex)
 e [ ] minimal scheme (plain only)
 f [ ] infrastructure-only scheme (no TeX at all)
 g [ ] book publishing scheme (core LaTeX and add-ons)
 h [ ] ConTeXt scheme
 i [ ] GUST TeX Live scheme
 j [ ] teTeX scheme (more than medium, but nowhere near full)
 k [ ] custom selection of collections
\end{boxedverbatim}
\vskip-.5\baselineskip
\caption{Scheme (安装方案) 菜单}\label{fig:scheme-text}
\end{figure}

图~\ref{fig:scheme-text} 展示了 \TL\ 的安装方案菜单; 从这里你选择的是
一套``安装方案''，也就是对软件包集合的一个统一划分。默认的 \optname{full}
方案会把所有可用的都装上。这是推荐方案，不过你也可以选择其他的方案: 
\optname{basic} 方案只获得 plain 和 \LaTeX{}，
\optname{small} 方案会获得比它稍微多一点的程序 (相当于 Mac\TeX 中的 Basic\TeX\ 安装)，
\optname{minimal} 方案可供测试选用，
而 \optname{medium} 或 \optname{teTeX} 方案则介乎其间。
还有许多特殊或者专门针对特定国家的方案。

\begin{figure}[tb]
\def\figdesc{Collections (集合) 菜单}
\centering \tlpng{../texlive-common/stdcoll}{.7\linewidth}{\figdesc}
\caption{\figdesc}\label{fig:collections-gui}
\end{figure}

你可以使用 `collections' 菜单来详细选择安装方案。
(图~\ref{fig:collections-gui} 显示了 \GUI 模式下修改的情况。)

Collection (安装集合) 是比 scheme (方案) 要更细的一层——实际上一个
方案包含了多个安装集合，而一个安装集合又包含了至少一个软件包，然后每个软件包
(\TL 中最小的组织单位) 则包含了实际的 \TeX\ 宏文件、字体文件等等。

如果你觉得 collection 菜单对安装控制还不够细，可以在安装后使用
\TeX\ Live Manager (\prog{tlmgr}) 程序 (参见第~\ref{sec:tlmgr}~节)，
它能在软件包一层控制安装。

\subsubsection{目录}
\label{sec:directories}

缺省的目录布局在第~\ref{sec:texmftrees}~节有过叙述，见
第~\pageref{sec:texmftrees}~页。在 Unix 下默认的安装目录是
\dirname{/usr/local/texlive/2024} 而 Windows 下是
|C:\texlive\2024|。这样的安排允许你有多个并行的 \TL\ 安装存在，
例如每个版本都有一个 (通常按年份，如此处)，
你可以通过修改搜索路径来在它们中间切换。

这个安装路径可以通过设置安装程序中的 \dirname{TEXDIR} 来修改。这个选项和其他选项的 GUI 界面
如图~\ref{fig:advanced-lnx} 所示。最常见的更改它的原因要么是该分区没有足够的空间 (完
整的 \TL\ 安装需要好几 GB 的空间)，要么是没有默认位置的写权限 (虽然要安装
\TL\ 不需要是管理员或者 root 用户，但你至少得对安装的目标目录有写权限)。

在 Windows 下，通常你不需要是管理员就能创建 |C:\texlive\2024|
(或者，更一般而言，是 |%SystemDrive%\texlive\2024|)。

你也可以通过在运行安装程序以前修改特定的环境变量来改变安装目录 (最常见的是
\envname{TEXLIVE\_INSTALL\_PREFIX} 或者 \envname{TEXLIVE\_INSTALL\_TEXDIR}); 
参见 |install-tl --help| 调出的文档 (\url{https://tug.org/texlive/doc/install-tl.html} 有
在线版本) 以了解完整的列表和更多的信息。

一个合理的选择是你自己主目录下的一个子目录，尤其在只有你一个人
使用的时候。使用 `|~|' 来表示主目录，比如 `|~/texlive/2024|'。

我们建议在目录名称中保留年份，这样可以让你保留多个不同版本的 \TL{}。
(你可能还希望通过符号链接保留一个与版本无关的名称，
如 \dirname{/usr/local/texlive-cur}，
以便在测试新版本后重新指向该名称。)

在安装程序中修改 \dirname{TEXDIR} 还会同时修改
\dirname{TEXMFLOCAL}, \dirname{TEXMFSYSVAR} 和
\dirname{TEXMFSYSCONFIG}。

\dirname{TEXMFHOME} 是被推荐的用来存放个人宏文件和软件包的目录。
其缺省值是 |~/texmf| (Mac 下是 |~/Library/texmf|)。与 \dirname{TEXDIR}
不同，其中包含的 |~| 会被不加转换地写进配置文件，因为它能在 \TeX 系统运行时
自动被替换为每个用户自己的主目录。在 Unix 它会被展开为
\dirname{$HOME}，而 Windows 下展开为 \verb|%USERPROFILE%|。
多说一句: \envname{TEXMFHOME} 和所有的目录树一样，都必须按照
\TDS\ 组织，否则文件可能会找不到。

\dirname{TEXMFVAR} 是用来给每个用户存储大多数运行时缓存数据
的。\dirname{TEXMFCACHE} 则为 Lua\LaTeX\ 和 \ConTeXt\ MkIV 存储缓存
(见第 \pageref{sec:context-mkiv} 页的 \ref{sec:context-mkiv} 节); 它的缺省值是
\dirname{TEXMFSYSVAR}，或者 (如果那不可写) \dirname{TEXMFVAR}。

\subsubsection{选项}
\label{sec:options}

\begin{figure}[tbh]
\begin{boxedverbatim}
Options customization:
===============================================================================
 <P> use letter size instead of A4 by default: [ ]
 <E> execution of restricted list of programs: [X]
 <F> create all format files:                  [X]
 <D> install font/macro doc tree:              [X]
 <S> install font/macro source tree:           [X]
 <L> create symlinks in standard directories:  [ ]
            binaries to:
            manpages to:
                info to:
 <Y> after install, set CTAN as source for package updates: [X]
\end{boxedverbatim}
\vskip-.5\baselineskip
\caption{Options 菜单 (Unix)}\label{fig:options-text}
\end{figure}

图~\ref{fig:options-text} 显示了文本模式的选项菜单。关于这个菜单的
每个选项: 

\begin{description}
\item[use letter size instead of A4 by default:] 缺省的纸张大小选项。
当然，如果有需要，每份文档都可以并且应该单独设定一个纸张大小。

\item[execution of restricted list of programs:] 在 \TL\ 2010 中，
默认允许执行一些外部程序。这 (很少的一部分) 允许的程序列表在
\filename{texmf.cnf} 中定义。参见 2010 版新闻 (第~\ref{sec:2010news} 节)
以了解更多信息。

\item[create all format files:] 我们建议保持这个选项的选定状态，
以避免在动态创建格式时出现不必要的问题。
更多内容请参见 \prog{fmtutil} 文档。

\item[install font/macro \ldots\ tree:] 下载安装大部分宏包中的文档和源代码文
件。建议选择。

\item[create symlinks in standard directories:]
这个选项 (只对 Unix 有效的) 可以省下设定环境变量的步骤。如果
没有选择它，就必须把 \TL{} 的对应目录添加到 \envname{PATH},
\envname{MANPATH} 和 \envname{INFOPATH} 中。如果要创建符号链
接，你需要有这些目标目录的写权限。这个选项是为了在用户已知的
标准目录中创建符号链接设计的，比如 \dirname{/usr/local/bin},
这些目录并不包含任何 \TeX\ 文件。不要用这个选项来覆盖系统中
现有的文件，比如给它指定系统目录。最保险和推荐的做法还是不要
选择这个选项。

\item[after install, set CTAN as source for package updates:]
从 \DVD\ 或 \ISO\ 镜像安装时，这个选项
被缺省启用，因为通常你会希望在此后通过 \CTAN\ 安装一年内更新的软件
包。禁用它唯一的可能是你只安装了 \DVD\ 内容的一部分，并计划在以后
扩展安装。无论如何，安装程序时和安装后的更新的软件包仓库可
以根据需要分别设置，见第~\ref{sec:location}~节和
第~\ref{sec:dvd-install-net-updates}~节。
\end{description}
Windows 专有的选项，在高级的 GUI 界面中显示: 
\begin{description}
\item[adjust searchpath] 保证所有程序都可以在它们的
搜索路径中找到 \TL{} 程序目录。

\item[add menu shortcuts] 如果选择了，它会在开始菜单中创建一个 \TL{}
子菜单。除了 `TeX Live menu' 和 `No shortcuts' 之外，还有 `Launcher entry'
这个选项。这个选项在第 \ref{sec:sharedinstall} 节有详细叙述。

\item[File associations] 选项包括 `Only new' (创建文件关联，但不覆盖现有的关联),
`All' 和 `None'。

\item[install \TeX{}works front end]
\end{description}
如果所有的设置已经齐备，你就可以在文本界面中按下 `I'，或者 GUI 界面
中按下 `Install' 按钮来开始安装了。安装完成后，
你可以跳至第~\ref{sec:postinstall}~节来了解还需要做些什么工作。

\subsection{install-tl 命令行选项}
\label{sec:cmdline}

输入
\begin{alltt}
> \Ucom{install-tl -help}
\end{alltt}
可以列出所有的命令行参数。你既可以用 |-| 也可以用 |--| 来指定一个
参数。这里有些比较常见的: 

\begin{ttdescription}
\item[-gui] 尽可能用 \GUI{} 模式的安装程序。它需要 Tcl/Tk 版本 8.5 或更高。
在旧版 \macOS{}\ 上已经分发; 对于 Big Sur 及以后版本，
如果你没有选择用 Mac\TeX\ 来安装，你需要自己安装 Tcl/Tk。
Tcl/Tk 已经分发于 Windows 的 \TL{} 中。
原有的 \texttt{-gui=perltk} 和 \texttt{-gui=wizard} 仍然可以使用
但它们调用的是相同的 GUI 界面。
如果找不到 Tcl/Tk，安装程序就会在文本模式下出现。

\item[-no-gui] 强制使用文本模式安装程序。

\item[-lang {\sl LL}] 指定安装程序界面的语言，使用标准的 (通常是两个
两个字符) 语言代码。安装程序会尝试自己判断出合适的语言，
一旦失败或判断正确的语言无法使用，程序就会使用英语替代。
可以运行 \verb|install-tl --help| 获得
支持的语言列表。

\item[-portable] 为诸如 \USB{} 盘上便携使用安装。也可以在
文本安装程序中用 \code{V} 命令选择，或者 GUI 安装程序中选择，
参见第 \ref{sec:portable-tl} 节。

\item[-profile {\sl file}] 载入安装配置文件 \var{file} 以不需要
用户干预的方式完成安装。安装程序会在安装到的 \dirname{tlpkg}
子目录中创建一个叫 \filename{texlive.profile} 的文件。这个文件，
比方说，它可以用作参数，在不同的系统下完成完全一致的安装。
或者你也可以使用一个定制的配置文件，最简单的方法是从生成的配置文件开始，
修改其中的值，或者直接使用一个空文件，这将采用所有缺省的设置。

\item [-repository {\sl url-or-directory}] 指定作为来源的软件包仓库，
参见下文。

\htmlanchor{opt-in-place}
\item[-in-place] (仅为了完整性记录: 除非你知道自己在做什么，否则不要使用这个选项。)
如果你已经有一份用 rsync, svn, 或者其他方式安装的
\TL{} 副本 (参见 \url{https://tug.org/texlive/acquire-mirror.html}) 那么
这个选项会使用现有的副本，按原样使用，并只执行必要的安装后操作。
注意 \filename{tlpkg/texlive.tlpdb} 文件可能被覆盖，你需要自己备份它。
另外，包的移除必须手动完成。这个选项不能在安装程序界面中选择。
\end{ttdescription}

\subsubsection{\optname{-repository} 参数}
\label{sec:location}

默认的网络包仓库是由 \url{http://mirror.ctan.org} 自动选择
的 \CTAN{} 镜像。

如果你想要覆盖这个设置，
地址可以是以 \texttt{ftp:}、\texttt{http:}、\texttt{https:}、\texttt{file:/} 开头的 URL，
或者是一个普通的目录路径。(当给定一个 \texttt{http:}、\texttt{https:} 或 \texttt{ftp:} 地址时，
其末尾的 `\texttt{/}' 字符和结尾的 `\texttt{/tlpkg}' 组件都会被忽略。)

比如，你可以选择这样的一个 \CTAN\ 镜像，类似
\url{http://ctan.example.org/tex-archive/systems/texlive/tlnet/}，
当然你应该把 |ctan.example.org/tex-archive| 替换为具体镜像的
域名和特定的顶层 \CTAN\ 路径。
\CTAN\ 的镜像列表由 \url{https://ctan.org/mirrors} 维护。

如果给定的参数是本地的 (无论是路径还是 \texttt{file:/}
开头的 URL)，仓库路径下的 \dirname{archive} 子目录中的
压缩文件将被使用 (即使同样有未压缩的文件可用)。

\subsection{安装后的操作}
\label{sec:postinstall}

安装后可能需要一些额外的操作。

\subsubsection{Unix 下的环境变量}
\label{sec:env}

如果你选择了在标准路径下创建符号连接 (在第~\ref{sec:options}~节提到)，
那就不需要设置环境变量了。否则，在 Unix 系统中，你必须将自己使用的平台
下的二进制程序的目录加入搜索路径中。(在 Windows 下安装程序会负责这一步。)

每个支持的平台都在 \dirname{TEXDIR/bin} 下有自己的子目录。
图~\ref{fig:bin-text} 展示了这些子目录的列表和它们对应的平台。

另外，如果还希望 man 和 info 能够被系统工具找到，你还可以把文档的 man 和 Info 目录
添加至其对应的搜索路径中。在添加 \envname{PATH} 后，man 页面可以被自动
找到。

对于像 \prog{bash} 这样的 Bourne 兼容的 shell 而言，以 Intel x86 下的
GNU/Linux 和 \TL\ 默认的目录设置为例，需要修改的文件可能是 \filename{$HOME/.profile}
(或者其他由 \filename{.profile} 载入的文件)，要添加的内容应该类似
这样: 

\begin{sverbatim}
PATH=/usr/local/texlive/2024/bin/x86_64-linux:$PATH; export PATH
MANPATH=/usr/local/texlive/2024/texmf-dist/doc/man:$MANPATH; export MANPATH
INFOPATH=/usr/local/texlive/2024/texmf-dist/doc/info:$INFOPATH; export INFOPATH
\end{sverbatim}

对于 csh 或者 tcsh，需要修改的文件通常是 \filename{$HOME/.cshrc}，而
要添加的内容类似: 

\begin{sverbatim}
setenv PATH /usr/local/texlive/2024/bin/x86_64-linux:$PATH
setenv MANPATH /usr/local/texlive/2024/texmf-dist/doc/man:$MANPATH
setenv INFOPATH /usr/local/texlive/2024/texmf-dist/doc/info:$INFOPATH
\end{sverbatim}

如果你不是在 \code{x86\_64-linux} 平台，
请使用相应的平台名称; 
同样，如果你没有安装在默认目录中，请更改目录名称。
\TL\ 的安装程序在安装结束时会报告要使用的完整路径。

如果你已经在启动文件中设置了 \envname{PATH}，
你可以根据需要将 \TL\  目录合并到其中。

\subsubsection{环境变量的全局配置}
\label{sec:envglobal}

如果你想要全局地或者对于新添加到系统中的用户进行这些更改，
那你就得自己动手了; 
因为在系统中配置这些事情的方式和位置变动太大。

我们的建议是: 1)~你可能应该看看 \filename{/etc/manpath.config}
这个文件是否存在，如果有的话，添加下面这样的内容: 

\begin{sverbatim}
MANPATH_MAP /usr/local/texlive/2024/bin/x86_64-linux \
            /usr/local/texlive/2024/texmf-dist/doc/man
\end{sverbatim}

然后 2)~检查 \filename{/etc/environment} 是否定义了默认的搜索路径
和其他的默认环境变量。

在每个 (Unix) 二进制目录下，我们都会创建一个名为 \code{man} 的符号链接
关联 \dirname{texmf-dist/doc/man} 目录。
有些 \code{man} 程序，比如 \macOS{}\ 标准的 \code{man}， 
能够自动通过这个链接找到对应的手册页，这样就不必手工设置手册页路径了。

\subsubsection{\DVD\ 安装后的网络更新}
\label{sec:dvd-install-net-updates}

如果你从 \DVD\ 安装了 \TL\ 并希望从网络获取更新，需要在更新了搜索路径
(如上一节所述) \emph{之后}执行这个命令: 

\begin{alltt}
> \Ucom{tlmgr option repository https://mirror.ctan.org/systems/texlive/tlnet}
\end{alltt}

这告诉 \cmdname{tlmgr} 未来从就近的 \CTAN\ 镜像获取更新。
通过第~\ref{sec:options}~节介绍的选项，
从 \DVD{} 安装时会默认完成这一步。

如果自动镜像选择出现了问题，你可以从 \url{https://ctan.org/mirrors}
列表中自己指定一个 \CTAN\ 镜像。使用镜像的 \dirname{tlnet}
子目录的路径，如前所示。

\htmlanchor{xetexfontconfig}  % keep historical anchor working
\htmlanchor{sysfontconfig}
\subsubsection{\protect\XeTeX\protect\ 和 Lua\protect\TeX 的系统字体配置}
\label{sec:font-conf-sys}

\XeTeX\ 和 Lua\TeX\ 可以使用任何系统安装的字体，而不只是 \TeX\ 目录树
中的那些。
这些系统字体 (并不属于 \TL) 常通过给出字体名来访问，
例如 `\code{Liberation Serif}'，
虽然也可以使用系统文件名。

相关问题是将 \TL\ 发行版的字体作为系统字体可用，这将使它们能通过字体名称访问。

对于 Lua\TeX: 
通过字体名访问并不需要什么特别的处理。
对于 Lua\TeX\ 来说，
通过同时支持 \LaTeX\ 和 plain \TeX 的 \pkgname{luaotfload} 包，
\TL\ 中的所有字体，或是通过字体名，或是通过文件名，都同样可以访问。
有新的字体时，\pkgname{luaotfload} 包的字体名索引需要重新构建; 
当尝试加载尚未知晓的字体时，此过程会自动触发。

对于  \XeTeX: 
在 Windows 下，随 \TL\ 分发的字体会自动为 \XeTeX\ 所用
(通过运行 \cmdname{fc-cache} 程序，它在 Windows 作为 \TL\ 的一部分被提供)。
在 \macOS{}\ 下，你需要查阅其他文档。
对于除 \macOS 之外的 Unix 系统，步骤如下。

当 \pkgname{xetex} 安装后 (不管是初始安装还是后来安装的)，
都会在
\filename{TEXMFSYSVAR/fonts/conf/texlive-fontconfig.conf} 创建一个
必需的配置文件。
为了让 \TL\ 的字体作为系统字体一样被调用，
\begin{enumerate*}
\item 将 \filename{texlive-fontconfig.conf} 文件 (通常) 复制到
\dirname{/etc/fonts/conf.d/09-texlive.conf}。
\item 运行 \Ucom{fc-cache -fsv}。
\end{enumerate*}

如果你没有足够的权限执行上述操作，或者只想把 \TL{} 字体提供给仅一个用户，
那么你可以这么做: 
\begin{enumerate*}
\item 将 \filename{texlive-fontconfig.conf} 文件 (通常) 复制到
      \filename{~/.fonts.conf.d/09-texlive.conf}，其中 \filename{~} 是你的主目录。
\item 运行 \Ucom{fc-cache -fv}。
\end{enumerate*}

你可以运行 \code{fc-list} 来查看系统字体的名称。
命令 \code{fc-list : family style file spacing} (所有这些参数都是字面字符串) 通常会显示一些很有趣的信息。

\subsubsection{\protect\ConTeXt{} LMTX 和 MKIV}
\label{sec:context} % keeping both labels for backward compatibility
\label{sec:context-mkiv}

“旧”的 \ConTeXt{} (Mark IV 或 MkIV) 和“新的” \ConTeXt{} (LMTX or MkXL)
应该在 \TL{} 安装后能直接运行，而且，只要你一直用 \verb+tlmgr+ 来更新，
它不应该需要任何其他的处理。

\ConTeXt{} 不使用 kpathsea 库或系统的 \code{ls-R} 文件; 
相反，\ConTeXt{} 维护了一个针对所有已知目录的每个用户的文件名数据库。
运行 \code{mktexlsr} 不会直接更新这些数据库，
但是 \ConTeXt{} 将在下次运行时自动重新构建它们。
(\TL\ 特定的文件 \code{cont-sys.mkiv} 和 \code{cont-sys.mkxl} 实现了这一点。)

如果你想手动重新构建他们，
运行下面的一个或所有: 
\begin{sverbatim}
mtxrun --generate           # LMTX
mtxrun --luatex --generate  # MkIV
\end{sverbatim}
生成的文件会被保存在 \code{TEXMFCACHE} 目录下，它在 \TL\
的默认值是 \verb+TEXMFSYSVAR;TEXMFVAR+。

\ConTeXt\ 会读取 \verb+TEXMFCACHE+ 提到的所有路径，
并写入第一个可写的路径。在读取时，对于重复的缓存数据，
将以最后找到的匹配项为优先选择。

要了解更多信息，参见
\url{https://wiki.contextgarden.net/LMTX} 和 \url{https://wiki.contextgarden.net/Running_Mark_IV}。

\subsubsection{集成本地与个人宏文件}
\label{sec:local-personal-macros}

这在第~\ref{sec:texmftrees}~节已经顺带提到过了: \dirname{TEXMFLOCAL}
目录 (它的默认值是 \dirname{/usr/local/texlive/texmf-local} 或者
Windows 下的 \verb|%SystemDrive%\texlive\texmf-local|) 就是为了存储
面向整个系统的本地字体和宏文件的; 而 \dirname{TEXMFHOME} 目录 (其
默认值是 \dirname{$HOME/texmf} 或者 \verb|%USERPROFILE%\texmf|)，
则是用来存储个人的字体和宏文件的。这些目录旨在共享于各个版本之间，
并且其内容将由新的 \TL{} 版本自动识别。因此不应该把
\dirname{TEXMFLOCAL} 的定义改得和主 \TL{} 目录差别太大，否则新的版本出来
后你又得手动再修改。

对于这两个目录树而言，文件都应该放到合适的 \TeX\ 目录结构 (\TDS)
的子目录中，参见 \url{https://tug.org/tds} 或者
\filename{texmf-dist/web2c/texmf.cnf} 文件。比如一个 \LaTeX{} 文档类或者宏包应该
放在 \dirname{TEXMFLOCAL/tex/latex} 或者 \dirname{TEXMFHOME/tex/latex}
目录下，要不然就是它们的一个子目录下。

\dirname{TEXMFLOCAL} 目录需要一个保持更新的文件名数据库，否则新增
的文件无法被找到。你可以使用 \cmdname{mktexlsr} 命令来刷新它，
也可以点击 \TL\ Manager \GUI{} 的 Actions 选项卡中的
`Update filename database' 按钮来刷新它。

默认情况下，这些变量的每一个都定义为所示单独的目录。这不是一个硬性
规定。例如，如果你需要在某些大型宏包的不同版本之间轻松切换，你自己可以根据需要维护多
个目录树，这通过把 \dirname{TEXMFHOME} 设置为目录列表来实现，
记得用大括号包裹内容，且目录之间以逗号分隔: 

\begin{verbatim}
  TEXMFHOME = {/my/dir1,/mydir2,/a/third/dir}
\end{verbatim}

第~\ref{sec:brace-expansion}~节进一步介绍了括号展开。

\subsubsection{集成第三方字体}

不幸的是，对于 \TeX\ 和 pdf\TeX，这是一个非常混乱的问题。除非你愿意深入 \TeX{} 安装的细节，
否则请不要涉足这个领域。\TL\ 已经包含了很多字体，所以，如果你想，请先查查; 
链接 \url{https://tug.org/FontCatalogue} 里面展示了主要的 \TeX\ 发行版中包含的几乎所有文本字体，
这些字体按不同方式分类。

如果你确实想安装自己的字体，
访问 \url{https://tug.org/fonts/fontinstall.html} 查看我们尽力描述的安装程序。

另外，考虑使用 \XeTeX\ 或 Lua\TeX\ (见第~\ref{sec:tex-extensions}~节)，
这些工具允许您在 \TeX 中使用操作系统的字体并无需安装。
(但请注意，使用系统字体通常会使您的文档源文件在其他人的不同环境中无法使用。)

\subsection{测试安装是否成功}
\label{sec:test-install}

在完成 \TL{} 安装之后，自然你会希望试试看它是否正常工作，好让你在以后能够创建优
美的文档和字体。

你可能马上需要的是一个用来编辑文件的前端程序。\TL{} 只在 Windows 下安装了
\TeX{}works (\url{https://tug.org/texworks})，而 Mac\TeX\ 下则安装了 TeXShop
(\url{https://pages.uoregon.edu/koch/texshop})。在其他 Unix 系统下，则由你自己选择编
辑器。当然，存在很多选择，有些在下一小节列出了; 还可以参见
\url{https://tug.org/interest.html#editors}。任何纯文本编辑器都可以，并不需要专门为
\TeX{} 设计。

这个小节后面给出了一些测试系统是否正常工作的基本步骤。我们这里使用的是 Unix 命令，
在 \macOS{} 和 Windows 下，你更可能使用图形界面运行这些测试，不过其原理并无不
同。

\begin{enumerate}

\item 首先确认你可以执行 \cmdname{tex} 程序: 
\begin{alltt}
> \Ucom{tex -{}-version}
TeX 3.14159265 (TeX Live ...)
Copyright ... D.E. Knuth.
...
\end{alltt}
如果返回的结果是 `command not found' 而非版本和版权信息，或者显示了
旧版本的信息，很有可能是因为你没有把正确的 \dirname{bin} 子目录添加
到 \envname{PATH} 中。参见第~\pageref{sec:env}~页关于设置环境变量
的说明。

\item 处理一个基本的 \LaTeX{} 文件: 
\begin{alltt}
> \Ucom{pdflatex sample2e.tex}
This is pdfTeX 3.14...
...
Output written on sample2e.pdf (3 pages, 142120 bytes).
Transcript written on sample2e.log.
\end{alltt}
如果无法找到 \filename{sample2e.tex} 或其他什么文件，很可能是因为旧的环境变量
或配置文件影响了判断。我们建议你重置所有 \TeX 相关的环境变量然后重试。(你可以
让 \TeX{} 报告具体搜索的路径，以便仔细分析出错的原因。参见
第~\pageref{sec:debugging}~页的``调试操作''一节以了解更多信息。)

\item 即时预览结果: 
\begin{alltt}
> \Ucom{xpdf sample2e.pdf}
\end{alltt}
你应该可以看到在新窗口中出现了一篇介绍 \LaTeX{} 基础的有趣文档。
(如果你刚接触 \TeX\ 系统，还是值得一读的。) 

当然还有许多其他的 PDF 阅读器。
在 Unix 系统，
\cmdname{evince} 和 \cmdname{okular} 是常见的选择。
在 Windows 系统，
我们建议尝试 Sumatra PDF
(\url{https://www.sumatrapdfreader.org/free-pdf-reader.html})。
\TL{} 中并没有包含任何 PDF 阅读器，
因此，您必须单独安装您想要使用的任意一款。

\item 当然你任何可以生成 \TeX\ 原始的 \dvi{} 文件: 
\begin{alltt}
> \Ucom{latex sample2e.tex}
\end{alltt}

\item 并且在线预览 \dvi{}
\begin{alltt}
> \Ucom{xdvi sample2e.dvi}    # Unix
> \Ucom{dviout sample2e.dvi}  # Windows
\end{alltt}
\cmdname{xdvi} 需要运行在 X 窗口系统下才能工作; 
如果没有运行窗口环境或 \envname{DISPLAY} 环境变量设置错误，
都会得到 \samp{Can't open display} 这句错误信息。

\item 由 \dvi\ 创建 \PS{} 文件: 
\begin{alltt}
> \Ucom{dvips sample2e.dvi -o sample2e.ps}
\end{alltt}

\item 或由 \dvi{} 创建 PDF 文件，
这是一种使用 pdf\TeX\ (或 Xe\TeX\ 或 Lua\TeX) 的替代方案，
它有时候会很有用: 
\begin{alltt}
> \Ucom{dvipdfmx sample2e.dvi -o sample2e.pdf}
\end{alltt}

\item 除 \filename{sample2e.tex} 外可能会对你有用的其他标准测试文件: 

\begin{ttdescription}
\item [small2e.tex] 比 \filename{sample2e} 更为简单的文档，供你在遇到问题
时尝试减少输入的内容。
\item [testpage.tex] 测试你的打印机是否带有预设的偏移量。
\item [nfssfont.tex] 打印一份字体表格以供测试。
\item [testfont.tex] 用 plain \TeX{} 打印字体表格。
\item [story.tex] 最经典的 (plain) \TeX{} 测试文件。在执行
\samp{tex story.tex} 之后，你还要在 \code{*} 提示符下键入 \samp{\bs bye}。
\end{ttdescription}

\item 如果你安装了 \filename{xetex} 包，可以按如下步骤测试它能否访问系统字体: 
\begin{alltt}
> \Ucom{xetex opentype-info.tex}
This is XeTeX, Version 3.14\dots
...
Output written on opentype-info.pdf (1 page).
Transcript written on opentype-info.log.
\end{alltt}

如果你收到 ``Invalid fontname `Latin Modern Roman/ICU'\dots'' 这样
的错误信息，就说明需要配置系统才能找到 \TL\ 自带的字体。
参见第~\ref{sec:font-conf-sys}~节。

\end{enumerate}

\htmlanchor{uninstall}
\subsection{卸载 \TL}
\label{sec:uninstall}

要卸载 \TL\ (在成功安装后; 关于 Windows 的操作，请见最后): 

\begin{alltt}
\Ucom{tlmgr uninstall --all}
\end{alltt}

系统会请求确认，否则不会执行任何操作。
(如果没有使用 \code{-{}-all}，\code{uninstall} 操作将用于移除单个包。)

这不会移除用户特定的目录，具体如下 (也参见第~\ref{sec:texmftrees}~节): 

\begin{ttdescription}
\item [TEXMFCONFIG] 用于用户配置更改。如果你希望保留它们，请确保在删除之前知道如何重新创建它们。

\item [TEXMFVAR] 用于存储自动生成的缓存数据，例如本地格式文件。
除非你将其用于其他目的，否则删除它应该是安全的。

\item [TEXMFHOME] 只包含你自己安装的文件，通常是发行版中不提供的文件。
除非你完全停止使用 \TeX，或者想从头开始，否则你可能不希望删除此目录。

\end{ttdescription}

\noindent 您可以通过运行 \code{kpsewhich -var-value=\ttvar{var}} 来找到这些变量的目录路径。

此 \prog{tlmgr} 卸载操作也不会撤销安装后的操作，
如在你的 shell 初始化文件中修改的 \envname{PATH} 和系统对 \TL\ 中字体的访问
(见第~\ref{sec:postinstall}~节)。如果需要，您必须手动撤销这些操作。

在 Windows 上，卸载可以通过 \GUI 进行; 见第~\ref{sec:winfeatures}~节。

\subsection{其他可下载软件的链接}

如果你还是个 \TeX{} 新手，或者在编辑 \TeX{} 或 \LaTeX{} 文档时需要帮助，
请访问 \url{https://tug.org/begin.html} 寻找引导性的资源。

这里是一些你可能会考虑安装的其他工具的链接。
\begin{description}
\item[Ghostscript] \url{https://ghostscript.com/} 一个免费的 PostScript 和 PDF 解释器。
\item[Perl] \url{https://perl.org/} 与 CPAN 中的补充包，
    \url{https://cpan.org/}。
\item[ImageMagick] \url{https://imagemagick.org}, 用于图形处理和转换。
\item[NetPBM] \url{http://netpbm.sourceforge.net}, 同样用于图形。

\item[面向 \TeX\ 的编辑器] 有很广泛的选择，一般依用户个人的口味而定。这
     里按字典序列出了一些 (部分是 Windows 才有的)。
  \begin{itemize*}
  \item \cmdname{GNU Emacs} 在所有的主要平台上都可以使用; 参见
        \url{https://www.gnu.org/software/emacs}。
  \item \cmdname{AUC\TeX} 在 Emacs 下运行; 通过 Emacs 的包管理器 \cmdname{ELPA} 可以获得。
        源代码也可以通过 CTAN 获取。AUC\TeX\ 的主页是 \url{https://www.gnu.org/software/auctex}。
  \item \cmdname{SciTE} 在
        \url{https://www.scintilla.org/SciTE.html} 提供。
  \item \cmdname{Texmaker} 是自由软件，在
        \url{https://www.xm1math.net/texmaker} 提供。
  \item \cmdname{TeXstudio} 是 \cmdname{Texmaker} 的一个
        fork，引入了额外的功能; 在 \url{https://texstudio.org} 提供。
  \item \cmdname{TeXnicCenter} 是自由软件，在
        \url{https://www.texniccenter.org} 提供。
  \item \cmdname{TeXworks} 是自由软件，在 \url{https://tug.org/texworks} 提供，也
        作为 \TL{} 的一部分只在 Windows 下被安装。
  \item \cmdname{Vim} 是自由软件，在
        \url{https://www.vim.org} 提供。
  \item \cmdname{WinEdt} 是共享软件，在
        \url{https://tug.org/winedt} 或 \url{https://www.winedt.com} 提供。
  \item \cmdname{WinShell} 在 \url{https://www.winshell.de} 提供。
  \end{itemize*}
\end{description}
关于这类软件包和程序，\url{https://tug.org/interest.html} 有一份更长的列表。

\section{特殊安装}

前面的章节描述了基本的安装过程。这里我们介绍一些特殊的情形。

\htmlanchor{tlsharedinstall}
\subsection{用户共享 (或跨机器) 安装}
\label{sec:sharedinstall}

\TL{} 的设计可以使它在同一个网络中的不同的系统间共享。在标准的
目录结构下，不需要配置固定的绝对路径: \TL{} 程
序所需要的文件都能通过在这些程序自身的相对路径找到。你可以在
\filename{$TEXMFDIST/web2c/texmf.cnf} 配置文件中看到实际的处理，
它包含了类似下面的内容: 
\begin{verbatim}
TEXMFROOT = $SELFAUTOPARENT
...
TEXMFDIST = $TEXMFROOT/texmf-dist
...
TEXMFLOCAL = $SELFAUTOGRANDPARENT/../texmf-local
\end{verbatim}
这就意味着，其它的系统或用户只需要把 \TL{} 的可执行文件的位置添加到其
系统的搜索路径中就可以使用了。

同理，你也可以先把 \TL{} 安装在本地，然后再把整个安装目录转移到网络上。

至于 Windows，\TL{} 包含了一个叫 \filename{tlaunch} 的启动程序。它的主
窗口的菜单和按钮包括许多 \TeX\ 相关功能的程序和文档，还可以通过 \code{ini}
定制。首次使用时，它会进行一些 Windows 专有的后安装设置，比如给当前用户
修改搜索路径并创建文件关联。因此，在局域网络中可以访问到 \TL{} 的工作站，
只需要启动器的快捷菜单就够了。参见 \code{tlaunch} 手册 (\code{texdoc tlaunch},
或 \url{https://ctan.org/pkg/tlaunch})。

\htmlanchor{tlportable}
\subsection{便携 (\USB{}) 安装}
\label{sec:portable-tl}

\code{-portable} 安装程序选项 (或者文本安装程序的 \code{V} 命令，
或对应的 \GUI{} 选项) 创建的是一套在一个独立路径下完全自包含的 \TL{}
安装，而跳过系统集成。你可以在 \USB{} 盘上创建这样的安装，或者在安装
后复制到 \USB{} 盘上。

从技术上讲，
通过将 \envname{TEXMFHOME}、\envname{TEXMFVAR} 和 \envname{TEXMFCONFIG} 的默认值分别设置为与
\envname{TEXMFLOCAL}、\envname{TEXMFSYSVAR} 和 \envname{TEXMFSYSCONFIG} 相同，
使得便携式安装成为自包含的; 因此，不会创建针对用户的配置和缓存。

要使用这样的便携安装来运行 \TeX{}，你必须将对应的二进制目录加入终端
的搜索路径，如往常一样。

在 Windows 下，你可以双击安装根目录下的 \filename{tl-tray-menu}
来创建一个临时的启动栏菜单，以选择执行一些常见任务，如这个截图所示: 

\medskip
\tlpng{../texlive-common/tray-menu}{4cm}{Windows 托盘菜单}
\smallskip

\noindent `More\ldots' 项目解释了如何定制这个菜单。

\htmlanchor{tlmgr}
\section{\cmdname{tlmgr}: 管理你的安装}
\label{sec:tlmgr}


\begin{figure}[tb]
\def\figdesc{\prog{tlshell} \GUI, 显示 Actions 菜单 (\GNU/Linux)}
\tlpng{../texlive-common/tlshell-linux}{\linewidth}{\figdesc}
\caption{\figdesc}
\label{fig:tlshell}
\end{figure}

\begin{figure}[tb]
\def\figdesc{\prog{tlmgr} 的 \prog{tlcockpit} \GUI{}}
\tlpng{../texlive-common/tlcockpit-packages}{.8\linewidth}{\figdesc}
\caption{\figdesc}
\label{fig:tlcockpit}
\end{figure}

\begin{figure}[tb]
\def\figdesc{旧有的 \prog{tlmgr} \GUI\ 模式: 按下 `Load' 后的主窗口}
\tlpng{../texlive-common/tlmgr-gui}{\linewidth}{\figdesc}
\caption{\figdesc}
\label{fig:tlmgr-gui}
\end{figure}

\TL{} 包含一个叫 \prog{tlmgr} 的程序，它可以用来管理安装后的
系统。它的功能包括: 

\begin{itemize*}
\item 安装、更新、备份、还原和卸载各个软件包，可选择考虑依赖关系; 
\item 查找和列出软件包以及它们的描述; 
\item 列出、添加和删除不同平台的可执行文件; 
\item 改变安装选项，比如纸张大小和源文件位置 (参见第~\ref{sec:location}~节)。
\end{itemize*}

\prog{tlmgr} 的功能已经完全覆盖了 \prog{texconfig} 原来的功能。考虑到有人已经习
惯了原有的界面，我们仍然发行和维护 \prog{texconfig}，现在但我们建议使用
\prog{tlmgr}。

\subsection{\cmdname{tlmgr} 的 \GUI{} 界面}

\TL{} 包含多个 \prog{tlmgr} 的 \GUI{} 前端。
其中两个值得注意的: 图~\ref{fig:tlshell} 展示了
\cmdname{tlshell}，它是用 Tcl/Tk 编写的，在 Windows 开箱即用。
图~\ref{fig:tlcockpit} 展示了 \prog{tlcockpit}，
它需要 Java 版本~8 或者更高以及 JavaFX。这两个都是独立的安装包。

\prog{tlmgr} 还有一个原生的 \GUI{} 模式 (见图~\ref{fig:tlmgr-gui})，
启动它可以用: 
\begin{alltt}
> \Ucom{tlmgr -gui}
\end{alltt}
但是 \GUI\ 扩展需要 Perl/Tk，而这个模块已经不再包含在 \TL\ 的 Windows Perl 分发
中了。

\subsection{\cmdname{tlmgr} 命令行使用示例}

在初始安装之后，你可以用下面的命令更新至最新版本: 
\begin{alltt}
> \Ucom{tlmgr update -all}
\end{alltt}
如果这太激进了一点，先尝试: 
\begin{alltt}
> \Ucom{tlmgr update -all -dry-run}
\end{alltt}
或 (产生更少输出): 
\begin{alltt}
> \Ucom{tlmgr update -list}
\end{alltt}

下面这个更复杂一点的例子从本地目录添加了一个新的软件包集合，用于 \XeTeX\ 引擎: 

\begin{alltt}
> \Ucom{tlmgr -repository /local/mirror/tlnet install collection-xetex}
\end{alltt}
它会产生下面的输出 (节略部分): 
\begin{fverbatim}
install: collection-xetex
install: arabxetex
...
install: xetex
install: xetexconfig
install: xetex.i386-linux
running post install action for xetex
install: xetex-def
...
running mktexlsr
mktexlsr: Updating /usr/local/texlive/2024/texmf-dist/ls-R...
...
running fmtutil-sys --missing
...
Transcript written on xelatex.log.
fmtutil: /usr/local/texlive/2024/texmf-var/web2c/xetex/xelatex.fmt installed.
\end{fverbatim}

如你所见，\prog{tlmgr} 会安装所有依赖的包，也会处理所有包括刷新文件名
数据库和重新生成格式文件在内的所有必要的后安装工作。上面给 \XeTeX{}
生成了新的格式文件。

要描述一个包 (或者集合、安装方案):
\begin{alltt}
> \Ucom{tlmgr show collection-latexextra}
\end{alltt}
会输出这样的内容: 
\begin{fverbatim}
package:    collection-latexextra
category:   Collection
shortdesc:  LaTeX supplementary packages
longdesc:   A very large collection of add-on packages for LaTeX.
installed:  Yes
revision:   46963
sizes:      657941k
\end{fverbatim}

最后也是最重要的，查阅 \url{https://tug.org/texlive/tlmgr.html}
这里的完整文档，或者: 
\begin{alltt}
> \Ucom{tlmgr -help}
\end{alltt}

\section{有关 Windows 平台的说明}
\label{sec:windows}

\subsection{针对 Windows 的特征}
\label{sec:winfeatures}

在 Windows 下，安装程序执行了一些额外的操作: 
\begin{description}
\item[菜单与快捷方式。] 在开始菜单上加入了新的 `\TL{}' 程序菜单，主要是一些
\GUI{} 程序, 如 \prog{tlshell} (\prog{tlmgr} 的 \GUI) 和 \prog{dviout},
以及一些文档的菜单。

\item[文件关联。] 如果启用，\prog{TeXworks} 和 \prog{Dviout} 会成为它们对应文件
类型的默认程序，或者在这些文件类型的“用...打开”右键菜单中出现。
然而，优先级更高的“用户选择”文件关联 (只能通过交互方式指定) 可能会造成干扰。

\item[PostScript 支持。] 对于 PostScript 文件，
一个 PSviewer 文件类型现在会将 PostScript 转换为临时 PDF，
然后由默认的 PDF 查看器显示。
各种位图格式在其“打开方式”右键菜单中会有一个 \cmdname{bitmap2eps} 条目，
用于转换为 EPS，
让 \cmdname{sam2p} 或 \cmdname{bmeps} 执行实际工作。

\item[自动路径调整。] 不需要手动配置步骤。

\item[卸载程序。] 安装程序会为 \TL{} 创建一个条目，
要么在“添加/删除程序”中 (管理员安装)，
要么在 \TL{} 菜单中 (单用户安装)。

\item[写保护。] 对于管理员安装，
如果 \TL\ 安装在正常的 NTFS 格式化的不可移动磁盘上，
则 \TL\ 目录是写保护的。
\end{description}

另外，另一种方式可以参见 \filename{tlaunch}, 在第~\ref{sec:sharedinstall} 节有描述。

\subsection{Windows 上附加的软件}

为了使安装更加完整，\TL{} 需要支持那些 Windows 机器上不常见的软件包。
\TL{} 提供了以下缺失的部分。这些程序只在 \TL{} 的 Windows 版本中提供。

\begin{description}
\item[Perl、Tcl/Tk 和 Ghostscript。] 由于 Perl 和 Ghostscript 的重要性，
并且安装程序和 tlshell \GUI{} 是用 Tcl/Tk 编写的，
\TL{} 提供了这些程序的`隐藏'拷贝。需要这些软件支持的 \TL{} 程序知道它们的位置，
但它们不会通过环境变量和注册表设置来暴露所在的位置。它们不是完整的安装版 (除了 Ghostscript)，
也不会与任何 Perl、Tcl/Tk 或 Ghostscript 系统安装程序冲突。
请参阅第~\ref{sec:externalwndws}~节，
了解如何告知 \TL{} 使用您自己的外部安装来处理 \TL{} 内的贡献脚本。

\item[dviout。] 另外安装的还包括一款 DVI 预览程序 \prog{dviout}。
当你第一次使用 \cmdname{dviout} 预览文件时，因为没有安装屏幕显示字体，它
将生成字体。一段时间后，你所使用的大部分字体都将生成，随后，你将很少再看
到生成字体的窗口。你可以从 (强烈推荐的) 在线帮助中获得更加详细的信息。

\item[\TeX{}works.]  \TeX{}works 是一个集成了 PDF 阅读器的
  \TeX\ 编辑器。

\item[命令行工具。] 与常见的 \TL{} 二进制文件一起，还安装了一些常见的
Unix 命令行工具的 Windows 移植版本。
它们包括 \cmdname{gzip}、\cmdname{zip}、\cmdname{unzip} 以及 \cmdname{poppler} 套件中的工具
(如 \cmdname{pdfinfo}、\cmdname{pdffonts} 等)。

\item[fc-list、fc-cache 等。] 来自于 \pkgname{fontconfig} 库的这些工具有助于 \XeTeX{}
处理 Windows 的系统字体。你可以使用 \prog{fc-list} 来确定传递给经 \XeTeX
扩展后的 \cs{font} 命令的字体名称。如果需要，首先运行 \prog{fc-cache} 更新
字体信息。
\end{description}

\subsection{使用外部的 Perl、Tcl/Tk 和 Ghostscript 程序}
\label{sec:externalwndws}

通常，
\TL{} 会使用其内置的 Perl、Tcl/Tk 和 Ghostscript 来运行 \TL{} 内部的贡献脚本。
如果你希望使用自己的外部版本，
你可以在\emph{安装根目录}的 \file{texmf.cnf} 文件中进行配置。

对于 Perl，
你需要添加一行
\begin{verbatim}
TEXLIVE_WINDOWS_TRY_EXTERNAL_PERL = 1
\end{verbatim}
\TL{} (特别是 \file{bin/windows/runscript.tlu}) 会在搜索路径中查找 \file{perl.exe}，
除了属于 \TL{} 底层的脚本之外。
这是三者中最有可能有用的设置; 
尽管 \TL{} Perl 包含许多附加模块，
但它不能支持所有的第三方脚本。

同样地，
对于 Tcl/Tk，
你需要添加一行
\begin{verbatim}
TEXLIVE_WINDOWS_TRY_EXTERNAL_TCL = 1
\end{verbatim}
\TL{} 将会在搜索路径中查找 \file{tclkit.exe}、\file{wish.exe}、\file{wish85.exe}、\file{wish86.exe} 和 \file{wish87.exe}。

Ghostscript 的处理方式有所不同，
你需要指定命令行 Ghostscript 的文件名或完整路径: 
\begin{alltt}
TEXLIVE_WINDOWS_EXTERNAL_GS = \var{命令行 Ghostscript 的路径}
\end{alltt}
另一个不同点是，
\TL{} 附带的 Ghostscript 是完整的，
仅缺少文档和打印机驱动程序。
因此，你不太可能需要覆盖它。

另请参阅第~\ref{sec:configfiles}~节关于 \file{texmf.cnf} 的说明。


\subsection{User Profile 目录相当于主目录}
\label{sec:winhome}

Windows 下对应于 Unix 下的主目录的是 \verb|%USERPROFILE%|。
在 Windows Vista 和以后的系统下，它通常位于
\verb|C:\Documents and Settings\<username>|; 
在 Windows Vista 和之后的版本下是 \verb|C:\Users\<username>|。通常情况下，在
\filename{texmf.cnf} 文件和 \KPS{} 中，\verb|~| 在 Windows 和 Unix 下均可以
进行合适的展开。

\subsection{Windows 注册表}
\label{sec:registry}

在 Windows 中，
Unix 主目录的对应目录是 \verb|%USERPROFILE%| 目录。
在 Windows Vista 及更高版本中，
它是 \verb|C:\Users\<username>|。
在 \filename{texmf.cnf} 文件中，
以及在 \KPS{} 中的一般情况下，
\verb|~| 将在 Windows 和 Unix 上都能适当地展开。

\subsection{Windows 注册表}
\label{sec:registry}

Windows 将几乎所有的配置数据存储在其注册表中。
注册表包含一组层次结构组织的键，具有多个根键。
对于安装程序来说，
最重要的根键是 \path{HKEY_CURRENT_USER} 和 \path{HKEY_LOCAL_MACHINE}，
简称为 \path{HKCU} 和 \path{HKLM}。
注册表的 \path{HKCU} 部分位于用户的主目录中（参见第~\ref{sec:winhome}~节）。
\path{HKLM} 通常位于 Windows 目录的一个子目录中。

在某些情况下，
系统信息可以从环境变量中获取，
但对于其他信息，例如快捷方式的位置，则需要查询注册表。
永久设置环境变量也需要访问注册表。

\subsection{Windows 权限}
\label{sec:winpermissions}

在较新的 Windows 版本中，
普通用户与管理员是有区别的。
只有管理员能自由访问近乎整个操作系统。
我们努力使得 \TL{} 的安装不需要管理员权限。

如果安装程序以管理员权限启动，
会有选项允许给所有用户安装，
如果启用了这个选项，
就会给所有用户创建快捷方式，
并修改系统搜索路径。
否则，安装程序只为当前用户创建快捷方式，
并改变用户搜索路径。

无论管理员状态如何，
\TL{} 预设的默认根目录总是位于 \verb|%SystemDrive%| 下。
对于当前用户安装，程序总是要测试根目录是否可写。

如果用户不是管理员，并且 \TeX{} 已经存在搜索路径中，则可能会出现问题。
因为有效搜索路径是由系统路径后接用户路径组成，
新安装的 \TL{} 可能永远不会优先运行。
为了保险起见，安装程序为命令提示符创建快捷方式。
在这个快捷方式中，
新安装的 \TL{} 的可执行目录被预设于本地的搜索路径中。
当从这个快捷方式启动命令行任务时，
便可以使用新的 \TL{}。
如果安装了 \TeX{}works，
其快捷方式也将 \TL{} 加进了搜索路径中，
所以它应该不会出现路径问题。

你需要知道的是: 即使你以管理员身份登录系统，依旧要求你
提供管理员权限。实际上，是否以管理员身份登录并不是问题所在。相反，在你希望运行的
程序或快捷方式上单击右键，系统通常会给出“以管理员身份执行”这样的选择。

\subsection{增加 Windows 和 Cygwin 下的最大内存量}
\label{sec:cygwin-maxmem}

Windows 和 Cygwin (参见第~\ref{sec:cygwin}~节以了解 Cygwin 安装细节) 的
用户可能会在执行特定 \TL\ 程序时遇到内存不足的情况。例如 \prog{asy} 在
你尝试分配一个 25,000,000 个实数的数组时可能会内存不足，而 Lua\TeX\ 在
你尝试处理一个包含大量字体的文档时可能会内存不足。

对 Cygwin，你可以按照 Cygwin 用户指南
(\url{https://cygwin.com/cygwin-ug-net/setup-maxmem.html}) 中的办法
增加可用内存量。

对 Windows，你必须创建一个文件，例如命名为 \code{moremem.reg}，包含
如下内容: 

\begin{sverbatim}
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Cygwin]
"heap_chunk_in_mb"=dword:ffffff00
\end{sverbatim}

\noindent 然后以管理员身份执行命令 \code{regedit /s moremem.reg}。(如果
你只希望修改当前用户而不是整个系统的内存，改用 \code{HKEY\_CURRENT\_USER}。)

\section{Web2C 用户指南}

\Webc{} 是一整套 \TeX{} 相关程序的集合: \TeX{} 本身、\MF{}、\MP{}、\BibTeX{}，
等等。它是 \TL{} 的核心。\Webc{} 的主页及最新的手册等都在
\url{https://tug.org/web2c}。

我们简单的介绍一下它的历史: 最早它是由 Tomas Rokicki 在 1987 年实现的，他开发了第一套
将 \TeX{} 系统的代码转换为 C 语言代码的系统，基于的是 Unix 下 change files
的原理，change files 的
工作是 Howard Trickey 和 Pavel Curtis 完成的。Tim Morgan 后来成为了这套系统的维护
者，在这期间，软件的名称改为了 Web-to-C\@。在许多其他贡献者的帮助下，1990 年 Karl Berry
接手了这个工作，到 1997 年，他把这项工作交给了 Olaf Weber。Olaf Weber 在 2006 年又
把这项工作交还给了 Karl。

\Webc{} 系统可以在 Unix、Windows 系统、\macOS{} 和其他的一些操作系统下运行。
它使用的是 Knuth 用 \web{} 文学编程语言编写的 \TeX{} 和其他基本程序的原始代码，将其转换为 C
源码。用这种方法处理的核心的 \TeX{} 程序包括: 

\begin{cmddescription}
\item[bibtex]    维护参考文献。
\item[dvicopy]   展开 \dvi{} 中的虚拟字体 (virtual font) 引用。
\item[dvitomp]   将 \dvi{} 转换为 MPX (MetaPost 图片)。
\item[dvitype]   将 \dvi{} 转换为可读文本。
\item[gftodvi]   生成 Generic 格式字体的 proofsheet。
\item[gftopk]    将 Generic 格式字体转换为 packed 格式字体。
\item[gftype]    将 Generic 格式字体转换为可读文本。
\item[mf]        创建字体。
\item[mft]       以漂亮的方式排版输出 \MF{} 的代码。
\item[mpost]     创建技术性插图。
\item[patgen]    创建断字规则文件。
\item[pktogf]    将 Packed 格式字体转换为 generic 格式字体。
\item[pktype]    将 PK 格式转换为可读的文本。
\item[pltotf]    将纯文本的 property list 转换为 TFM 格式。
\item[pooltype]  显示 \web{} 的 pool 文件。
\item[tangle]    将 \web{} 转换为 Pascal 代码。
\item[tex]       排版。
\item[tftopl]    将 TFM 格式转换为纯文本的 property list 格式。
\item[vftovp]    将虚拟字体格式转换为 virtual property list 格式。
\item[vptovf]    将 virtual property list 格式转换为虚拟字体格式。
\item[weave]     将 \web{} 转换为 \TeX。
\end{cmddescription}

\noindent 这些程序的详细功能和调用语法都在其各自软件包的文档中有说明，在 \Webc{} 的文
档中也有相关介绍。不过，有些规则对所有这些程序都是通用的，了解这些规则有助于你更好的使用
\Webc{}。

所有的程序都接受这些 \GNU 标准的选项: 
\begin{ttdescription}
\item[-{}-help] 显示基本使用说明。
\item[-{}-version] 显示版本信息，然后退出。
\end{ttdescription}

而大部分都接受: 
\begin{ttdescription}
\item[-{}-verbose] 显示详细的执行过程。
\end{ttdescription}

所有的 \Webc{} 程序均使用 \KPS{} (\url{https://tug.org/kpathsea}) 路径搜索库来查找文件，
这套库结合环境变量和配置文件的
使用来优化 (庞大的) \TeX{} 文件的搜索。\Webc{} 可以在多于一套的目录树下执行查找，这可以方
便维护类似 \TeX{} 标准发行版和本地版本的扩展这样两套目录树。为了优化搜索的速度，每个目
录树的顶层目录下都有一个 \file{ls-R} 文件，这个文件里包含了所有此目录下文件的名称和对
应的相对路径。

\subsection{Kpathsea 路径搜索}
\label{sec:kpathsea}

我们首先介绍一下 \KPS{} 库的的通用路径搜索方式。

我们将目录名称称作\emph{路径元素}，而把用冒号或者分号分隔的路径元素列表称
作\emph{搜索路径}。搜索路径可能是许多种来源的组合，比如在 \samp{.:/dir} 路径下
搜索 \samp{my-file} 这个文件，\KPS{} 将逐个尝试路径中的每个元素: 首先是
\file{./my-file}，然后是 \file{/dir/my-file}，并返回找到的第一个结果 (或者
也可以返回所有的结果)。

为了符合所有操作系统下的习惯，\KPS{} 在非 Unix 系统下使用的路径分隔符可能不是冒号
(\samp{:}) 和斜杠 (\samp{/})。

在检查一个具体的路径元素 \var{p} 时，\KPS{} 首先检查是否有符合 \var{p} 的文件名
数据库 (见第~\pageref{sec:filename-database}~页的``文件名数据库'') 存在，也就是说，
是否有数据库正好对应着 \var{p} 的一个前缀。如果存在，就在数据库中寻找符合的路径后缀。

尽管最简单也最常见的路径元素是目录名称，\KPS{} 搜索的路径里还可以使用其他额外功能: 
多层默认值，环境变量名称、配置文件值、用户主目录，以及递归式子目录查找。所以我们把 \KPS{}
将搜索路径变换为一个或多个基本目录名的过程称为\emph{展开}路径元素的过程。展开的方式
按执行的顺序在后续小节里有叙述。

注意，如果搜索的文件给出了绝对路径或者明确的相对路径，即以 \samp{/} 或 \samp{./} 或
\samp{../} 起始，\KPS{} 将只检查该文件是否存在。

\ifSingleColumn
\else
\begin{figure*}
\verbatiminput{examples/ex5.tex}
\setlength{\abovecaptionskip}{0pt}
  \caption{一份示例性的配置文件的例子}
  \label{fig:config-sample}
\end{figure*}
\fi

\subsubsection{路径的来源}
\label{sec:path-sources}

搜索路径可能来自许多地方，\KPS{} 是按照下面的顺序查找的: 

\begin{enumerate}
\item
  用户设置的环境变量，例如 \envname{TEXINPUTS}\@。以 . 连接某个程序名称的环境变量
  有更高的优先级，比如若正在运行的程序是 \samp{latex}，那 \envname{TEXINPUTS.latex}
  将比 \envname{TEXINPUTS} 优先级更高。
\item
  专门针对某个程序的配置文件，比如 \cmdname{dvips} 的 \file{config.ps} 里出现
  \samp{S /a:/b} 这样一行。
\item   \KPS{} 配置文件 \file{texmf.cnf}，包含类似
  \samp{TEXINPUTS=/c:/d} 这样的一行 (参见下面的解释)。
\item 编译时的缺省值。
\end{enumerate}
\noindent 你可以通过调试选项看到所有的这些值 (参见第~\pageref{sec:debugging}~页的
``调试操作'')。

\subsubsection{配置文件}
\label{sec:configfiles}

\KPS{} 读入\emph{运行时配置文件} \file{texmf.cnf} 来获得搜索路径和其他定义。
我们用 \envname{TEXMFCNF} 搜索路径来查找这些文件，但我们不建议设置这个 (或者任
何) 环境变量来替代系统路径。

作为代替，标准的安装将产生文件 \file{.../2024/texmf.cnf}。如果你必须修改缺省
值 (一般不需要)，这是修改的地方。主配置文件是
\file{.../2024/texmf-dist/web2c/texmf.cnf}。你不应该修改后者，因为在发行版本被更
新后会丢失修改。

此外，如果只希望把一个个人目录加入特定的搜索路径，设置环境变量是合理的: 
\begin{verbatim}
  TEXINPUTS=.:/my/macro/dir:
\end{verbatim}
为保证这个设计可以一直被维护和兼容，在末尾加入一个 \samp{:} (Windows 下用 \samp{;})
来加入系统路径，而不是完全替代系统路径 (参见第~\ref{sec:default-expansion}~节)。
另一个选项是使用 \envname{TEXMFHOME} 树 (参见第~\ref{sec:directories}~节)。

搜索路径里\emph{所有的} \file{texmf.cnf} 文件都会被读入，而先读入的优先级更高。
比如搜索路径是 \verb|.:$TEXMF|，那么文件 \file{./texmf.cnf} 里面的值要比
\verb|$TEXMF/texmf.cnf| 里边的优先。

\begin{itemize*}
\item
  以 \code{\%}——要么在行首，要么在空白后面——表示单行注释。
\item
  忽略空行。
\item
  行末的 \bs{} 作为连接符，即把下一行直接接上。但保留下一行行首的空白。
\item
  所有剩余的行格式如下: \\
  \hspace*{2em}\texttt{\var{variable} \textrm{[}.\var{progname}\textrm{]}
  \textrm{[}=\textrm{]} \var{value}}\\[1pt]
  \samp{=} 号和空白都是可选的。
  (但如果 \var{value} 以 \samp{.} 起始，最好的办法是用 \samp{=} 来避免 \samp{.}
  被识别为程序名称。)
\item
  \ttvar{variable} (变量) 允许包含任何字符，除空白、\samp{=}、\samp{.}
  之外。不过只用 \samp{A-Za-z\_} 是最保险的。
\item
  如果 \samp{.\var{progname}} (程序名) 存在，则该定义只对正在运行的名叫
  \texttt{\var{progname}} 或 \texttt{\var{progname}.exe}
  的程序起作用。这可以让给不同种类的 \TeX{} 程序设置不同的搜索路径。
\item 就像字符串一样，\var{value} 可以包含任何字符。但是，实际上大部分
  \file{texmf.cnf} 的值都和路径展开有关，而因为展开会用到多种特殊字符
  (参见第~\ref{sec:cnf-special-chars}~节)，比如大括号和逗号，所以它们
  不能用作路径名称。

  在 Unix 下 \var{value} 里的 \samp{;} 会被转换为 \samp{:}，这样同一份
  \file{texmf.cnf} 可以同时支持 Unix 和 Windows
  系统。这个转换适用于任何值，不仅仅是搜索路径，不过实际上 \samp{;}
  也不会在其他值里用到。

  \code{\$\var{var}.\var{prog}} 的功能在右侧无效，你必须多用一个变量才行。
\item
  在读入所有定义后再开始展开，所以你可以引用后边才定义的变量。
\end{itemize*}
展示上面所有内容的一段配置文件
\ifSingleColumn
如下:

\verbatiminput{../texlive-common/examples/ex5.tex}
\else
见图~\ref{fig:config-sample}.
\fi

\subsubsection{路径展开}
\label{sec:path-expansion}

和 Unix shell 类似，\KPS{} 能够识别搜索路径中的特殊字符。比如路径
\verb+~$USER/{foo,bar}//baz+，将展开为这样的子目录: 在 \texttt{\$USER}
的主目录下的 \file{foo} 或 \file{bar} 目录中，且包含 \file{baz}
文件或目录。这种展开将在下面解释。
%$
\subsubsection{默认展开}
\label{sec:default-expansion}

如果最高优先级 (参见第~\pageref{sec:path-sources}~页的``路径来源'')
的搜索路径中包含一个\emph{额外的冒号} (即前置、后置或连续的冒号)，\KPS{} 将在
此处插入次高优先级的搜索路径。如果插入的那个路径里也有额外的冒号，同样的步骤将发生
在更次以及优先级的路径上。假设环境变量设置为

\begin{alltt}
> \Ucom{setenv TEXINPUTS /home/karl:}
\end{alltt}
而 \file{texmf.cnf} 里的 \code{TEXINPUTS} 值为

\begin{alltt}
  .:\$TEXMF//tex
\end{alltt}
则用于搜索的最终值为: 

\begin{alltt}
  /home/karl:.:\$TEXMF//tex
\end{alltt}

因为没必要插入多个相同的值，所以 \KPS{} 只会修改一个额外的 \samp{:}，其他的不变。
它首先检查前置的 \samp{:}，然后是末尾的 \samp{:}，最后是连续的 \samp{:}。

\subsubsection{大括号展开}
\label{sec:brace-expansion}

大括号展开是一项有用的特性，其作用是把例如 \verb+v{a,b}w+ 这样的转换为
\verb+vaw:vbw+，允许嵌套使用。通过把 \code{\$TEXMF} 赋值为一个括号列表，
可以构造出多套 \TeX{} 层级结构。在分发的 \file{texmf.cnf} 里有下面的定义
(简化的例子): 
\begin{verbatim}
  TEXMF = {$TEXMFVAR,$TEXMFHOME,!!$TEXMFLOCAL,!!$TEXMFDIST}
\end{verbatim}
比如我们可以用它来设置 \TeX\ 的输入路径: 
\begin{verbatim}
  TEXINPUTS = .;$TEXMF/tex//
\end{verbatim}
%$
的时候，检查完当前目录后，依次检查的路径是
\code{\$TEXMFVAR/tex}, \code{\$TEXMFHOME/tex}, \code{\$TEXMFLOCAL/tex}
和 \code{\$TEXMFDIST/tex} (后两个只在 \file{ls-R} 数据库中搜索)。

\subsubsection{子目录展开}
\label{sec:subdirectory-expansion}

在路径元素里的目录名称 \var{d} 后面接连使用两个或更多连续的斜杠，表示 \var{d\/} 的
所有子目录: 首先是直接处于 \var{d} 下的那些，然后是这些子目录的子目录，依此类推。
每层的目录出现的顺序是\emph{不一定}的。

如果你在 \samp{//} 后面还指定了文件名，匹配的将只是那些包含了指定文件的路径。
比如 \samp{/a//b} 将展开为路径 \file{/a/1/b}, \file{/a/2/b},
\file{/a/1/1/b} 等等，但不会展开为 \file{/a/b/c} 或 \file{/a/1}。

可以在单个路径元素里使用多个 \samp{//}，但出现在路径开头的 \samp{//}
将被忽略。

\subsubsection{\file{texmf.cnf} 文件中的特殊字符简要说明}
\label{sec:cnf-special-chars}

下面的列表总结了 \KPS{} 配置文件中出现的特殊字符和构成: 

% need a wider space for the item labels here.
\newcommand{\CODE}[1]{\makebox[3em][l]{\code{#1}}}
\begin{ttdescription}
\item[\CODE{:}] 路径分隔符，在路径的前边或者末尾，或者在中间重复出现时，
表示默认的展开方式。\par
\item[\CODE{;}] 非 Unix 系统下的路径分隔符 (和 \code{:} 功能一样)。
\item[\CODE{\$}] 变量展开。
\item[\CODE{\string~}] 表示用户的个人主目录。
\item[\CODE{\char`\{...\char`\}}] 大括号展开.
\item[\CODE{,}] 在大括号展开时分隔项目。
\item[\CODE{//}] 子目录展开 (可以出现在除路径开头外的任意位置)。
\item[\CODE{\%{\rm\ and }\#}] 注释的起始。
\item[\CODE{\bs}] 在行末连接下一行的字符，以支持跨行的设置项。
\item[\CODE{!!}] \emph{只}在数据库中搜索文件，\emph{不}搜寻磁盘。
\end{ttdescription}

具体哪一个字符会被视为特殊字符还是不会，取决于它使用的上下文。这些规则在配置文件
的多层的解析过程中都会体现 (包括解析、展开、搜索，等等)，所以不能简短地说明。
也没有通用的转义方法，尤其 \samp{\bs} 不是 \file{texmf.cnf} 文件中的“转义字符”。

在选择安装使用的目录名时，避免使用这些字符里的任何一个最为保险。

\subsection{文件名数据库}
\label{sec:filename-database}

\KPS{} 采取了一些措施来尽量减少搜索时的磁盘访问。
尽管如此，
在标准的 \TL{} 中，
或者在任何包含足够多目录的安装中，
为查找某个文件而搜索每一个可能的目录将会耗费过长的时间。
因此，
\KPS{} 可以使用一个名为 \file{ls-R} 的外部构建的纯文本``数据库''文件，
该文件将文件映射到目录，
从而避免了对磁盘进行全面搜索的必要。

第二个数据库 \file{aliases} 允许你给 \file{ls-R} 中的文件指定其他的名字。

\subsubsection{文件名数据库}
\label{sec:ls-R}

如上所述，
主文件名数据库的名称必须是 \file{ls-R}。
你可以在安装路径下每个希望被搜索的 \TeX{} 层次结构的根目录中放置一个 \file{ls-R} 文件
(默认情况下为 \code{\$TEXMF})。
\KPS{} 会沿着 \code{TEXMFDBS} 路径查找 \file{ls-R} 文件。

推荐使用发行版中包含的 \code{mktexlsr} 脚本来创建和维护 \samp{ls-R} 文件。
脚本由各种 \samp{mktex}\dots\ 脚本调用。
原则上，这个脚本只是执行下面的命令: 
\begin{alltt}
cd \var{/your/texmf/root} && \path|\|ls -1LAR ./ >ls-R
\end{alltt}
意味着你的系统的 \code{ls} 命令生成正确的输出格式 (\GNU \code{ls} 是没问题的)。
要保证数据库及时更新，最简单的方法是定期通过 \code{cron} 来重建。
这样当安装的文件发生变化时 (例如安装或更新 \LaTeX{} 包之后)，
它会自动更新。

如果在数据库中找不到文件，
缺省情况下 \KPS{} 会继续搜索磁盘。
然而，如果某个特定的路径元素以 \samp{!!} 开头，
则\emph{只会}在针对这一元素的数据库中查找而不去搜索磁盘。

\subsubsection{kpsewhich: 独立的路径搜索}
\label{sec:invoking-kpsewhich}

\texttt{kpsewhich} 程序独立于任何特定应用程序进行路径搜索。
它可以作为类似 \code{find} 这样的程序，
专门在 \TeX{} 层级结构中定位文件
(这在发行版中的 \samp{mktex}\dots\ 脚本中使用得非常多)。

\begin{alltt}
> \Ucom{kpsewhich \var{option}\dots{} \var{filename}\dots{}}
\end{alltt}
在 \ttvar{option} 中指定的选项以 \samp{-} 或 \samp{--} 开头，
且任何不含歧义的缩写都是可以接受的。

\KPS{} 将命令行中的每个非选项参数视为文件名进行查找，
并返回找到的第一个文件。
它不提供可以返回具有特定名称的所有文件的选项
(可以使用 Unix 的 \samp{find} 工具来实现此功能)。

接下来将介绍最常用的选项。

\begin{ttdescription}
\item[\texttt{-{}-dpi=\var{num}}]\mbox{}
  将分辨率设置为 \ttvar{num}; 
  这仅影响 \samp{gf} 和 \samp{pk} 的查找。
  为了兼容 \cmdname{dvips}，
  \samp{-D} 是一个同义词。
  默认值是 600。

\item[\texttt{-{}-format=\var{name}}]\mbox{}\\
  将查找的格式设置为 \ttvar{name}。
  默认情况下，
  格式是从文件名中猜测的。
  对于没有相关明确后缀的格式，
  例如 \MP{} 支持文件和 \cmdname{dvips} 配置文件，
  你必须指定 \KPS{} 已知的名称，
  如 \texttt{tex} 或 \texttt{enc files}。
  运行 \texttt{kpsewhich --help-formats} 以获取格式列表。

\item[\texttt{-{}-mode=\var{string}}]\mbox{}\\
  将模式名称设置为 \ttvar{string}; 
  这仅影响 \samp{gf} 和 \samp{pk} 的查找。
  没有缺省值: 
  任何模式都将被找到。

\item[\texttt{-{}-must-exist}]\mbox{}\\
  尽一切可能找到文件，
  特别包括在磁盘上搜索。
  默认情况下，
  为了提高效率，
  仅检查 \file{ls-R} 数据库。

\item[\texttt{-{}-path=\var{string}}]\mbox{}\\
  沿路径 \ttvar{string} 进行搜索
  (通常以冒号分隔)，
  而不是从文件名中猜测搜索路径。
  支持 \samp{//} 和所有常见的扩展。
  选项 \samp{--path} 和 \samp{--format} 是互斥的。

\item[\texttt{-{}-progname=\var{name}}]\mbox{}\\
  将执行查找的程序名称设为 \texttt{\var{name}}。
  这会通过 \texttt{.\var{progname}} 特性影响搜索路径。
  缺省值是 \cmdname{kpsewhich}。

\item[\texttt{-{}-show-path=\var{name}}]\mbox{}\\
  显示用于查找 \texttt{\var{name}} 类型文件的路径。
  和 \samp{-{}-format} 选项一样，
  可以使用扩展名 (\code{.pk}, \code{.vf}, 等等) 也可以使用全名。

\item[\texttt{-{}-debug=\var{num}}]\mbox{}\\
  将调试选项 (等级) 设置为 \texttt{\var{num}}。
\end{ttdescription}


\subsubsection{使用举例}
\label{sec:examples-of-use}

现在我们看看实际使用 \KPS{} 的例子。这里是一个简单的搜索: 

\begin{alltt}
> \Ucom{kpsewhich article.cls}
   /usr/local/texmf-dist/tex/latex/base/article.cls
\end{alltt}
我们寻找的是 \file{article.cls} 文件。
因为 \samp{.cls} 后缀已经说明了文件的类型，
所以我们不需要特别指明查找的是 \optname{tex} 类型的文件 (也就是要在 \TeX{} 源文件目录下查找)。
我们在 \TL\ 目录的 \samp{texmf-dist} 下的 \file{tex/latex/base} 子目录找到了这个文件。
与之类似，
下列所有文件都顺利找到，
因为其扩展名没有歧义。
\begin{alltt}
> \Ucom{kpsewhich array.sty}
   /usr/local/texmf-dist/tex/latex/tools/array.sty
> \Ucom{kpsewhich latin1.def}
   /usr/local/texmf-dist/tex/latex/base/latin1.def
> \Ucom{kpsewhich size10.clo}
   /usr/local/texmf-dist/tex/latex/base/size10.clo
> \Ucom{kpsewhich small2e.tex}
   /usr/local/texmf-dist/tex/latex/base/small2e.tex
> \Ucom{kpsewhich tugboat.bib}
   /usr/local/texmf-dist/bibtex/bib/beebe/tugboat.bib
\end{alltt}

顺便提一下，
最后一个是 \BibTeX{} 的文献数据库，
用于 \textsl{TUGboat} 文章。

\begin{alltt}
> \Ucom{kpsewhich cmr10.pk}
\end{alltt}
类型为 \file{.pk} 的字体位图字形文件被 \cmdname{dvips} 和 \cmdname{xdvi} 等显示程序使用。
在这种情况下，
不会返回任何内容，
因为 \TL{} 中没有预生成的 Computer Modern \samp{.pk} 文件——默认使用的是 Type~1 变体。
\begin{alltt}
> \Ucom{kpsewhich wsuipa10.pk}
\ifSingleColumn   /usr/local/texmf-var/fonts/pk/ljfour/public/wsuipa/wsuipa10.600pk
\else /usr/local/texmf-var/fonts/pk/ljfour/public/
...                         wsuipa/wsuipa10.600pk
\fi\end{alltt}
对于这个字体 (来自华盛顿大学的一套音标字母表) 就必须要生成 \samp{.pk} 文件了。
我们默认的 \MF{} 模式是 \texttt{ljfour}，
基础解析度是 600\dpi{} (每英寸点数)，
所以会得到这样一个文件。
\begin{alltt}
> \Ucom{kpsewhich -dpi=300 wsuipa10.pk}
\end{alltt}
在这种情况下，
一旦指定我们感兴趣的分辨率是 300\dpi{} (\texttt{-dpi=300}) 时，
就会发现系统里没有符合要求的文件。
像 \cmdname{dvips} 或 \cmdname{xdvi} 这样的程序会使用 \cmdname{mktexpk} 脚本去创建所需的 \texttt{.pk} 文件。

下面我们将注意力转向 \cmdname{dvips} 的头文件和配置文件。
首先看看最常用的一个，
即用于 \TeX{} 支持的一般序言文件 \file{tex.pro}，
然后检查通用配置文件 (\file{config.ps}) 和 \PS{} 字体映射文件 (\file{psfonts.map})
——从 2004 年开始，映射文件和编码文件都在 \dirname{texmf} 目录树下有其自己的搜索路径了。
因为 \samp{.ps} 后缀是模糊的，
我们必须明确指定我们正在考虑的文件类型 (\optname{dvips config}) 用于 \texttt{config.ps} 文件。

\begin{alltt}
> \Ucom{kpsewhich tex.pro}
   /usr/local/texmf/dvips/base/tex.pro
> \Ucom{kpsewhich --format="dvips config" config.ps}
   /usr/local/texmf/dvips/config/config.ps
> \Ucom{kpsewhich psfonts.map}
   /usr/local/texmf/fonts/map/dvips/updmap/psfonts.map
\end{alltt}

现在我们仔细查看 URW Times \PS{} 支持文件。
在标准字体命名方案中，
这些文件的前缀是 \samp{utm}。
我们首先查看的是配置文件，
该文件包含映射文件的名称: 
\begin{alltt}
> \Ucom{kpsewhich --format="dvips config" config.utm}
   /usr/local/texmf-dist/dvips/psnfss/config.utm
\end{alltt}
这个文件的内容是
\begin{alltt}
  p +utm.map
\end{alltt}
即指向 \file{utm.map} 文件，也就是我们下一步要找的。
\begin{alltt}
> \Ucom{kpsewhich utm.map}
   /usr/local/texmf-dist/fonts/map/dvips/times/utm.map
\end{alltt}
这个 map 文件定义了 URW 集合中的 Type~1 \PS{} 字体文件名。
其内容如下所示
(我们只列出了其中一部分): 
\begin{alltt}
utmb8r  NimbusRomNo9L-Medi    ... <utmb8a.pfb
utmbi8r NimbusRomNo9L-MediItal... <utmbi8a.pfb
utmr8r  NimbusRomNo9L-Regu    ... <utmr8a.pfb
utmri8r NimbusRomNo9L-ReguItal... <utmri8a.pfb
utmbo8r NimbusRomNo9L-Medi    ... <utmb8a.pfb
utmro8r NimbusRomNo9L-Regu    ... <utmr8a.pfb
\end{alltt}
例如，
让我们以 Times Roman 实例 \file{utmr8a.pfb} 为例，
搜索 Type~1 字体文件以找到它在 \file{texmf} 目录树中的位置: 
\begin{alltt}
> \Ucom{kpsewhich utmr8a.pfb}
\ifSingleColumn   /usr/local/texmf-dist/fonts/type1/urw/times/utmr8a.pfb
\else   /usr/local/texmf-dist/fonts/type1/
... urw/utm/utmr8a.pfb
\fi\end{alltt}

从这些例子中可以清楚地看出，
你可以轻松找到给定文件的位置。
如果您怀疑某个文件的错误版本被意外使用，
这一点尤其重要，
因为 \cmdname{kpsewhich} 将显示遇到的第一个文件。

\subsubsection{调试操作}
\label{sec:debugging}

有时候，
有必要调查一个程序如何解析文件引用。
为了使这变得实际，\KPS{} 提供了各种级别的调试输出: 

\begin{ttdescription}
\item[\texttt{\ 1}] \texttt{stat} 调用 (磁盘上的查询)。在 \file{ls-R}
  数据库及时更新的情况下几乎不会有什么输出。
\item[\texttt{\ 2}] 对散列表的引用 (例如 \file{ls-R} 数据库，映射文件，配置文件)。
\item[\texttt{\ 4}] 文件的打开与关闭操作。
\item[\texttt{\ 8}] \KPS{} 搜索的文件类型的通用路径信息。这有助于寻找针对某一文件的
特定路径。
\item[\texttt{16}] 每个路径元素的目录列表 (只在本地磁盘上搜索时有用)。
\item[\texttt{32}] 文件搜索。
\item[\texttt{64}] 变量的值。
\end{ttdescription}
级别 \texttt{-1} 将启用上述所有选项，实际上这是最方便的设置方法了。

同样地，通过设置一组调试开关，可以使用 \cmdname{dvips} 程序详细跟踪文件从哪里被读取。
或者，当一个文件未找到时，调试跟踪会显示程序在查找该文件时搜索的目录，从而可以指示问题所在。

一般来说，由于大多数程序在内部调用 \KPS{} 库，可以通过使用 \envname{KPATHSEA\_DEBUG} 环境变量并将其设置为上述列表中描述的值 (或其组合) 来选择调试选项。

(Windows 用户请注意: 因为在 Windows 下不容易把所有信息都重定向到固定的文件中，为了方便诊断，
你可以临时设置 \texttt{SET KPATHSEA\_DEBUG\_OUTPUT=err.log})。

让我们以一个简单的 \LaTeX{} 源文件 \file{hello-world.tex} 为例，其内容如下: 
\begin{verbatim}
  \documentclass{article}
  \begin{document}
  Hello World!
  \end{document}
\end{verbatim}
这个小文件只使用了 \file{cmr10} 字体，我们可以看看 \cmdname{dvips} 是如何生成 \PS{}
文件的 (我们希望使用 Type~1 版本的 Computer Modern 字体，所以使用了 \texttt{-Pcms}
参数)。
\begin{alltt}
> \Ucom{dvips -d4100 hello-world -Pcms -o}
\end{alltt}
此时将 \cmdname{dvips} 的调试级别 4 (表示字体路径) 和 \KPS\ 的路径元素展开组合到
一起 (参见 \cmdname{dvips} 参考手册)。
(稍作整理的) 输出见图~\ref{fig:dvipsdbga}。
\begin{figure*}[tp]
\centering
\input{../texlive-common/examples/ex6a.tex}
\caption{寻找配置文件}\label{fig:dvipsdbga}
\end{figure*}

\cmdname{dvips} 首先定位其工作文件。
首先找到 \file{texmf.cnf}，
它定义了其他文件的搜索路径，
然后是文件数据库 \file{ls-R} (用于优化文件搜索) 和文件 \file{aliases}，
它可以为同一个文件声明多个名称 (例如，一个简短的类似 DOS 的 8.3 名称和一个更自然的较长版本)。
接着，\cmdname{dvips} 找到通用配置文件 \file{config.ps}，
然后寻找自定义文件 \file{.dvipsrc} (在此情况下未找到)。
最后，\cmdname{dvips} 定位到计算机现代 \PS{} 字体的配置文件 \file{config.cms}
(这是通过 \cmdname{dvips} 命令中的 \texttt{-Pcms} 选项启动的)。
该文件包含定义字体的 \TeX{}、\PS{} 和文件系统名称之间关系的映射文件列表。
\begin{alltt}
> \Ucom{more /usr/local/texmf/dvips/cms/config.cms}
   p +ams.map
   p +cms.map
   p +cmbkm.map
   p +amsbkm.map
\end{alltt}
因此，\cmdname{dvips} 继续查找所有这些文件，
以及通用映射文件 \file{psfonts.map}，
该文件始终会被加载 (它包含常用 \PS{} 字体的声明; 
有关 \PS{} 映射文件处理的更多详细信息，
请参见第~\ref{sec:examples-of-use}~节的最后部分)。

这时候 \cmdname{dvips} 向用户表示它的存在: 
\begin{alltt}
This is dvips(k) 5.92b Copyright 2002 Radical Eye Software
\end{alltt}
\ifSingleColumn
然后开始寻找 prolog 文件 \file{texc.pro}: 
\begin{alltt}\small
kdebug:start search(file=texc.pro, must\_exist=0, find\_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(texc.pro) => /usr/local/texmf/dvips/base/texc.pro
\end{alltt}
\else
然后开始寻找 prolog 文件 \file{texc.pro} (见图~\ref{fig:dvipsdbgb})。
\fi

找到相关文件后，
\cmdname{dvips} 输出日期和时间，
并告知我们它将生成文件 \file{hello-world.ps}，
然后它需要字体文件 \file{cmr10}，
并且后者被声明为``常驻 (resident) 的'' (也就是不需要载入位图文件的字体): 
\begin{alltt}\small
TeX output 1998.02.26:1204' -> hello-world.ps
Defining font () cmr10 at 10.0pt
Font cmr10 <CMR10> is resident.
\end{alltt}
现在开始搜索文件 \file{cmr10.tfm}，该文件已找到，
然后引用了更多的 prolog 文件 (此处未显示)，
最终找到了 \file{cmr10.pfb} 这个 Type~1 字体，
并将它包含在输出文件中 (见最后一行)。
\begin{alltt}\small
kdebug:start search(file=cmr10.tfm, must\_exist=1, find\_all=0,
  path=.:~/tex/fonts/tfm//:!!/usr/local/texmf/fonts/tfm//:
       /var/tex/fonts/tfm//).
kdebug:search(cmr10.tfm) => /usr/local/texmf/fonts/tfm/public/cm/cmr10.tfm
kdebug:start search(file=texps.pro, must\_exist=0, find\_all=0,
   ...
<texps.pro>
kdebug:start search(file=cmr10.pfb, must\_exist=0, find\_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(cmr10.pfb) => /usr/local/texmf/fonts/type1/public/cm/cmr10.pfb
<cmr10.pfb>[1]
\end{alltt}

\subsection{运行时选项}

\Webc{} 另一项有用的特性是可以通过 \KPS{} 读取的运行时文件 \file{texmf.cnf}
来控制一系列的内存参数 (尤其是数组的大小)。
这些内存的设置可以在该文件的第三部分找到。
比较重要的几个设置是: 

\begin{ttdescription}
\item[\texttt{main\_memory}]
  \TeX{}、\MF{} 和 \MP{} 可用的总内存 word 数。
  对于每个不同的设置，
  你必须创建一个新的格式文件。
  例如，您可以生成一个``巨大''版本的 \TeX{}，
  并将格式文件命名为 \texttt{hugetex.fmt}。
  使用 \KPS{} 指定程序名称的标准方法时，
  将从 \file{texmf.cnf} 中读取 \texttt{main\_memory} 变量的特定值。
\item[\texttt{extra\_mem\_bot}]
  为``大型'' \TeX{} 数据结构预留的额外空间: boxes, glue, breakpoint 等。
  尤其在使用 \PiCTeX{} 时特别有用。
\item[\texttt{font\_mem\_size}]
  \TeX{} 用于存储字体数据的 word 数。
  大致等于载入的所有 TFM 文件的总和。
\item[\texttt{hash\_extra}]
  为存储控制序列而设置的散列表的额外空间。
  默认的值是 \texttt{600000}。
\end{ttdescription}

\noindent 此功能并不能真正替代动态数组和内存分配，
但由于在当前的 \TeX{} 源代码中实现这些功能极其困难，
这些运行时参数提供了一种实用的折衷方案，允许一定的灵活性。

\htmlanchor{texmfdotdir}
\subsection{\texttt{\$TEXMFDOTDIR}}
\label{sec:texmfdotdir}

在上述许多地方，
我们给出了以 \code{.} 开头的各种搜索路径 (首先搜索当前目录)，
如下所示: 
\begin{alltt}\small
TEXINPUTS=.;$TEXMF/tex//
\end{alltt}

这是一种简化。我们在 \TL{} 分发的 \code{texmf.cnf} 文件使用 \filename{$TEXMFDOTDIR} 而不仅是 \samp{.}，比如: 
\begin{alltt}\small
TEXINPUTS=$TEXMFDOTDIR;$TEXMF/tex//
\end{alltt}
(在分发的文件中，第二个路径元素也比 \filename{$TEXMF/tex//} 稍微复杂一点。
但差别不大; 而且我们这里讨论的是 \filename{$TEXMFDOTDIR} 功能。)

在路径定义中使用变量 \filename{$TEXMFDOTDIR} 而不是简单地使用 \samp{.} 的原因纯粹是为了便于重载。
例如，一份复杂的文档可能有分布在多个子目录中的很多源文件。
为了解决这个问题，
你可以将 \filename{TEXMFDOTDIR} 设置为 \filename{.//} (例如，在构建文档时在环境中设置)，
这样它们都会被搜索。
(警告: 不要默认使用 \filename{.//}; 通常来说，在所有子目录中搜索任意文档的结果不理想，
并且可能存在安全隐患。)

另一个例子是你可能完全不希望搜索当前路径，比如你安排所有的文件都通过具体的路径找到。
那样你可以把 \filename{$TEXMFDOTDIR} 设置为诸如 \filename{/nonesuch} 这样不存在的目录。

\filename{$TEXMFDOTDIR} 的默认值就是 \samp{.}，
正如在我们的 \filename{texmf.cnf} 里设置的那样。 

\htmlanchor{ack}
\section{致谢}

\TL{} 是在几乎所有 \TeX{} 用户组织的协力下完成的。
这个版本由 Karl Berry监制。下面列出了过去和现在主要的贡献者: 

\begin{itemize*}

\item 英国、德国、荷兰和波兰的 \TeX{} 用户组织
(分别为 TUG, DANTE e.V., NTG, 和 GUST)，他们为所在
地区的 \TeX{} 社群提供了必备的技术和管理基础设施。请加入本地的 \TeX 用户组织！
(参见 \url{https://tug.org/usergroups.html}。)

\item CTAN 团队 (\url{https://ctan.org})，
负责分发 \TL{} 镜像并提供包更新的公共基础设施，
这是 \TL{} 赖以运行的基础。

\item Nelson Beebe，他为 \TL\ 提供了许多平台，自己也进行了详尽的测试，并在参考
文献上有无与伦比的贡献。

\item John Bowman，他对先进的图形程序 Asymptote 做了许多修改，使之能在 \TL{}
中工作。

\item Peter Breitenlohner 和 \eTeX\ 团队，他们创造了未来 \TeX\ 的稳定基础。
同时特别感谢 Peter，他为整个 \TL 中 \GNU\ autotools 的使用提供了主要的帮助。
Peter 在 2015 年 10 月去世，我们将持续工作以纪念他。

\item Jin-Hwan Cho 和整个 DVIPDFM$x$ 团队，他们创造了这个优秀的 DVI 输出程序，
以及对配置问题及时的回应。

\item Thomas Esser，如果没有他优秀的 \teTeX{} 套件，\TL{} 根本不可能存在。

\item Michel Goossens，他一起编写了原始的文档。

\item Eitan Gurari，他不知疲倦地改进着的 \TeX4ht 程序用于创建这份文档的 \HTML{}
版本，年复一年。Eitan 于 2009 年 6 月过早地离开了我们，我们希望把这份文档
献给它，以志纪念。

\item Hans Hagen，他对 \ConTeXt\ 宏包 (\url{https://pragma-ade.com}) 做了
许多测试和修改，使之能够包含在 \TL{} 的框架下，并持续推进 \TeX\ 的开发。

\item \Thanh, Martin Schr\"oder，和 pdf\TeX\ 团队 (\url{http://pdftex.org})，
他们持续不断地改进 \TeX\ 的功能。

\item Hartmut Henkel，他对 pdf\TeX\, Lua\TeX 等程序的开发起到了重要的贡献。

\item Shunshaku Hirata，起始开发和坚持维护 DVIPDFM$x$。

\item Taco Hoekwater，他对 MetaPost 和 (Lua)\TeX\ (\url{http://luatex.org})
重要的开发使之焕发新的活力。他还参与了将 \ConTeXt\ 融入 \TL{}、给
Kpathsea 添加多线程功能，等等许多工作。

\item Khaled Hosny，他对 \XeTeX, DVIPDFM$x$ 和阿拉伯及其他字体的开发都有
巨大的贡献。

\item Pawe{\l} Jackowski，他创建了 Windows 下的安装程序 \cmdname{tlpm}，
和 Tomasz {\L}uczak，因为他的 \cmdname{tlpmgui} 被用在了以前的版本。

\item Akira Kakuto，
感谢他通过 W32TEX 和 W64TEX 发行版为日文 \TeX{} (\url{http://w32tex.org}) 提供 Windows 二进制文件，
以及其他许多开发贡献。

\item Jonathan Kew，他开发了非凡的 Xe\TeX{} 引擎并花了大量时间和精力集成到
\TL{} 中。以及 Mac\TeX 安装程序的早期版本，还有我们推荐的前端 \TeX{}works。

\item Hironori Kitagawa，对 p\TeX\ 和相关的支持进行了大量的工作。

\item Dick Koch，他维护了 Mac\TeX\ (\url{https://tug.org/mactex}) 这个和
\TL{} 联系非常紧密的发行版本，并在此过程中保持极好的乐观态度。

\item Reinhard Kotucha，他对 \TL{} 2008 的基础架构和安装程序起到了重要贡献，
以及 Windows 下的研究性工作，\texttt{getnonfreefonts} 脚本，等等。

\item Siep Kroonenberg，也因为他对 \TL{} 2008 基础架构和安装程序的重要贡献，
尤其是在 Windows 上。他还花了大量的时间更新手册，介绍了这些特性。

\item Clerk Ma，对引擎的 bug 修正和扩展。

\item Mojca Miklavec, 为她在 \ConTeXt\ 上的工作、编译大量二进制文件和很多
其他的工作。

\item Heiko Oberdiek，因为他的 \pkgname{epstopdf} 包和许多其他的工作，压缩
巨大的 \pkgname{pst-geo} 数据文件使我们得以包含它们，最重要的还是因为他在
\pkgname{hyperref} 宏包上优秀的工作。

\item Phelype Oleinik，对 2020 年在多个引擎上实现组分隔的 \cs{input} 命令，以及
更多的工作。

\item Petr Ol\v{s}ak，他非常认真地协调和检查所有的捷克语和斯洛伐克语资料。

\item Toshio Oshima，他提供了 Windows 下的 \cmdname{dviout} 预览工具。

\item Manuel P\'egouri\'e-Gonnard，他对宏包更新、文档改进以及
\cmdname{texdoc} 开发上的努力。

\item Fabrice Popineau，感谢其在 \TL{} 中提供的原始 Windows 支持以及对法文文档的工作。

\item Norbert Preining，他是当前 \TL{} 基础架构和安装程序的总设计师，还
负责协调了 Debian 版本的 \TL{} 工作 (和 Frank K\"uster 一起)，还有很多其他的工作。

\item Sebastian Rahtz，他是 \TL{} 的创始者，并维护了它许多年。Sebastian 在 2016
年 3 月去世，我们用持续的工作来纪念他。

\item Luigi Scarso，他坚持开发 MetaPost, Lua\TeX 等等许多。

\item Andreas Scherer，感谢其为 \texttt{cwebbin} (\TL{} 中使用的 CWEB 实现) 所做的工作，
以及对原始 CWEB 的持续维护。

\item Takuji Tanaka，感谢他对 (e)(u)p\TeX{} 的维护及相关支持。

\item Tomasz Trzeciak，他为 Windows 开发提供了广泛的帮助。

\item Vladimir Volovich，他很大地帮助解决了许多移植和维护的问题，尤其是令我们能够
将 \cmdname{xindy} 包含进来。

\item Staszek Wawrykiewicz，\TL{} 的一个主要的测试人员，同时还是许多重要波兰语
支持的协调人员: 字体、Windows 安装，和其他许多工作。Staszek 在 2018 年 2 月去世
了，我们将继续工作以纪念他。

\item Olaf Weber，他在以前几年对 \Webc{} 耐心的维护。

\item Gerben Wierda，他创建和维护了原来的 \macOS\ 支持。

\item Graham Williams，他是 \TeX\ Catalogue 的发起者。

\item Joseph Wright，他为让多个引擎获得相同的 primitive 功能进行了大量的工作。

\item Hironobu Yamashita，对 p\TeX\ 和相关的支持进行了大量的工作。

\end{itemize*}

二进制版本的编译者:
Marc Baudoin (\pkgname{amd64-netbsd}, \pkgname{i386-netbsd}),
Ken Brown (\pkgname{x86\_64-cygwin}),
Akira Kakuto (\pkgname{windows}),
Dick Koch (\pkgname{universal-darwin}),
Mojca Miklavec (\pkgname{x86\_64-darwinlegacy}),
Norbert Preining (%
                  \pkgname{aarch64-linux},
                  \pkgname{armhf-linux},
                  \pkgname{i386-freebsd}, \pkgname{amd64-freebsd},
                  \pkgname{i386-linux}, \pkgname{x86\_64-linux},
                  \pkgname{i386-solaris}, \pkgname{x86\_64-solaris},
                  \pkgname{x86\_64-linuxmusl}).
关于 \TL{} 编译进程的信息，
请查阅
\url{https://tug.org/texlive/build.html}.

这份手册的翻译者: 
Takuto Asakura (Japanese),
Denis Bitouzé \& Patrick Bideault (法语),
Carlos Enriquez Figueras (西班牙语),
Jiang Jiang, Jinsong Zhao, Yue Wang, Helin Gai \& Ran Wang (中文),
Nikola Le\v{c}i\'c (塞尔维亚语),
Marco Pallante \& Carla Maggi (意大利语),
Petr Sojka \& Jan Busa (捷克\slash 斯洛伐克语),
Boris Veytsman \& Vladimir Lomov (俄语),
Uwe Ziegenhagen (德语)。\TL{} 文档的主页是
\url{https://tug.org/texlive/doc.html}。

当然，最重要的感谢应该致予 Donald Knuth，
感谢他发明了 \TeX，
也感谢他将 \TeX\ 赠与全世界。

\section{发行历史}
\label{sec:history}

\subsection{过去}

1993 年末荷兰 \TeX{} 用户组开始为 MS-DOS 用户开发 4All\TeX{} \CD{} 时，
我们就开始了相关的讨论，并希望在此时为所有的操作系统提供一个单一的、合理的 \CD{}。当时
那是一个过于宏伟的目标，但的确滋生了非常成功的 4All\TeX{} \CD{}，同时 TUG
技术委员会工作组也开始设计 \emph{\TeX{} 目录结构} (\url{https://tug.org/tds})，
以指明如何创建一套一致而可控的集合，囊括所有 \TeX{} 相关的文件。\TDS{} 的完整草案在 1995
年 12 月的 \textsl{TUGboat} 上出版，并初步确定期望的产品将是在 \CD{} 上出现的范例
结构。你现在使用的这个发行版正是工作组审议的直接结果。4All\TeX{} \CD{} 的成功也说明
如果有一个类似这样的易于使用的系统，对 Unix 用户肯定很有帮助，这是 \TL{} 最主要的出发点。

我们在 1995 年秋天开始尝试构建一个新的 \CD{} (基于 \TDS{})，并很快发现 Thomas Esser
的 \teTeX{} 已经是比较理想的配置，并因为在它构建时就已经考虑了跨文件系统的兼容性问题，
也已具有多平台支持。Thomas 同意帮助我们，并在 1996 年初开始了正式的工作。第一版是在
1996 年五月发行的。到 1997 年初，Karl Berry 完成了 \Webc{} 的一个重大的更新版本，
将几乎所有 Thomas Esser 加入 \teTeX{} 的特性囊括在内，这样我们决定在 \teTeX{} 的
\texttt{texconfig} 脚本的辅助下，基于标准的 \Webc{} 来制作第二版的 \CD{}。
第 3 版的 \CD{} 基于 Olaf Weber 完成的 \Webc{} 的一个重大修正版本，7.2。与此同时，
\teTeX{} 的一个新版本出现了，\TL{} 也包含了其中绝大多数特性。第 4 版依照上面的模式进
行，使用了新版本的 \teTeX{} 和新版本的 \Webc{} (7.3)。感谢 Fabrice Popineau 的帮
助，系统此时也包括了完整的 Windows 下的配置。

在第 5 版 (2000 年 3 月) 中检查并修正了 \CD{} 的许多部分，更新了数百个软件包。软件
包的详细说明现在存放在 XML 文件中。不过 \TeX\ Live 5 的首要变化还是移除了所有的非自由软
件。\TL{} 的所有部分现在都在向 Debian Free Software Guidelines
(\url{https://debian.org/intro/free}) 兼容的方向改进，我们尽最大努力检查了所有软
件包的授权协议，欢迎为我们指出错误。

第 6 版 (2001 年 7 月) 更新了许多内容。最重大的一项是新的安装形式，用户可以更精确
地选择所需的软件集合。与语言相关的集合也重新组织过了，这样一来，选定某个语言集合时会自
动安装宏包、字体等文件，并自动设置好 \texttt{language.dat}。

2002 年出现的第 7 版里显著的更新是添加了 \macOS{}{} 的支持，还有大量各类宏包和程序
的更新。这个版本的一个重要的目标是将源代码重新与 \teTeX{} 集成，因为在第 5 和第 6
版中它们偏离得太远了。

\subsubsection{2003}

2003 年，在更新和增添持续不断到来的情况下，我们发现 \TL{} 已经过于庞大，无法在一张
\CD\ 中容纳，于是将其切分为三套不同的发行版 (参见第~\ref{sec:tl-coll-dists}
节，\p.\pageref{sec:tl-coll-dists})。此外: 

\begin{itemize*}
\item 在 \LaTeX{} 团队的要求下，我们将 \cmdname{latex} 和 \cmdname{pdflatex}
      命令改为使用 \eTeX{} 引擎 (参见 \p.\pageref{text:etex})。
\item 包含了新的 Latin Modern 字体 (并推荐使用)。
\item 因为不再有人拥有 (或主动提供) 用于编译新的二进制程序的硬件，去除了
      Alpha OSF 的支持 (先前已经去除了 HPUX 的支持)。
\item Windows 下的安装有很大改变，首次提供了基于 XEmacs 的集成环境。
\item Windows 下重要的辅助性程序 (Perl, Ghost\-script, Image\-Magick, Ispell)
      现在放在 \TL{} 的安装目录。
\item \cmdname{dvips}, \cmdname{dvipdfm} 和 \cmdname{pdftex}
      使用的字体映射文件现在通过 \cmdname{updmap} 这套新程序生成，并安装到
      \dirname{texmf/fonts/map} 目录下。
\item \TeX{}, \MF{}, 和 \MP{} 现在缺省直接输出大多数的输入字符 (位置 32 及其以上)
      (比如通过 \verb|\write|)，包括输出到文件、日志和终端上。也就是说，\emph{不再}使用
      \verb|^^| 标记来转换。在 \TL{}~7 中是否转换根据系统区域 (locale)
      设置而定，而这一版里 locale 设置不再影响 \TeX{} 程序的行为，所以如果你需要
      \verb|^^| 形式的输出，请将 \verb|texmf/web2c/cp8bit.tcx|
      文件改名。(后续版本将提供更简洁的方式来控制。)
\item 对文档作了大量更新。
\item 最后，因为版本号增长得实在太快，现在简单地使用年份来标识版本: \TL{} 2003。
\end{itemize*}


\subsubsection{2004}

2004 年有许多改变: 

\begin{itemize}

\item 如果你在本地安装的字体时涉及了 \filename{.map} 或 \filename{.enc}
(附带这种文件的可能性很小) 辅助文件，可能需要转移这些文件的位置。

现在根据 \envname{TEXFONTMAPS} 变量中的路径设置，只在 (所有 \filename{texmf}
目录树下的) \dirname{fonts/map} 子目录下搜索 \filename{.map}
文件。与之类似，\filename{.enc} 文件现在只在 \dirname{fonts/enc}
目录下搜索，根据 \envname{ENCFONTS} 变量中的路径设置。如果遇到有问题的文
件，\cmdname{updmap} 会提出警告。

关于这种搜索方式的其他信息，请参见 \url{https://tug.org/texlive/mapenc.html}。

\item 因为有人可能更愿意使用 \MIKTEX\ 而非 \Webc{} 系统，\TK\
现在包含了一套基于 \MIKTEX\ 的可安装 \CD，参见第~\ref{sec:overview-tl}~节
(\p.\pageref{sec:overview-tl})。

\item 在原来旧版本 \TL\ 中单一的 \dirname{texmf} 目录树被分拆为三
个: \dirname{texmf}, \dirname{texmf-dist}, 和 \dirname{texmf-doc}。参见
第~\ref{sec:tld}~节 (\p.\pageref{sec:tld}) 及各目录下的 \filename{README}
文件。

\item 所有 \TeX\ 输入文件现在统一收集到了 \dirname{texmf*} 下的
\dirname{tex} 子目录中，不再分散在各个 \dirname{tex}, \dirname{etex},
\dirname{pdftex}, \dirname{pdfetex} 目录。见~
\CDref{texmf-dist/doc/english/tds/tds.html\#Extensions}
{\texttt{texmf-dist/doc/english/tds/tds.html\#Extensions}}。

\item 辅助性脚本 (并非直接提供给用户调用的) 现在放在 \dirname{texmf*} 目录树下
新的 \dirname{scripts} 子目录中，并可以通过 \verb|kpsewhich -format=texmfscripts|
来搜索。如果你的程序调用了这些脚本，必须修改路径。参见
\CDref{texmf-dist/doc/english/tds/tds.html\#Scripts}
{\texttt{texmf-dist/doc/english/tds/tds.html\#Scripts}}。

\item 几乎所有格式，都用 \filename{cp227.tcx} 这个转换文件将大多数的可见 (printable)
字符保留下来，而不再使用 \verb|^^| 标识来转换这些字符。具体而言，在位置 32--256 的
字符，加上 tab, vertical tab, 和 form feed 字符都作为可见字符而不再转换。例外情况是
plain \TeX\ (只将位置 32--126 的字符视为可见), \ConTeXt\ (0--255 都视为可见) 和与
\OMEGA\ 相关的格式。缺省的情况几乎与 \TL\,2003 完全一致，但通过更简洁的方式实现，并允许
更多定制。参见 \CDref{texmf-dist/doc/web2c/web2c.html\#TCX-files}
{\texttt{texmf-dist/doc/web2c/web2c.html\#TCX-files}}。
(另外，如果遇到 Unicode 输入，\TeX\ 可能会在显示错误上下文时输出半个字符，因为它是基于
字节流来处理输入的。)

\item \textsf{pdfetex} 现在是除 (plain) \textsf{tex} 外所有格式的默认引擎 (当然
以 \textsf{latex} 这种方式运行时它还是生成 DVI)。这样一来，至少 \textsf{pdftex}
的微调排版 (microtypographic) 技术可以在 \LaTeX, \ConTeXt 等格式中使用，另外 \eTeX\
的特性也包含在其中 (\OnCD{texmf-dist/doc/etex/base/})。

这还说明\emph{比以前任何时候都更有必要}使用 (对 plain 和 \LaTeX\ 都适用的)
\pkgname{ifpdf} 宏包或其类似代码，因为只检查 \cs{pdfoutput} 或其他原语是否已经定义
不再是判断是否处于 PDF 输出状态的可靠方法。我们在这一年尽可能地保持向下兼容，但以后
即使在输出 DVI 时 \cs{pdfoutput} 也可能已经定义。

\item pdf\TeX\ (\url{http://pdftex.org}) 新增了许多特性: 

  \begin{itemize*}

  \item 可以使用 \cs{pdfmapfile} 和 \cs{pdfmapline} 来在单独文档内指定字体映射文件。

  \item 可以更方便地使用排版微调 (Microtypographic) 和字体延展 (font expansion)
  技术了。\\
  \url{http://www.ntg.nl/pipermail/ntg-pdftex/2004-May/000504.html}

  \item 原来使用专有格式的配置文件 \filename{pdftex.cfg} 里的选项现在都必须改用
  \TeX{} 原语来设置，通常放在 \filename{pdftexconfig.tex} 里面，不再支持
  \filename{pdftex.cfg} 的配置方式。每次修改 \filename{pdftexconfig.tex}
  之后都必须重新生成 \filename{.fmt} 文件。

  \item 参见 pdf\TeX\ 手册以了解更多信息: \OnCD{texmf-dist/doc/pdftex/manual/pdftex-a.pdf}。

  \end{itemize*}

\item \cmdname{tex} (以及 \cmdname{mf} 和 \cmdname{mpost}) 中的 \cs{input}
原语现在支持通过双引号来引用包含空格和特殊字符的文件。一个典型的例子如下: 
\begin{verbatim}
\input "filename with spaces"   % plain
\input{"filename with spaces"}  % latex
\end{verbatim}
参阅 \Webc{} 文档以了解更多信息: \OnCD{texmf-dist/doc/web2c}。

\item enc\TeX\ 的支持现在已被包含在 \Webc{} 中，因而所有 \TeX\ 程序都可以通过
\optname{-enc} 参数启用这一支持 \Dash \emph{前提是构建好了格式文件}。enc\TeX\
提供了对输入输出通用的重新编码功能，实现对 Unicode (以 UTF-8 编码的形式)
的完整支持。参见 \OnCD{texmf-dist/doc/generic/enctex/} 和
\url{http://olsak.net/enctex.html}。

\item 提供了 Aleph 这套新的 \TeX{} 引擎，它将 \eTeX\ 和 \OMEGA\ 合并到了一起。
关于 Aleph 的部分信息可以在 \OnCD{texmf-dist/doc/aleph/base}
和 \url{https://texfaq.org/FAQ-enginedev} 找到。Aleph
的 \LaTeX 格式文件称做 \textsf{lamed}。

\item 最新发布的 \LaTeX\ 包含了是新版的 LPPL 授权协议\Dash 这一协议已被
Debian 首肯。\LaTeX\ 其他的更新请见 \OnCD{texmf-dist/doc/latex/base} 下的
\filename{ltnews} 文件。

\item 包含了一个叫做 \cmdname{dvipng} 的新程序，用于将 DVI 转换为
PNG 图像文件。参见 \url{https://ctan.org/pkg/dvipng}。

\item 我们在作者 (Claudio Beccari) 的同意下，将 \pkgname{cbgreek} 包含的
字体数量减少到中等。去除了不可见、轮廓和透明版本的字体，这些字体几乎很少用到。而我们
的光盘镜像需要空间。完整版本当然还是在 CTAN 提供
(\url{https://ctan.org/pkg/cbgreek-complete})。

\item 去掉了 \cmdname{oxdvi}，改为只使用 \cmdname{xdvi}。

\item 不再为 \cmdname{tex}, \cmdname{mf}, 和 \cmdname{mpost} 程序创建
\cmdname{ini} 和 \cmdname{vir} 开头的命令链接，比如
\cmdname{initex}。\cmdname{ini} 的功能早在几年前就通过 \optname{-ini}
命令行参数提供了。

\item 去掉了 \textsf{i386-openbsd} 平台的支持。因为在 BSD Ports
系统中已经包含了 \pkgname{tetex} 软件包，而 GNU/Linux 和
FreeBSD 下的二进制版本都已存在，所以志愿者的时间可以花在其他的地方了。

\item 至少在 \textsf{sparc-solaris} 平台下，你必须设置好
\envname{LD\_LIBRARY\_PATH} 环境变量才能执行 \pkgname{t1utils} 包含的程序。
因为这些程序是使用 C++ 编写的，其运行时库没有固定的位置。(这一情况并非在 2004 版
中首次出现，但现在才写入文档) 与之类似，\textsf{mips-irix} 平台下需要用到
MIPSpro 7.4 运行时库。

\end{itemize}

\subsubsection{2005}

2005 年一如往常，宏包和程序都有大量的更新。底层结构和 2004 年相比保持了稳定，
不过仍然存在一些变化。

\begin{itemize}

\item 引入了新的 \cmdname{texconfig-sys}, \cmdname{updmap-sys}, 和
      \cmdname{fmtutil-sys} 安装脚本，用于修改系统目录树下的配置。而原有的
      \cmdname{texconfig}, \cmdname{updmap}, 和 \cmdname{fmtutil}
      则用于修改针对单个用户的文件 (放在 \dirname{$HOME/.texlive2005}
      目录下的)。

\item 增加了对应的 \envname{TEXMFCONFIG} 和 \envname{TEXMFSYSCONFIG}
      变量，分别用于设置针对用户和系统的，专门存放配置文件的目录树。所以你需要将个人使用的
      \filename{fmtutil.cnf} 和 \filename{updmap.cfg}
      放到合适位置。不过还有一种方法是在 \filename{texmf.cnf} 里边重新定义
      \envname{TEXMFCONFIG} 或 \envname{TEXMFSYSCONFIG}
      变量。无论如何，这两个值对应的实际目录都必须正确存在。参见
      第~\pageref{sec:texmftrees}~页的第~\ref{sec:texmftrees}~节。

\item 虽然我们在上一年就已经使用了 \cmdname{pdfetex} 作为输出程序，但在它输出 \dvi\
      格式时会禁用 \verb|\pdfoutput| 等原语
      (primitive)。这一年，我们按照预期计划取消了这一兼容性限制。所以，如果你的文档里使用了
      \verb|\ifx\pdfoutput\undefined| 这样的语句来判断是否正在 PDF
      输出模式下，现在就必须修改了。你可以使用 \pkgname{ifpdf.sty} 宏包 (对 plain \TeX\
      和 \LaTeX{} 都适用) 来判断，或者仿照这个文件里的判断原理自己写一个。

\item 上一年，我们将格式文件的输出改成了和这些文件本身一样的 8
      位字符。在你需要的情况下，可以使用新的 TCX 文件 \filename{empty.tcx} 来获得原有的
      \verb|^^| 表示方式。例如: 

\begin{verbatim}
latex --translate-file=empty.tcx yourfile.tex
\end{verbatim}

\item 新增了用于转换 DVI 为 PDF 的 \cmdname{dvipdfmx} 程序，这是
      \cmdname{dvipdfm} 的一个比较活跃更新的版本 (我们仍然提供
      \cmdname{dvipdfm}，但不建议你继续使用)。

\item 新增了叫 \cmdname{pdfopen} 和 \cmdname{pdfclose} 的两个程序，用于控制
      Adobe Acrobat\slash Reader 在不重启程序的情况下重新载入 PDF 文件。(其他的
      PDF 阅读器，如 \cmdname{xpdf}, \cmdname{gv}, 和
      \cmdname{gsview}，都不会遇到这个问题。)

\item 为了保持一致性，将 \envname{HOMETEXMF} 和 \envname{VARTEXMF}
      环境变量分别更名为 \envname{TEXMFHOME} 和
      \envname{TEXMFSYSVAR}。还有一个针对单独用户的 \envname{TEXMFVAR}
      环境变量可用。参见上面的第一点。

\end{itemize}


\subsubsection{2006--2007}

2006--2007 年，\TL{} 的一个重大变化是增加了 \XeTeX{}，以 \texttt{xetex} 和
\texttt{xelatex} 程序的形式提供。请参见 \url{https://scripts.sil.org/xetex}。

\MP{} 也有可观的更新，并计划在未来实现更多的改进
(\url{https://tug.org/metapost/articles})，pdf\TeX{} 同样如此
(\url{https://tug.org/applications/pdftex})。

\TeX\ \filename{.fmt} (缓存格式) 文件和用于 MetaPost 和 \MF\ 的类似文件
现在存储在 \dirname{texmf/web2c} 的子目录中而不直接放在 \dirname{texmf/web2c}
目录下 (不过考虑到现有的 \filename{.fmt} 文件，直接放置在这个目录下的文件仍然
能被搜索到)。子目录的名称是根据当前使用的``引擎''决定的，比如 \filename{tex}
或 \filename{pdftex} 或 \filename{xetex}。这个变化不会对日常使用带来任何
影响。

(plain) \texttt{tex} 程序不再通过读取 \texttt{\%\&} 开头的第一行来决定
执行何种格式，而遵循纯粹的 Knuth 风格 \TeX\ 的传统。(\LaTeX\ 和其他所有的程序
仍然读取 \texttt{\%\&} 开头的行。)

当然，和往常一样，这一年里你能看到成百上千的宏包与程序得到更新。也和往常一样，
进一步的更新请使用 CTAN (\url{https://ctan.org})。

从内部角度上看，源代码树现在改为使用 Subversion 管理，并在我们的主页上提供了
到 Web 界面的链接，用于浏览代码树。我们希望它能成为未来几年中稳定的开发
平台。

末了，2006 年五月 Thomas Esser 宣布他将停止 te\TeX{}
(\url{https://tug.org/tetex}) 的更新。这样一来，大家对 \TL{} 的兴趣大增，尤其是在
\GNU/Linux 发行版中。(\TL{} 提供了一套新的 \texttt{tetex} 安装方案，
几乎和原有的 te\TeX{} 毫无二致。) 我们希望这些变化将最终转换为对整个 \TeX\
环境的改进，从而每个人都会受益。

\subsubsection{2008}

在 2008 年，整个 \TL{} 的基础架构都重新设计过并重新实现了。安装的完整
信息被存放在 \filename{tlpkg/texlive.tlpdb} 这个纯文本文件中。

除了许多其他的功能外，我们终于可以通过 Internet 在安装后更新 \TL{}
了，这是 MiK\TeX\ 早已提供了许多年的特性。我们希望能定期更新 \CTAN\ 上
新发布的软件包。

包含了一个重要的新引擎 Lua\TeX\ (\url{http://luatex.org})，除了
在排版上灵活性更上一层楼以外，它还提供了一个优秀的脚本语言供 \TeX\
文档内外使用。

对 Windows 和基于 Unix 系统的支持现在要一致得多了。尤其是大部分 Perl 和
Lua 脚本都能在 Windows 下使用，通过 \TL 内部包含的 Perl。

新的 \cmdname{tlmgr} 脚本 (第~\ref{sec:tlmgr}~节) 是在初始安装后管理
\TL{} 的通用界面。它处理了软件包更新和后续的格式文件、map 文件和语言文件
的重新生成，并可选地包含了本地添加的内容。

随着 \cmdname{tlmgr} 到来，禁用了 \cmdname{texconfig} 中编辑格式和
断字配置文件的功能。

今年还提供了大多数平台的 \cmdname{xindy} 索引生成程序
(\url{http://xindy.sourceforge.net})。

\cmdname{kpsewhich} 现在可以报告给定文件的所有匹配 (\optname{--all}
参数) 并限制列出特定目录下的匹配 (\optname{--subdir} 参数)。

\cmdname{dvipdfmx} 程序现在支持用 \cmdname{extractbb} 命令来解析
bounding box 信息，这是 \cmdname{dvipdfm} 包含但未曾出现在
\cmdname{dvipdfmx} 中的最后一个功能。

去除了 \filename{Times-Roman}, \filename{Helvetica} 等字体别名。不同的
宏包对它们的理解不同 (尤其是编码的处理不一样)，所以没有什么好的办法能解
决。

去除了 \pkgname{platex} 格式文件，以避免与日文 \pkgname{platex} 的命名
冲突，\pkgname{polski} 宏包现在被用作主要的波兰语支持。

从内部而言 \web\ 字符串 pool 文件被编译进了二进制文件中，这样可以方便
升级。

最终 Donald Knuth 在他的 `\TeX\ tuneup of 2008' 中的更新也被包含在这次
发布中。参见 \url{https://tug.org/TUGboat/Articles/tb29-2/tb92knut.pdf}。

\subsubsection{2009}

在 2009 年，为了充分利用 Lua\TeX\ 的 OpenType 支持等特性，Lua\AllTeX\
的默认输出格式是 PDF。新增叫做 \code{dviluatex} 和 \code{dvilualatex}
的这两个命令会以 DVI 输出方式运行 Lua\TeX{}。Lua\TeX\ 的主页在
\url{http://luatex.org}。

在与 Omega 的作者讨论后，原来的 Omega 引擎和 Lambda 格式文件被去掉了。
更新后的 Alpeh 和 Lamed 仍然在，同时保留的还有 Omega 实用工具。

包含了新版本的 AMS \TypeI\ 字体，包括 Computer Modern: 其中部分字形
随 Knuth 多年以来修改的 MetaFont 源代码更新，hinting 信息也更新了。
Euler 字体也整个由 Hermann Zapf 重新绘制了一遍 (参见
\url{https://tug.org/TUGboat/Articles/tb29-2/tb92hagen-euler.pdf})。
不过上述变化并没有改变字体的 metrics 文件。AMS 字体的主页在
\url{https://www.ams.org/tex/amsfonts.html}。

现在 Windows 和 Mac\TeX\ 都包含了新的 \GUI{} 前端 \TeX{}works。至于其他
的平台和更多的信息，请参见 \TeX{}works 的主页，\url{https://tug.org/texworks}。
设计这个跨平台前端的灵感来自于 \macOS{}\ 下的 TeXShop 编辑器，目标就是
易用。

在许多平台下包含了 Asymptote 图形程序，它实现了一套与 MetaPost 约略
相似的文本图形描述语言，但包含了先进的 3D 支持等其他特性。它的主页在
\url{https://asymptote.sourceforge.net}。

单独的 \code{dvipdfm} 程序已被 \code{dvipdfmx} 所替代，如果以 \code{dvipdfm}
这个名字调用的时候，后者会以一种特殊的兼容性模式运行。\code{dvipdfmx}
包含了 \acro{CJK} 支持，并包含了多年以来在 \code{dvipdfm} 基础上的许多
修正。

现在包括了 \pkgname{cygwin} 和 \pkgname{i386-netbsd} 平台下的可执行文件，
而我们建议 OpenBSD 和 FreeBSD 的用户使用他们自己的包管理系统提供的 \TeX{}，
另外这也是因为要编译出能在多种版本下都工作的二进制程序有些困难。

一些更不起眼的更新: 我们现在使用 \pkgname{xz} 这套稳定的压缩方式来替代
原有的 \pkgname{lzma} (\url{https://tukaani.org/xz/}); 在不和现有变量名
冲突的情况下允许文件中使用 |$| 字符; Kpathsea 库现在支持多线程了 (其中
用到了 MetaPost); 整个 \TL{} 的编译现在基于 Automake 了。

对过去历史的最终一点提示: 所有版本的 \TL{}，包括 \CD\ 标签这些附属材料，
都在 \url{ftp://tug.org/historic/systems/texlive} 提供。

\subsubsection{2010}
\label{sec:2010news} % keep with 2010

在 2010 年，缺省的 PDF 输出版本现在是 1.5，以支持更多压缩。这对所有输出
PDF 的 \TeX\ 引擎生效，也对 \code{dvipdfmx} 有效。载入 \pkgname{pdf14}
\LaTeX\ 宏包将改回 PDF~1.4，或者设置 |\pdfminorversion=4|。

在载入了 \LaTeX\ \code{graphics.cfg} 配置文件，而且输出的是 PDF 时，
pdf\AllTeX\ 现在\emph{自动地}将请求的封装 PostScript (EPS) 文件转换为
PDF，通过 \pkgname{epstopdf} 宏包。默认选项是为了避免覆盖任何手工创建
的 PDF 文件，但你也可以将 |\newcommand{\DoNotLoadEpstopdf}{}| (或
|\def...|) 放在 \cs{documentclass} 声明前以避免载入 \code{epstopdf}。
如果使用了 \pkgname{pst-pdf} 宏包，也不会载入它。要了解更多的细节，参
见 \pkgname{epstopdf} 宏包的文档 (\url{https://ctan.org/pkg/epstopdf-pkg})。

一个相关的变化是通过 \cs{write18} 特性从 \TeX\ 执行少量外部命令，现在
默认启用了。这些命令是 \code{repstopdf}, \code{makeindex}, \code{kpsewhich},
\code{bibtex}, 和 \code{bibtex8}; 这个列表定义在 \code{texmf.cnf}。必须
禁用这些外部命令的环境可以通过安装程序取消这个选项 (参见第~\ref{sec:options}~节)，
或者在安装后通过运行 |tlmgr conf texmf shell_escape 0| 覆盖这个值。

另一个相关的变化是 \BibTeX\ 和 Makeindex 现在默认会拒绝往任意目录写入
输出文件了 (类似 \TeX\ 本身)。这样使得它们能被启用给受限的 \cs{write18}
使用。要修改这个行为，可以设置 \envname{TEXMFOUTPUT} 环境变量，或者修改
|openout_any| 设置。

\XeTeX\ 现在支持与 pdf\TeX\ 一样的 margin kerning。(Font expansion 现在
还不支持。)

默认情况下，\prog{tlmgr} 现在回给每个更新的包保存一个备份
(\code{tlmgr option autobackup 1})，所以损坏的包更新可以简单地通过
\code{tlmgr restore} 恢复。如果你在安装后要执行更新，但没有足够的
磁盘空间来保存备份，可以运行 \code{tlmgr option autobackup 0}。

包含了这些新的程序: 用于排版日文的 p\TeX\ 引擎和相关实用工具; 支持了
Unicode \BibTeX\ 的 \BibTeX{}U 程序; \prog{chktex} 实用工具
(\url{https://baruch.ev-en.org/proj/chktex})
用来检查 \AllTeX\ 文档; \prog{dvisvgm}
(\url{https://dvisvgm.de}) 是 DVI 到 SVG 格式转换器。

现在包含了这些新平台的可执行文件: \code{amd64-freebsd},
\code{amd64-kfreebsd}, \code{i386-freebsd}, \code{i386-kfreebsd},
\code{x86\_64-darwin}, \code{x86\_64-solaris}。

我们忘记注明的一个 \TL{} 2009 的修改是: 许多 \TeX4ht 相关的可执行文件
(\url{https://tug.org/tex4ht}) 被从二进制目录删除了。通用的 \code{mk4ht}
程序可以用来运行这些 \code{tex4ht} 组合的任意一种。

最后，\TK\ \DVD\ 上的 \TL{} 发行不能再直接执行了 (听起来很奇怪)。
单张 \DVD\ 已经没有足够的空间了。一个优点是从物理 \DVD\ 的安装将会
快很多。

\subsubsection{2011}

\macOS{}\ 二进制程序 (\code{universal-darwin} 和 \code{x86\_64-darwin})
现在只能在 Leopard 及以后版本上工作; Panther 和 Tiger 都不再支持了。

用于参考文献处理的 \code{biber} 程序在常见平台下都已包含。它的分发和
\code{biblatex} 宏包紧密相关的，这个宏包完全重新实现了 \LaTeX{} 提供
的参考文献机制。

MetaPost (\code{mpost}) 程序不再创建或者使用 \code{.mem} 文件了。所
需的文件，比如 \code{plain.mp}，会在每次运行时读入。这个变化和将
MetaPost 作为一个库有关，这是另一个重要而用户不会注意的变化。

\code{updmap} 的 Perl 实现，先前只在 Windows 下使用，现在被更新并用
于所有平台了。这不应该造成任何用户可见的变化，除了它变得快得多。

恢复了 \cmdname{initex} 和 \cmdname{inimf} 程序。(但不包含其他的 \cmdname{ini*}
变种。)

\subsubsection{2012}

\code{tlmgr} 支持了从多个网络仓库更新。\code{tlmgr help} 输出中的多仓库
一节有更多信息。

对于 \code{xetex} 和 \code{xelatex}，\cs{XeTeXdashbreakstate} 参数被缺
省设置为~1。这允许了 em-dash 和 en-dash 后的换行，这和 plain \TeX,
\LaTeX, Lua\TeX\ 现在的行为一致。现有的 \XeTeX\ 文档如果需要保持完美的
换行兼容性则需要显式设置 \cs{XeTeXdashbreakstate} 为~0。

\code{pdftex} 和 \code{dvips} 等生成的输出文件现在可以超过 2 GB 了。

35 标准 PostScripts 字体现在在 \code{dvips} 输出中缺省保函了，因为现在
有太多这些字体的不同版本了。

默认设置的 \cs{write18} 受限执行模式中，\code{mpost} 成为了一个允许的
程序。

\filename{../texmf-local} 下现在也会出现一个 \code{texmf.cnf} 文件，
比如 \filename{/usr/local/texlive/texmf-local/web2c/texmf.cnf}。

\code{updmap} 脚本现在读取的是针对各个目录树的 \code{updmap.cfg}，而不
再是全局的配置文件。这个修改应该不容易发现，除非你直接编辑过 \code{updmap.cfg}
文件。\verb|updmap --help| 输出中有更多信息。

平台: 增加了 \pkgname{armel-linux} 和 \pkgname{mipsel-linux} 平台; 
\pkgname{sparc-linux} 和 \pkgname{i386-netbsd} 不再出现在主发行中。

\subsubsection{2013}

发行版布局: 为了简化，顶层的 \code{texmf/} 目录被并入 \code{texmf-dist/}。
现在 \code{TEXMFMAIN} 和 \code{TEXMFDIST} 这两个 Kpathsea 变量都被指向
\code{texmf-dist} 了。

为了简化安装合并了许多小的语言集合。

\MP: 加入对 PNG 输出和 (IEEE 双精度) 浮点数的原生支持。

Lua\TeX: 升级到 Lua 5.2，包含一个新的库 (\code{pdfscanner}) 来处理外部 PDF 页面
内容，以及其他功能 (见主页)。

\XeTeX\ (见其主页了解更多信息):
\begin{itemize*}
\item 使用 HarfBuzz 库替代 ICU 进行字体排版。(仍然使用 ICU 来支持输入编码、双向
排版，以及可选的 Unicode 断行。)
\item 使用 Graphite2 和 HarfBuzz 来替代 SilGraphite 进行 Graphite 排版。
\item 在 Mac 上，使用 Core Text 替代 (Apple 不再建议使用的) ATSUI。
\item 在名称相同的情况下优先使用 TrueType/OpenType 字体而不是 Type1 字体。
\item 修正偶尔出现的 \XeTeX\ 和 \code{xdvipdfmx} 字体查找不匹配的问题。
\item 支持 OpenType math 间距调整。
\end{itemize*}

\cmdname{xdvi}: 现在使用 FreeType 替代 \code{t1lib} 进行字体渲染。

\pkgname{microtype.sty}: 对 \XeTeX\ 的部分支持 (protrusion) 和对 Lua\TeX\ 的支持
(protrusion, font expansion, tracking)，已经其他改进。

\cmdname{tlmgr}: 新的 \code{pinning} 操作以方便配置多个仓库; 参见
\verb|tlmgr --help| 的对应章节，或者在线的
\url{https://tug.org/texlive/doc/tlmgr.html#MULTIPLE-REPOSITORIES}。

平台: \pkgname{armhf-linux}, \pkgname{mips-irix}, \pkgname{i386-netbsd}, 和
\pkgname{amd64-netbsd} 被重新加入; \pkgname{powerpc-aix} 被去除。

\subsubsection{2014}

2014 年我们收到了 Knuth 的又一个 \TeX\ 修正，这影响了所有的引擎，但可能唯一可见
的变化是在启动时恢复显示的 \code{preloaded format} 字符串。根据 Knuth 的说法，这
个字符串现在反应的时在启动时\emph{应该被}默认载入的格式，而不是在二进制程序中预
载入的未 dump 格式，该格式可能被很多方法覆盖。

pdf\TeX: 新的警告忽略参数 \cs{pdfsuppresswarningpagegroup}; 用来制造词间空白
(interword space) 的新命令: \cs{pdfinterwordspaceon}, \cs{pdfinterwordspaceoff},
\cs{pdffakespace}，它们可以帮助 PDF 文本重新排版 (reflowing)，

Lua\TeX: 对于字体载入和断字 (hyphenation) 有明显的变化和修正。最大的增加时一个新
的引擎，\code{luajittex} 和它的相关变体 \code{texluajit} 和 \code{texluajitc}。
它使用的是一个即时编译的 Lua 编译器 (在 \textsl{TUGboat} 文章
\url{https://tug.org/TUGboat/tb34-1/tb106scarso.pdf} 有详细介绍)。\code{luajittex}
还在开发中，所以并没有在所有平台提供，也比 \code{luatex}
要不稳定许多。我们及其作者都不建议使用它，除非为了试验 Lua 代码的即时编译 (JIT)
这样特殊的目的。

\XeTeX: 现在所有平台 (包括 Mac) 都支持所有的图像格式了。避免使用 Unicode 兼容性
decomposition fallback (但允许其他的变体); 为了与先前版本 \XeTeX\ 的兼容，优先于
Graphite 字体使用 OpenType 字体。

\MP: 支持了一个新的数字系统 \code{decimal} (十进制)，还包括一个配套的内部
\code{numberprecision}; 在 \filename{plain.mp} 有 Knuth 对 \code{drawdot} 的新定
义; SVG 和 PNG 输出的 bug 修正，等等。

独立的 \cmdname{pstopdf} Con\TeX{}t 实用程序会在这个版本后被去除，因为和系统同名
程序有冲突。但你仍然可以通过 \code{mtxrun --script pstopdf} 命令来执行它。

\cmdname{psutils} 被它新的维护者大幅更新了。使得许多很少使用的工具 (\code{fix*},
\code{getafm}, \code{psmerge}, \code{showchar}) 都只在 \dirname{scripts/} 目录中
提供，而不作为所有用户访问的应用程序 (如果以后发现这么做有问题，我们还可以改进)。
另外，还加入了一个新脚本，\code{psjoin}。

Mac\TeX\ 这个 \TeX\ Live 的重新发行版 (见第~\ref{sec:macosx}~节) 不再包括可选的、
只在 Mac 下提供的 Latin Modern 和 \TeX\ Gyre 字体包，因为用户现在已经很容易在自
己的系统下安装这些字体了。来自 ImageMagick 的 \cmdname{convert} 程序也被去除了，
因为 \TeX4ht (具体说来是 \code{tex4ht.env}) 现在直接使用 Ghostscript 了。

包含中文、日文和韩文的 \pkgname{langcjk} 集合被拆分为独立的语言集合，使得每个的
大小更合理。

平台: 加入了 \pkgname{x86\_64-cygwin}，去除了 \pkgname{mips-irix}; Microsoft 不
再支持 Windows XP，所以我们的程序也可能在以后不支持这个系统。

\subsubsection{2015}

\LaTeXe\ 现在默认包含了以前必须自己手工载入的 \pkgname{fixltx2e} 包的内容，所以
现在手工载入这个包不起任何作用了。一个新的 \pkgname{latexrelease} 包和其他的机制
控制了实现的功能。\LaTeX\ News \#22 和 ``\LaTeX\ changes'' 文档有更多的信息。顺
带，\pkgname{babel} 和 \pkgname{psnfss} 包尽管是 \LaTeX{} 的核心部分，是独立维护
的，所以不受这些改变的影响 (而且应该仍然继续有用)。

\LaTeXe\ 的内部现在包含了和 Unicode 相关的引擎配置 (包括哪些字符是字母、
primitive 的命名等等)，这些配置以前是 \TeX\ Live 的一部分。这个变化对用户应该是
没有影响的; 有些底层的内部控制命令被改名或者去除了，但行为应保持一致。

pdf\TeX: 支持 JPEG Exif 和 JFIF; 就算在 \cs{pdfinclusionerrorlevel}
是负值时也不输出警告; 同步到 \prog{xpdf}~3.04 版本。

Lua\TeX: 加入用于扫描 token 的 \pkgname{newtokenlib}; 对 \code{normal} 随机数生
成器等的 bug 修正。

\XeTeX: 图像处理的修正; 优先选择与 \prog{xetex} 处在同一个目录的
\prog{xdvipdfmx} 程序; 内部的 \code{XDV} 操作符有所变化。

MetaPost: 新的 \code{binary} numbersystem; 新的支持日语的 \prog{upmpost} 和
\prog{updvitomp} 程序，类似 \prog{up*tex}。

Mac\TeX: 更新了自带的 Ghostscript 包的 CJK 支持。\TeX\ Distribution 选项
面板支持了 Yosemite (\macOS{}~10.10)。\XeTeX{} 不再支持 resource-fork font
suitcase 格式 (通常没有扩展名); data-fork suitcase (\code{.dfont}) 仍然是支持的。

基础设施: 重新实现了 \prog{fmtutil} 脚本来按每个独立的目录树读取
\filename{fmtutil.cnf} 文件，类似 \prog{updmap}。Web2C \prog{mktex*} 脚本 (包括
\prog{mktexlsr}, \prog{mktextfm}, \prog{mktexpk}) 现在优先选择自己所在目录的程
序，而不总选用当前 \envname{PATH} 里的。

平台: \pkgname{*-kfreebsd} 被去除了，因为 \TeX\ Live 现在在这个平台下通过系统自
带的安装方式已经很容易获取了。

部分额外平台提供了定制二进制包 (\url{https://tug.org/texlive/custom-bin.html})。
此外，为节省空间部分平台现在没有在 \DVD\ 中提供，但可以通过网络安装。

\subsubsection{2016}

Lua\TeX: 原生命令有大量改变，包括重命名和去除，还有一些节点结构的重整。这些修改
在 Han Hagen 的“Lua\TeX\ 0.90 对于 PDF 的后端改变及更多”
(\url{https://tug.org/TUGboat/tb37-1/tb115hagen-pdf.pdf}) 一文中有详细的总结。如
果要了解更多细节，参见 Lua\TeX\ 手册，
\OnCD{texmf-dist/doc/luatex/base/luatex.pdf}。

Metafont: 新的实验性姊妹程序 MFlua 和 MFluajit，为了试验性目标在 \MF 中集成 Lua。

MetaPost: Bug 修正和内部为了 MetaPost 2.0 做的准备。

\code{SOURCE\_DATE\_EPOCH} 支持所有除 Lua\TeX\ 以外的引擎 (下一个版本支持全部引
擎)，原始的 \code{tex} 也故意不支持: 如果设置了 \code{SOURCE\_DATE\_EPOCH}
环境变量，它的值会被用作 PDF 输出的时间戳。如果还设置了
\code{SOURCE\_DATE\_EPOCH\_TEX\_PRIMITIVES},
\code{SOURCE\_DATE\_EPOCH} 的值会被用于初始化 \TeX\
的原生命令 \cs{year}, \cs{month}, \cs{day}, \cs{time}。pdf\TeX\
手册有例子和细节。

pdf\TeX: 新的原生命令 \cs{pdfinfoomitdate}, \cs{pdftrailerid},
\cs{pdfsuppressptexinfo}，用来控制每次会执行变化的输出值。这些功能只用于 PDF
输出，不用于 DVI。

Xe\TeX: 新的原生命令 \cs{XeTeXhyphenatablelength},
\cs{XeTeXgenerateactualtext},\\ \cs{XeTeXinterwordspaceshaping},
\cs{mdfivesum}; 字符分类限制提高到了 4096; DVI 版本提升。

其他实用工具: 
\begin{itemize*}
\item \code{gregorio} 是一个新的程序，作为 \code{gregoriotex} 宏包的一部分用于
Gregorian 圣歌音乐的排版; 它缺省就被包括在了 \code{shell\_escape\_commands}
中。

\item \code{upmendex} 是一个创建索引的程序, 基本上和 \code{makeindex}
兼容，支持了 Unicode 排序，以及其他的一些修改。

\item \code{afm2tfm} 现在只将基于音调的高度调整上调; 新选项 \code{-a}
忽略所有调整。

\item \code{ps2pk} 可以处理扩展 PK/GF 字体了。
\end{itemize*}

Mac\TeX: 去除了 \TeX\ Distribution Preference Pane; 它的功能现在在 TeX Live
Utility 里提供了; 更新了捆绑的 GUI 应用; 给需要在 Ghostscript 中使用多种 CJK
字体的用户提供了新的 \code{cjk-gs-integrate} 脚本。

基础架构: 支持系统级别的 \code{tlmgr} 配置文件; 校验包的完整性; 如果有 GPG 还会
校验网络更新的签名。安装程序和 \code{tlmgr} 都会作这些检查。如果没有 GPG 则跳过
这一步。

平台: \code{alpha-linux} 和 \code{mipsel-linux} 被移除了。

\subsubsection{2017}

Lua\TeX: 更多 callback，更多排版控制，更多对内部机制的控制; 在一些平台
增加了用来动态载入代码的 \code{ffi} 库。

pdf\TeX: 去年的 |SOURCE_DATE_EPOCH_TEX_PRIMITIVES| 环境变量被改名为
|FORCE_SOURCE_DATE|，没有功能改变。如果 \cs{pdfpageattr} token 列表包含了字符串
\code{/MediaBox}，则会忽略输出默认的 \code{/MediaBox}。

Xe\TeX: Unicode/OpenType 数学支持现在是基于 HarfBuzz 的 MATH table 支持实现的; 
还有一些 bug 修正。

Dvips: 保证最后一次设置的 papersize special 是最后选中的纸张尺寸，和
\code{dvipdfmx} 以及宏包希望的效果一致; \code{-L0} 选项 (\code{L0}
配置文件设置) 可以用来恢复以前的行为，也就是第一次设置纸张尺寸的 special
才有效。

ep\TeX, eup\TeX: 来自 pdf\TeX\ 新的原生命令 \cs{pdfuniformdeviate},
\cs{pdfnormaldeviate}, \cs{pdfrandomseed}, \cs{pdfsetrandomseed},
\cs{pdfelapsedtime}, \cs{pdfresettimer}。

Mac\TeX: 从这一年开始，Mac\TeX\ 只支持 Apple 还在发布安全更新的
\macOS{}\ 版本，使用的平台名称是 |x86_64-darwin|，目前这包括 Yosemite,
El~Capitan, 和 Sierra (10.10 及以后的)。给更老版本的 \macOS{}\
用的二进制程序不会包含在 Mac\TeX\ 里面，但 \TeX\ Live 里还会提供
(|x86_64-darwinlegacy|, \code{i386-darwin}, \code{powerpc-darwin})。

基础架构: \envname{TEXMFLOCAL} 树现在 (默认) 是在 \envname{TEXMFSYSCONFIG} 和
\envname{TEXMFSYSVAR} 之前搜索了; 这是为了更好地符合本地文件优先于系统文件的
原则。另外，\code{tlmgr} 有一个新的 \code{shell} 模式，进行交互和脚本使用，和
一个新的 \code{conf auxtrees} 功能来方便添加和删除额外的目录树。

\code{updmap} 和 \code{fmtutil}: 这些脚本如果在没有明确指定是系统模式
(\code{updmap-sys}, \code{fmtutil-sys}, 或者 \code{-sys} 选项)，还是用
户模式 (\code{updmap-user}, \code{fmtutil-user}, 或者 \code{-user} 选项)
的时候会给出警告。这是为了减少常见的不小心启用用户模式而导致系统更新无法
生效。细节请参见 \url{https://tug.org/texlive/scripts-sys-user.html}。

\code{install-tl}: Mac 下的个人路径，比如 \envname{TEXMFHOME}，现在默认设置为和
Mac\TeX\ 一样的 (|~/Library/...|)。增加了新选项 \code{-init-from-profile}
来以特定 profile 启动安装; 新命令 \code{P} 来直接保存一个 profile; 新的 profile
变量名 (但先前的名字也还支持)。

Sync\TeX: 临时文件的名字现在被改为了 \code{foo.synctex(busy)}，而不是
\code{foo.synctex.gz(busy)} (不再有~\code{.gz})。需要删除临时文
件的前端和编译系统因此需要调整。

其他工具: \code{texosquery-jre8} 是一个新的跨平台程序，用来在 \TeX\ 文档
中获取系统 locale 和其他 OS 信息; 它已经包含在了 |shell_escape_commands|
中，可以在受限的 shell 环境中执行。(texosquery 也支持更老的 JRE 版本，但
不能在受限模式下启用，因为 Oracle 由于安全问题不再支持那些版本了。)

平台: 见上述的 Mac\TeX\ 条目。没有其他的变化。

\subsubsection{2018}

Kpathsea: 对于非系统目录缺省进行大小写不敏感的文件名匹配; 可以通过设置
\code{texmf.cnf} 或者将 \code{texmf\_casefold\_search} 环境变量设置为~\code{0}
来禁用。详细信息见 Kpathsea 手册 (\url{https://tug.org/kpathsea})。

ep\TeX, eup\TeX: 新的原语 \cs{epTeXversion}。

Lua\TeX: 准备在 2019 年升级到 Lua 5.3: 大部分平台下都提供了一个
\code{luatex53} 程序，但必须被改名为 \code{luatex} 才能使用。或者使用
\ConTeXt\ Garden (\url{https://wiki.contextgarden.net}) 的文件; 那里有
更多的信息。

MetaPost: 对错误的路径方向、TFM 和 PNG 输出的修正。

pdf\TeX: 允许位图字体使用 encoding vector; 当前目录不再被加入 PDF ID 的计算; 关于
\cs{pdfprimitive} 的 bug 修正及相关改变。

Xe\TeX: 在插入 PDF 图像文件时支持 \code{/Rotate}; 如果输出程序失败会返回非 0
退出码; 许多 UTF-8 和原语的修正。

Mac\TeX: 参见下面关于 macOS 版本支持的变化。除此之外，Mac\TeX\ 在
\code{/Applications/TeX/} 下安装的文件经过了重新组织使之更为清晰; 现在这个目录
包含四个 GUI 程序 (BibDesk, LaTeXiT, TeX Live Utility, 和 TeXShop)，它的子目录
则包含其余的实用程序和文档。

\code{tlmgr}: 新的 \code{tlshell} (Tcl/Tk) 和 \code{tlcockpit} (Java) 前端; JSON
输出; \code{uninstall} 现在可以替代 \code{remove} 使用; 新的
\code{print-platform-info} 选项。

平台支持:
\begin{itemize*}
\item
去除: \code{armel-linux}, \code{powerpc-linux}。

\item \code{x86\_64-darwin} 支持 10.10--10.13
(Yosemite, El~Capitan, Sierra, 和 High~Sierra).

\item \code{x86\_64-darwinlegacy} 支持 10.6--10.10 (尽管 10.10 最好使用
\code{x86\_64-darwin})。去除了所有对 10.5 (Leopard) 的支持，也就是说
\code{powerpc-darwin} 和 \code{i386-darwin platforms} 被去除了。

\item Windows: 不再支持 XP。
\end{itemize*}

\subsubsection{2019}

Kpathsea: 更一致的括号展开和路径拆分; 用来替代 \code{.} 的 \code{TEXMFDOTDIR}
新变量，以方便子目录搜索 (见 \code{texmf.cnf} 中的注释)。

ep\TeX, eup\TeX: 新的原语 \cs{readpapersizespecial} 和 \cs{expanded}。

Lua\TeX: 现在使用的是 Lua 5.3，随之而来的是算术和接口的变化。自带的 pplib
用于读取 PDF 文件，所以可以去掉对于 poppler 的依赖 (也就不再依赖 C++); Lua
接口有相应的变化。

MetaPost: \code{r-mpost} 命令被认作加了 \code{--restricted} 选项的别名，并被加入
默认提供的受限命令中。十进制和二进制模式的最小精度现在是 2。MPlib
不再提供二进制模式，但独立的 MetaPost 中仍然提供。

pdf\TeX: 新的原语 \cs{expanded}; 如果新的原语 \cs{pdfomitcharset} 的参数被设置为
1，那么 PDF 输出会忽略 \code{/CharSet} 字符串，因为不能保证它是正确的，而
PDF/A-2 和 PDF/A-3 要求保证它的正确性。

Xe\TeX: 新的原语 \cs{expanded},
\cs{creationdate},
\cs{elapsedtime},
\cs{filedump},
\cs{filemoddate},
\cs{filesize},
\cs{resettimer},
\cs{normaldeviate},
\cs{uniformdeviate},
\cs{randomseed}; 扩展 \cs{Ucharcat} 来输出 active 的字符。

\code{tlmgr}: 支持用 \code{curl} 作为下载程序; 优先用 \code{lz4} 和 gzip 而不是
   \code{xz} 做本地备份; 优先使用系统提供的压缩和下载程序，而不是 \TL\ 自带的，
   除非设置了 \code{TEXLIVE\_PREFER\_OWN} 环境变量。

\code{install-tl}: 新的 \code{-gui} 选项 (不带参数) 现在是 Windows 和 Mac 下的默
认的选项，它会使用一个新的 Tcl/TK 图形界面 (见第~\ref{sec:basic}~节和
第~\ref{sec:graphical-inst})~节。

实用程序: 
\begin{itemize*}
\item \code{cwebbin} (\url{https://ctan.org/pkg/cwebbin}) 现在是 \TeX\ Live 中的
CWEB 实现，支持更多的方言，并包括构建 mini-index 使用的 \code{ctwill} 程序。

\item \code{chkdvifont}: 报告 \dvi{} 文件中字体的信息，包括 tfm/ofm, vf, gf, pk
格式。

\item \code{dvispc}: 让 DVI 文件的 specials 对页面无关。
\end{itemize*}

Mac\TeX: \code{x86\_64-darwin} 现在支持 10.12 或更新的版本 (Sierra,
High Sierra, Mojave); \code{x86\_64-darwinlegacy} 仍然支持 10.6 或更新版本。
不再包含 Excalibur 拼写检查器，因为它需要 32 位支持。

平台支持: 去除了 \code{sparc-solaris}。

\subsubsection{2020}

通用的更新: \begin{itemize}
\item 所有 \TeX\ 引擎，包括 \texttt{tex} 的 \cs{input} 原语，现在都支持以组分隔
的文件名参数，作为跟系统有关的扩展。标准的用空格或者标识符分隔的文件名的使用完全
不受影响。按组分隔的参数一开始是 Lua\TeX\ 先实现的; 现在它被推广到所有的引擎中了。
ASCII 双引号字符 (\texttt{"}) 一开始会被从文件名中去掉，但在输入后不变。这个改变
目前不会影响 \LaTeX{} 的 \cs{input} 命令，因为那是对标准 \cs{input} 原语重新定义
的宏。

\item \texttt{kpsewhich}、\texttt{tex}、\texttt{mf} 以及所有其他引擎的的
新选项 \texttt{--cnf-line}, \texttt{tex}，以支持通过命令行指定任意配置文件。

\item 今年和往年对多个引擎添加的许多原语是为了让所有引擎都拥有一系列共通的功能
(见 \textsl{\LaTeX\ News \#31}, \url{https://latex-project.org/news})。

\end{itemize}

ep\TeX, eup\TeX: 新的原语 \cs{Uchar}, \cs{Ucharcat},
\cs{current(x)spacingmode}, \cs{ifincsname}; 更新 \cs{fontchar??} 和
\cs{iffontchar}。只针对 eup\TeX{} 的: \cs{currentcjktoken}。

Lua\TeX: 与 HarfBuzz 库的集成，作为新引擎 \texttt{luahbtex} (被用于
\texttt{lualatex}) 和 \texttt{luajithbtex} 提供。新的原语: 
\cs{eTeXgluestretchorder}, \cs{eTeXglueshrinkorder}。

pdf\TeX: 新的原语 \cs{pdfmajorversion}; 这个命令只改变 PDF 输出的版本号; 它对
任何 PDF 内容没有影响。\cs{pdfximage} 等类似命令现在以和 \cs{openin} 相同的方式
来搜索图像文件了。

p\TeX: 新的 \cs{ifjfont}, \cs{iftfont} 原语，它们也包含在 ep\TeX,
up\TeX, eup\TeX\ 里。

Xe\TeX: 对 \cs{Umathchardef}, \cs{XeTeXinterchartoks}, \cs{pdfsavepos} 的修正。

Dvips: 位图字体的输出编码，以更好的支持复制粘贴
(\url{https://tug.org/TUGboat/tb40-2/tb125rokicki-type3search.pdf})。

Mac\TeX: Mac\TeX\ 和 \texttt{x86\_64-darwin} 现在需要 10.13 或者更新的系统
(High~Sierra, Mojave, 和 Catalina); 
\texttt{x86\_64-darwinlegacy} 支持 10.6 和更新的系统。Mac\TeX\ 已经被公证
(notarized) 命令行程序使用强化的运行时环境，因为 Apple 现在要求安装包必须提
供这些。BibDesk 和 \TeX\ Live Utility 不再是 Mac\TeX\ 的一部分，因为它们没有
被公证，但提供的 \filename{README} 文件里列出了获取它们的链接。

\code{tlmgr} 和基础架构: \begin{itemize*}
\item 在软件包无法现在时，自动重试一次。
\item 新选项 \texttt{tlmgr check texmfdbs}, 用来检查每个目录树 \texttt{ls-R} 文件和
\texttt{!!} 配置的一致性。
\item 软件包容器使用带版本号的文件名，比如
\texttt{tlnet/archive/\textsl{pkgname}.rNNN.tar.xz}; 对用户应该没有影响，但对于
分发来说会是一个明显的改变。
\item \texttt{catalogue-date} 信息不在从 \TeX~Catalogue 获得了，因为它通常和软件
包更新没有关系。
\end{itemize*}

\subsubsection{2021}

一般更新: 
\begin{itemize}
\item Donald Knuth 对 \TeX{} 和 Metafont 进行的 2021 年调优更改已被整合
(\url{https://tug.org/TUGboat/tb42-1/tb130knuth-tuneup21.pdf})。
这些更改也可在 CTAN 上作为 \code{knuth-dist} 和 \code{knuth-local} 包提供。
如预期的那样，这些修复仅适用于罕见情况，并不会影响实际操作中的行为。

\item 除了原始 \TeX{} 外: 
如果 \cs{tracinglostchars} 设置为 3 或更高，
缺失字符将导致错误，
而不仅仅是在日志文件中显示消息，
缺失的字符代码将以十六进制显示。

\item 除了原始 \TeX{} 外: 
一个新的整数参数 \cs{tracingstacklevels}，
如果为正值，并且 \cs{tracingmacros} 也为正值，
将在每个相关日志行上输出一个前缀，
指示宏展开的深度 (例如，深度为 2 时为 |~..|)。
此外，宏记录将在深度 $\ge$ 参数值时被截断。

\end{itemize}

Aleph: 基于 Aleph 的 \LaTeX{} 格式 \code{lamed} 已被移除。 
\code{aleph} 二进制文件本身仍然包含在内并支持。

Lua\TeX{}: 
\begin{itemize*}
\item Lua 5.3.6。
\item 用于 \cs{tracingmacros} 的嵌套级别回调，
作为新的 \cs{tracingstacklevels} 的通用变体。
\item 将数学字符标记为保护，以防止作为文本处理。
\item 删除传统数学代码路径的宽度/ic 补偿。
\end{itemize*}

MetaPost: 
\begin{itemize*}
\item 支持用于可重复输出的 |SOURCE_DATE_EPOCH| 环境变量。
\item 避免在 \texttt{mpto} 中错误地结尾 \texttt{\%}。
\item 记录 \texttt{-T} 选项，其他手册修复。
\item 在二进制和十进制模式下更改 \texttt{epsilon} 的值，
以便 |mp_solve_rising_cubic| 函数按预期工作。
\end{itemize*}

pdf\TeX{}: 
\begin{itemize*}
\item 新增原语 \cs{pdfrunninglinkoff} 和 \cs{pdfrunninglinkon}; 
例如，用于禁用在页眉和页脚中生成链接。
\item 当 “\cs{pdfendlink} 结束于与 \cs{pdfstartlink} 不同的嵌套级别” 时发出警告而不是中止。
\item 在 \texttt{fmt} 文件中转储 \cs{pdfglyphtounicode} 分配。
\item 源代码: 删除 \texttt{poppler} 支持，
因为同步上游太难。
在原生 \TL{} 中，pdf\TeX{} 一直使用 \texttt{libs/xpdf}，
这是从 \texttt{xpdf} 中裁剪和调整的代码。
\end{itemize*}

Xe\TeX{}: 修复了数学字符间距问题。

Dvipdfmx: 
\begin{itemize*}
\item 现在默认安全调用 Ghostscript; 
要覆盖此设置 (从而假设所有输入文件都是可信的)，
请使用 \verb|-i dvipdfmx-unsafe.cfg|。
要使用 PSTricks 与 \XeTeX{}，
这是必需的，如下所示: \\
\verb|xetex -output-driver="xdvipdfmx -i dvipdfmx-unsafe.cfg -q -E" ...|
\item 如果找不到图像文件，则以错误状态退出。
\item 扩展的颜色支持特殊语法。
\item 用于操作 |ExtGState| 的特殊命令。
\item 兼容性特殊命令 \code{pdfcolorstack} 和 \code{pdffontattr}。
\item 实验性支持 \code{dviluatex} 的扩展 |fnt_def|。
\item 支持虚拟字体的新特性以回退日文字体定义。
\end{itemize*}

Dvips: 
\begin{itemize*}
\item 默认 PostScript 文档标题现在是输入文件的基本名称，可以通过新选项 \texttt{-title} 覆盖。
\item 如果找不到 \texttt{.eps} 或其他图像文件，则以错误状态退出。
\item 支持虚拟字体的新特性以回退日文字体定义。
\end{itemize*}

Mac\TeX{}: Mac\TeX{} 及其新的二进制文件夹 \texttt{universal-darwin} 现在需要 \macOS{} 10.14 或更高版本
(Mojave、Catalina 和 Big~Sur); 
不再存在 |x86_64-darwin| 二进制文件夹。
通过 Unix \texttt{install-tl} 提供的 |x86_64-darwinlegacy| 二进制文件夹支持 10.6 及更新版本。

今年对 Macintosh 来说是重要的一年，
因为 Apple 在 11 月推出了 ARM 机器，
并将在多年内销售和支持 ARM 和 Intel 机器。
\texttt{universal-darwin} 中的所有程序都具有 ARM 和 Intel 的可执行代码。
两种二进制文件都从相同的源代码编译。

额外的程序 Ghostscript、LaTeXiT、\TeX{} Live Utility 和 TeXShop 都是通用的，
并且都签署了加固运行时，
因此它们今年都包含在 Mac\TeX{} 中。

\code{tlmgr} 和基础设施: 
\begin{itemize*}
\item 仅保留主存储库的 \texttt{texlive.tlpdb} 的一个备份。
\item 在系统和 Perl 版本之间实现更高的可移植性。
\item \texttt{tlmgr info} 报告新的 \texttt{lcat-*} 和 \texttt{rcat-*} 字段，
用于本地与远程目录数据。
\item 子命令的全部日志记录移动到一个新的日志文件: \\
\texttt{texmf-var/web2c/tlmgr-commands.log}。
\end{itemize*}

\subsubsection{2022}

一般更新: 
\begin{itemize}
\item 新引擎 \code{hitex}，它输出自己的 HINT 格式，
特别为在移动设备上阅读技术文档而设计。
GNU/Linux、Windows 和 Android 的 HINT 查看器可以从 \TL{} 单独获取。

\item \code{tangle}、\code{weave}: 支持可选的第三个参数来指定输出文件。

\item Knuth 的程序 \code{twill} 现在包含在内，用于为原始 \texttt{WEB} 程序制作迷你索引。

\end{itemize}

跨引擎扩展（原始 \TeX{}、Aleph 和 hi\TeX{} 除外）: 
\begin{itemize}
\item 新增原语 \cs{showstream}，用于将 \cs{show} 输出重定向到文件。
\item 新增原语 \cs{partokenname} 和 \cs{partokencontext}，
允许覆盖空行、vbox 结束等时发出的 \cs{par} 标记的名称。
\end{itemize}

ep\TeX{}，eup\TeX{}: 
\begin{itemize*}\raggedright
\item 新增原语: \cs{lastnodefont}、\cs{suppresslongerror}、
\cs{suppressoutererror}、\cs{suppressmathparerror}。
\item 现在可用 pdf\TeX{} 扩展 \cs{vadjust pre}。
\end{itemize*}

Lua\TeX{}: 
\begin{itemize*}
\item 支持 PDF 2.0 的结构化目标。
\item PDF 2.0 的 PNG /Smask。
\item \code{luahbtex} 的可变字体接口。
\item 数学默认模式中不同的根式样式默认值。
\item 可选地阻止选定的可分字符创建。
\item 改进 TrueType 字体实现。
\item 更高效的 \cs{fontdimen} 分配。
\item 忽略只有本地 \code{par} 节点后跟方向同步节点的段落。
\end{itemize*}

MetaPost: 无限宏展开的错误修复。

pdf\TeX{}: 
\begin{itemize*}\raggedright
\item 支持 PDF 2.0 的结构化目标。
\item 对于字母间隔字体，如果指定了显式 \cs{fontdimen}6，则使用它。
\item 始终在行首发出警告。
\item 对于具有自动调整字符间距 (\cs{pdfappendkern} 和 \cs{pdfprependkern}) 的字符，
仍然进行突出显示; 同样，对隐式和显式连字符进行自动调整。
\end{itemize*}

p\TeX{} 等: 
\begin{itemize*}
\item p\TeX{} 重大更新至 4.0.0，以更好地支持当前 \LaTeX{}。
\item 新增原语 \cs{ptexlineendmode} 和 \cs{toucs}。
\item \cs{ucs} (以前在 uptex、euptex 中可用) 现在在 p\TeX{} 和 ep\TeX{} 中也可用。
\item 区分八位字符和日文字符，
如 Hironori Kitagawa 在 TUGboat 文章中讨论的那样
(\url{https://tug.org/TUGboat/tb41-3/tb129kitagawa-char.pdf})。
\end{itemize*}

Xe\TeX{}: 新增包装脚本 \texttt{xetex-unsafe} 和 \texttt{xelatex-unsafe}，
用于简化调用需要 \XeTeX{} 和 PSTricks 透明操作符的文档，
这本质上是不安全的 (直到 Ghostscript 中重新实现为止)。
为了安全，使用 Lua\AllTeX{}。

Dvipdfmx: 
\begin{itemize*}
\item 支持 PSTricks 而无需 \texttt{-dNOSAFER}，除了透明度。
\item \texttt{-r} 选项再次有效，用于设置位图字体分辨率。
\end{itemize*}

Dvips: 默认情况下，不尝试自动媒体调整以旋转纸张尺寸; 
新选项 \texttt{-{}-landscaperotate} 重新启用。

\code{upmendex}: 实验性支持阿拉伯语和希伯来语; 改进的字符分类和语言支持。

Kpathsea: \texttt{kpsewhich -all} 返回的第一个路径现在与常规 (非全部) 搜索相同。

\code{tlmgr} 和基础设施: 
\begin{itemize*}
\item 默认使用 https 访问 \code{mirror.ctan.org}。
\item 使用 \code{TEXMFROOT} 而不是 \code{SELFAUTOPARENT} 以便于重新定位。
\item \code{install-tl}: 如果下载或安装失败，将自动继续并稍后重试 (一次)。
\end{itemize*}

Mac\TeX{}: Mac\TeX{} 及其二进制文件夹 \texttt{universal-darwin} 需要 \macOS{} 10.14 或更高版本
(Mojave、Catalina、Big~Sur、Monterey)。
仅通过 Unix \texttt{install-tl} 提供的 |x86_64-darwinlegacy|
二进制文件夹支持 10.6 (Snow~Leopard) 及更新版本。

平台: 今年 (2022年) 没有平台支持的变化。
但是，明年的发行版 (2023年) 我们计划将 Windows 二进制文件从 32 位切换到 64 位。
不幸的是，我们无法同时支持两者。

\subsubsection{2023}

\noindent Windows: 正如之前宣布的那样，
\TL{} 现在包含 64 位 Windows 二进制文件，
而不是32位的。
新目录名为 \texttt{bin/windows} (将 64 位二进制文件放入名为``32''的目录中似乎不合适)。
我们知道这将给 Windows 用户带来额外的工作，
但似乎没有更好的替代方案。
如果需要 32 位的 Windows 支持，
你需要安装\TL{} 2022。
从 Windows 11 开始，
基于 ARM 的 Windows 支持 64 位 AMD/Intel 的仿真，
因此可以使用当前的 \TL。
然而，基于 ARM 的 Windows 10 无法仿真 Intel/AMD 64位，
因此也需要 32 位 TeX Live。
请参阅单独的 \TL{} Windows 网页 (\url{https://tug.org/texlive/windows.html})。

\noindent 跨引擎扩展 (原始 \TeX{} 和 e-\TeX{} 除外):
\cs{special} 后跟一个新关键字``\texttt{shipout}''，
将参数标记的扩展延迟到 \cs{shipout} 时进行，
就像非 \verb|\immediate\write| 一样。

\noindent ep\TeX{}、eup\TeX{}:
\begin{itemize*}
\item 不再构建``原始'' (u)ptex; (u)ptex 现在以 e(u)ptex的兼容模式运行。p\TeX{} 工具也同样，具体如下。
\item 新增原语: \cs{tojis}、\cs{ptextracingfonts}、\cs{ptexfontname}。
\item 对于 \cs{font}，支持 JIS/UCS 的新语法。
\end{itemize*}

\noindent Lua\TeX{}:
\begin{itemize*}
\item 新的原语 \cs{variablefam} 允许数学字符保持其类别，同时让族适应。
\item 改进了从右到左的注释区域
\item 上述跨引擎``延迟\cs{special}''。
\item 在 2023 年 5 月发布的 Lua\TeX{} 1.17.0 中:
默认禁用了 socket 库; 新的命令行选项 \code{--socket} 启用了它，
以及\code{--shell-escape} (而不是\code{--shell-restricted})。
此外，mime库现在始终可用，
并且新的函数 \code{os.socketsleep} 和 \code{os.socketgettime} 也始终可用。
最后，修复了一些绕过各种安全功能的隐蔽方法。
\end{itemize*}

\noindent MetaPost:
修复了一些错误。\texttt{svg->dx} 和 \texttt{svg->dy} 现在是 \texttt{double} 类型，
以提高精度;
更新了 \verb|mp_begin_iteration|;
修复了 \texttt{mplib} 中的内存泄漏。

\noindent pdf\TeX{}:
\begin{itemize*}
\item 新增原语 \cs{pdfomitinfodict}，完全省略 \texttt{/Info} 字典。
\item 新增原语 \cs{pdfomitprocset}，控制省略 \texttt{/ProcSet} 数组:
如果该参数为负，则包含 \texttt{/ProcSet};
如果该参数为 0 并且 pdftex 生成 PDF 1.x 输出，则包含 \texttt{/ProcSet}。
\item 使用 \cs{pdfinterwordspaceon} 时，
如果当前字体的编码在位置 32 有一个 \texttt{/space} 字符，
则使用该字符;
否则，使用 (新) 默认字体 \texttt{pdftexspace} 的 \texttt{/space} 字符。
可以使用新的原语 \cs{pdfspacefont} 覆盖该默认字体。同样的新过程用于 \cs{pdffakespace}。
\end{itemize*}

\noindent p\TeX{}等:
\begin{itemize*}
\item 如上所述，\texttt{ptex} 现在以兼容模式运行 \texttt{eptex}，而不是单独构建。
\item p\TeX{} 工具 (pbibtex、pdvitype、ppltotf、ptftopl) 合并到相应的 up\TeX{} 版本中，
并以兼容模式运行。
\end{itemize*}

\noindent Xe\TeX:
修复了 \cs{topskip} 和 \cs{splittopskip} 在 \cs{XeTeXupwardsmode} 激活时的计算;
上述跨引擎``延迟 \cs{special}''。

\noindent Dvipdfmx:
新增选项 \texttt{-{}-pdfm-str-utf8}，
用于创建 pdfmark 和/或书签。

\noindent \BibTeX{}u:
\begin{itemize*}
\item 这个 \BibTeX{} 变体与 \BibTeX{} 大部分向上兼容，
具有更好的 (基于Unicode的) 多语言支持。它已经在 \TL{} 中存在多年。
\item 今年，增加了更多支持 CJK 语言的功能，
一些功能从日本的 (u)pbibtex 和其他程序扩展而来。
\end{itemize*}

\noindent Kpathsea:
在类 Unix 平台上支持猜测输入文件编码，
如同在 Windows 上一样;
启用于 (\texttt{e}) \texttt{p} (\texttt{la}) \texttt{tex}、\texttt{pbibtex}、\texttt{mendex}。

\noindent \code{tlmgr} 和基础设施:
\begin{itemize*}
\item 在 \macOS{} 上默认使用文本界面。
\item 首先安装核心包，其他包重试一次。
\item 对磁盘空间是否足够进行简单检查。
\end{itemize*}

\noindent Mac\TeX{}:
\begin{itemize*}
\item Mac\TeX{} 及其二进制文件夹 \texttt{universal-darwin} 需要 \macOS{} 10.14 或更高版本
(Mojave、Catalina、Big Sur、Monterey、Ventura)。
仅在 Unix \texttt{install-tl} 中可用的 \texttt{x86\_64-darwinlegacy} 二进制文件夹支持 10.6
(Snow Leopard) 及更高版本。
\item Mac\TeX{} 中的 GUI 包现在包含 \texttt{hintview}，
一个 \macOS{} 查看器用于 HINT 文档
(由 \texttt{hitex} 和 \texttt{hilatex} 引擎为移动设备创建;
请参阅 Hi\TeX{} 网页，
\url{https://hint.userweb.mwn.de/hint/hitex.html})。
GUI 包不再安装文档文件夹，
而是用一个简短的 \texttt{READ~ME} 文件和一个关于 \texttt{hintview} 的页面取代。
\item DVD 上的 \texttt{Extras} 文件夹中额外的 \TeX{} 软件已被包含下载链接的文档取代。
\end{itemize*}

\noindent 平台:
\begin{itemize*}
\item 如上所述，新的 \texttt{windows} 二进制目录包含 64 位 Windows 二进制文件。
\item \texttt{bin/win32} 二进制目录已删除，因为我们无法同时支持 32 位和 64 位 Windows。
\item \texttt{i386-cygwin} 二进制目录已删除，因为 Cygwin 不再支持i386。
\end{itemize*}

\htmlanchor{news}
\subsection{当前: 2024}
\label{sec:tlcurrent}

\noindent 跨引擎变化 (原始 \TeX{}、e-\TeX{} 和 Lua\TeX{} 除外): 
\begin{itemize*}
\item 避免因 \cs{output} 和 \cs{write} 大括号的恶意使用导致的崩溃。
\item 微小的内循环优化。
(这些更改均由 David Fuchs 完成。)
\end{itemize*}

\noindent Lua\TeX{}: 
\begin{itemize*}
\item Lua 级别的文件写入检查现在与 \TeX{} 级别的检查类似。
\item 如果设置了 Lua 值 \code{texconfig.trace\_extra\_newline}，
则在宏参数之间的日志中输出空行。
在 2020-2023 年，这种情况是默认的;
在此之前，不会输出此类空行，这是其他引擎的行为。
\item 过去，Windows 平台的 \code{texlua} (而不是 \code{luatex}，也不是其他平台)
内部会对参数执行通配符扩展。现在不再发生这种情况。
\end{itemize*}

\noindent MetaPost:
\begin{itemize*}
\item 现在包含用于区间算术的 MPFI 库; 使用 \texttt{-{}-numbersystem=interval} 启用。
\end{itemize*}

\noindent pdf\TeX{}: 
\begin{itemize*}
\item 在大端系统上更可靠的文本提取。
\item 增加对损坏的 pfb、fmt、pdf 文件的检查。
\item 避免由于不寻常的 pdf 包含导致写入损坏的 pdf 文件。
\item 手册转换为 \LaTeX{} 并进行了彻底审查，但实质性更新较少。
\end{itemize*}

\noindent ep\TeX{}、eup\TeX{}: 
\begin{itemize*}
\item 新的简单编码转换工具 \texttt{ptekf}。
\item \texttt{eptex} 不再单独构建; 它在 \texttt{euptex} 的遗留编码模式下运行。
\end{itemize*}

\noindent Xe\TeX{}: 
\begin{itemize*}
\item 支持文件名中超出基本多文种平面的 Unicode 字符。
\end{itemize*}

\noindent Dvipdfmx: 
\begin{itemize*}
\item 以与 pdf\TeX{} 相同的方式计算时区偏移。
\item 处理变体选择器以应对新的 Adobe-Japan1-UCS2 CMap。
\item 在虚拟字体中为 (u)p\TeX{} 回退多字节字符到 OFM 字体。
\item 支持 \code{pdf:image} 特殊命令中的 \code{named} 关键字。
\end{itemize*}

\noindent Kpathsea: 
\begin{itemize*}
\item 支持扩展的安全文件名检查，
同时允许在 \code{TEXMF}[\code{SYS}]\code{VAR} 下写入，
适用于 Lua\AllTeX{}; 新增函数和相应的 \code{kpsewhich} 选项。
\item 支持新的变量 \code{TEXMF\_OUTPUT\_DIRECTORY}
(与传统的 \code{TEXMFOUTPUT} 一起)，
使子程序可以访问引擎调用中的 \texttt{-{}-output-directory} 设置。
\end{itemize*}

\noindent CWEB: 
\begin{itemize*}
\item 支持以 Lua\TeX{} 作为后端 \TeX{} 引擎。
\item 修复了在无换行点的行上发生的缓冲区溢出问题。
\end{itemize*}

\noindent \code{tlmgr}: 
\begin{itemize*}
\item 新动作 \code{bug}，帮助查找错误报告信息。
\item 在所有平台上使用我们自己的根证书包，以更广泛地支持 LWP，特别是在 \macOS{} 上。
\item 检测远程仓库是否比本地安装更旧 (即过时的镜像)，并且不更新，以避免错误的包移除。
\item 支持 \ConTeXt{} 纸张尺寸设置。
\item 修剪镜像仓库 (主仓库和tlcontrib) 的 tlpdb 文件备份。
\end{itemize*}

\noindent 平台: 
\begin{itemize*}
\item \ISO\ 镜像再次包含所有平台的二进制文件。
在过去的几年中，
一些二进制集被修剪，
但今年我们没有作为用户组福利制作实体 DVD，
所以可以再次包含所有内容。
而且，即使是最大限度地修剪的镜像也太大，
无法适应单层 DVD，
因此修剪对 2024 年的志愿刻录者没有好处。
更多信息请访问 \url{https://tug.org/texcollection/}。
\item Robert Alessi 在 \url{https://sr.ht/~ralessi/texlive-openbsd/}
提供了在 OpenBSD 上原生 \TL{} 安装的二进制文件。
\end{itemize*}

\noindent Mac\TeX{}: 
现在包含最新的 Ghostscript 10.03.0，
所有四个 GUI 程序的更新，
以及 (如往常一样) 所有新的 \TL{} 更改。
二进制文件仍然支持 macOS 10.14 (Mojave，2018) 及更高版本。
(如往常一样，更早的 Mac 版本由 \texttt{x86\_64-darwinlegacy} 二进制文件支持，
这些文件是 \TL{} 的一部分，但不是 Mac\TeX{} 的一部分。)

\subsection{未来}

我们打算继续发布新的 \TL{} 版本，
并希望提供更多的文档、更多的程序、更完善和更全面检查的宏和字体树以及其他与 \TeX{} 相关的内容。
所有这些工作都是由志愿者在业余时间完成的，
而且总有更多的工作要做。
请参阅\url{https://tug.org/texlive/contribute.html}。

请将纠正、建议和帮助的提议发送到：
\begin{quote}
\email{tex-live@tug.org} {\small (您无需订阅即可发布)}\\
\url{https://tug.org/texlive}
\end{quote}

\medskip
\noindent \textsl{祝你使用 \textrm{\TeX} 愉快！}

\section{翻译说明}

这里对简体中文版本《\TL{} 指南》，即本文档中遵循的翻译惯例作一简要说明: 

\begin{itemize}

\item package, 视上下文，有时翻译为软件包，有时翻译为宏包。
\item format file, 即 \TeX{} 程序一般都会预载入的 \texttt{.fmt}
文件。本文档中翻译为格式文件。
\item scheme, 本文档中译为 (安装) 方案。
\item collection, 本文档中译为 (软件) 集合。
\item 本文档中有时对原文没有采用逐字逐句的对比翻译，而是总括其意思，转换为
更易为中文 \TeX{} 用户习惯的表达方式。
\item architecture/platform, 是意思比较相近的词，基本上是只某种 CPU
和对应这个 CPU 的操作系统。比如 i386-linux。本文里翻译为架构、平台、体系
结构等等。
\item binary, 二进制文件，其实就是说可执行程序文件和库文件了。

\end{itemize}

2007 年的简体中文版本由 Jiang Jiang, Jinsong Zhao, Yue Wang,
Helin Gai 翻译。其中 Jinsong Zhao 负责 Windows 部分的翻译，Yue Wang
和 Helin Gai 进行了校对，Jiang Jiang 则负责其余的翻译和统稿。

2008 年的简体中文版本由 Jiang Jiang, Yue Wang 和 Jinsong Zhao 翻译。

2009 年的简体中文版本由 Jiang Jiang 和 Jinsong Zhao 翻译。

2010 到 2020 年的简体中文版本都由 Jiang Jiang 翻译。

2024 年的简体中文版本由 Ran Wang (王然) 翻译。

\end{document}
