From f83869e1a4c062015ecd052071107b34ead8b09e Mon Sep 17 00:00:00 2001 From: syvshc Date: Sun, 7 Mar 2021 19:33:22 +0800 Subject: [PATCH] v0.1 --- .gitignore | 4 +- .latexmkrc | 33 ++++ README.md | 9 +- body/actions.tex | 354 ++++++++++++++++++++++++++++++++++++++++++ body/examples.tex | 20 +++ body/mirrors.tex | 53 +++++++ body/options.tex | 20 +++ body/preface.tex | 22 +++ body/syntex.tex | 25 +++ fig/collection.png | Bin 0 -> 34527 bytes fig/scheme.png | Bin 0 -> 19054 bytes tlmgr-intro-zh-cn.sty | 67 ++++++++ tlmgr-intro-zh-cn.tex | 20 +++ 13 files changed, 625 insertions(+), 2 deletions(-) create mode 100644 .latexmkrc create mode 100644 body/actions.tex create mode 100644 body/examples.tex create mode 100644 body/mirrors.tex create mode 100644 body/options.tex create mode 100644 body/preface.tex create mode 100644 body/syntex.tex create mode 100644 fig/collection.png create mode 100644 fig/scheme.png create mode 100644 tlmgr-intro-zh-cn.sty create mode 100644 tlmgr-intro-zh-cn.tex diff --git a/.gitignore b/.gitignore index 859f705..463fd3a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ # these rules might exclude image files for figures etc. # *.ps # *.eps -# *.pdf +tlmgr-intro-zh-cn.pdf ## Generated if empty string is given at "Please type another file name for output:" .pdf @@ -274,3 +274,5 @@ TSWLatexianTemp* # Makeindex log files *.lpz + +.history \ No newline at end of file diff --git a/.latexmkrc b/.latexmkrc new file mode 100644 index 0000000..3643a21 --- /dev/null +++ b/.latexmkrc @@ -0,0 +1,33 @@ + +@default_files = ('tlmgr-intro-zh-cn.tex'); + +# Cleanup mode +# [2 is for doing aux files cleanup before building, ex] +# [1 is for doing ALL output files cleanup] +# [0 is for not doing cleanup] +$cleanup_mode = 0; + +# Use XeLaTeX to compile. +# [5 is XeLaTeX] +$pdf_mode = 1; + +$clean_ext = "synctex.gz acn acr alg aux bbl bcf blg brf fdb_latexmk glg glo gls idx ilg ind lof log lot out run.xml toc pdf thm toe ist idx"; + +# Preview mode & Auto complie after save. +$preview_continuous_mode = 1; + +# Set XeLaTeX option. +$pdflatex = "xelatex -halt-on-error -interaction=nonstopmode -synctex=1 %O %S"; + +# Process index. [Use Chinese index program] +# $makeindex = 'zhmakeindex %O -o %D %S'; + +# Preview mode +# [1 is for running a previewer after building] +# [0 is for not running it] +# $preview_mode = 1; + + +$show_time=1; + +$sleep_time=1; \ No newline at end of file diff --git a/README.md b/README.md index 4a832b5..61e720f 100644 --- a/README.md +++ b/README.md @@ -1 +1,8 @@ -# tlmgr-intro-zh-cn \ No newline at end of file +# 关于 `tlmgr` 使用方法的简介 + +这个文档是对 [texdoc tlmgr](https://www.tug.org/texlive/devsrc/Master/texmf-dist/doc/latex/tlmgrbasics/tlmgr.pdf) 的翻译以及补充. 由于翻译水平与专业知识有限, 文档中有一些词汇和语句翻译的并不好, 如果您有更好的翻译或者纠正我的错误, 可以在该项目处提出 [issue](https://github.com/syvshc/tlmgr-intro-zh-cn/issues) 或者 [PR](https://github.com/syvshc/tlmgr-intro-zh-cn/pulls). + +TeX Live 使用 `tlmgr` 来管理安装方案, 集合和软件包, 如果还没有安装 TeX Live, 可以参考 [install-latex-guide-zh-cn](https://www.tug.org/texlive/devsrc/Master/texmf-dist/doc/latex/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf) 与 [texlive-zh-cn](https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf) 进行安装. 但是 [`tlmgr` 官方文档](https://www.tug.org/texlive/doc/tlmgr.html) 过于冗长, 有很多一般用户接触不到的功能, 在这里将它简化, 拿出一些比较基础使用的命令来介绍. + +# 开源协议 +本文档遵循 GNU GPL 3.0 及以后的开源协议. \ No newline at end of file diff --git a/body/actions.tex b/body/actions.tex new file mode 100644 index 0000000..91a4a84 --- /dev/null +++ b/body/actions.tex @@ -0,0 +1,354 @@ +% !TeX root = ../tlmgr-intro-zh-cn.tex +\section{操作 (ACTIONS)} + +\subsection{\mdseries\ac{info}} + +\paragraph{使用方法:} + +% \begin{lstlisting} +% tlmgr info [collections|schemes|+\textit{pkgs}+] +% \end{lstlisting} + +\begin{quote} + \tlmgr{} \ac{info} \oarg{\upshape collections|schemes|\textit{pkgs}}. +\end{quote} + +如果不带参数, 将会列出所有软件包仓库中的软件包, 把哪些已经被安装的软件包加上前缀 \texttt{i}. + +如果带参数 \texttt{collections} 或 \texttt{schemes}, 将会列出全部的集合或安装方案, 而不列出软件包, 同样地, 把已经安装的集合或安装方案加上前缀 \texttt{i}. + +如果带了任意其他的参数, 将会依次列出 \marg{pkgs} 中的每一个软件包的信息: 名称 (name), 分类 (category), 简短和详细的介绍 (short and long description), 软件包大小 (size), 安装状态 (status), 以及 \tl 中的版本号. 如果这个软件包没有在本地安装, 那么 \tlmgr 将会在远端仓库去查找它. + +对于普通的软件包 (除了集合与安装方案), 软件包大小是分 4 个部分显示的 (run/src/doc/bin). 对于集合, 显示的是所有直接\textbf{从属} (dependent) 于它的软件包的大小总和, 但是不包括从属的集合. 对于安装方案, 显示的是所有直接从属于它的集合与软件包的大小总和. + +如果在本地与线上都没有完整的匹配结果, 那么 \tlmgr 将会使用 \ac{search} 操作寻找名称与它相关的软件包, 见 \nameref{subsec:search} 小节. + +\ac{info} 操作也会显示从 \TeX\,Catalogue 获取的信息: 软件包版本 (package revision), 日期 (date), 以及许可证 (license). 不过这些信息, 尤其是软件包版本, 获得的信息只能用做参考, 这是由于不同部分的更新有时间差. + +旧操作 \ac{show} 与 \ac{list} 已经被合并到了 \ac{info} 操作中, 但是为了兼容性这两个操作仍然可用. + +\paragraph{{\mdseries\ac{info}} 的特有选项:} +\begin{description} + \item \op{-list}\par + 如果 \op{-list} 与一个软件包一起指定, 那么将会同时列出这个软件包包含的文件, 包括那些特定平台上的从属包. 如果与 \texttt{collections} 或者 \texttt{schemes} 一起指定, 那么 \op{-list} 将会以一个相似的方式输出依赖关系. + \item \op{-only-installed}\par + 如果指定这个选项, 那么将不会使用安装源的信息, 只会显示本地已经安装的软件包, 集合或安装方案. + \item \op{-only-remote}\par + 只列出远端仓库中的软件包, 下面是一条测试哪些软件包在某远端仓库中可用的命令: + \begin{quote} + \tlmgr{} \op{-repo} \marg{url} \op{-only-remote} \ac{info} + \end{quote} + 注意 \op{-only-installed} 与 \op{-only-remote} 不能同时使用. +\end{description} + +\clearpage + +\subsection{\mdseries\ac{search}}\label{subsec:search} + +\paragraph{使用方法:} +\begin{quote} + \tlmgr{} \ac{search} \marg{what}. +\end{quote} + +默认状态下, \tlmgr{} 会在所有本地安装的软件包中搜索名字, 短描述与长描述中是否含有参数 \marg{what}, 其中 \marg{what} 被解释为一个 (Perl) 正则表达式. + +\paragraph{{\mdseries\ac{search}} 的特有选项:} +\begin{description} + \item \op{-file}\par + 列出含有 \marg{what} 的文件名 (含路径), 比如使用 + \begin{quote} + \tlmgr{} \ac{search} \op{-file} \texttt{amsmath} + \end{quote} + 那么包含在文件夹 \texttt{amsmath} 下的文件也会被显示, 无论它们的文件名是否含有 \texttt{amsmath}. + \item \op{-global}\par + 在安装介质 (installation medium) 的 \tl{} Database 中搜索, 而不是本地安装. + \item \op{-word}\par + 严格匹配软件包的名字与描述 (并不是文件名). 比如使用 + \begin{quote} + \tlmgr{} \ac{search} \op{-word} \texttt{table} + \end{quote} + 就不会匹配到含有 \texttt{tables} 的软件包, 除非它同时含有一个 \texttt{table}. + \item \op{-all}\par + 匹配所有的项目: 软件包名, 长短描述与文件名 (含路径). +\end{description} + +\clearpage + +\subsection{\mdseries\ac{install}} +\paragraph{使用方法:} +\begin{quote} + \tlmgr{} \ac{install} \marg{pkgs}. +\end{quote} + +安装 \marg{pkgs} 中的每一个软件包, 除非某软件包已经被安装过了. 默认状态下所有指定的的软件包的从属文件也会被同时安装. \ac{install} 操作不会更改已经安装的软件包, 如果想使用最新版本的软件包, 可以使用 \nameref{subsec:update} 小节介绍的 \ac{update} 操作. + +\paragraph{{\mdseries\ac{install}} 的特有选项:} +\begin{description} + \item \op{-dry-run}\par + 在终端显示将要执行的操作, 而不进行安装. + \item \op{-reinstall}\par + 重新安装一个软件包 (包括对集合的依赖), 即使它看起来已经安装了, 比如它已经存在于 TLPDB (\tl{} Package Database) 中. 这个选项对于恢复在层级中不小心删除的软件包很有用. + + 重新安装时,只遵循对普通包的依赖 (不遵循类别Scheme或Collection的依赖)% + \footnote{When re-installing, only dependencies on normal packages are followed (i.e., not those of category Scheme or Collection).}. + \item \op{-with-doc}, \op{-with-src}\par + \texttt{install-tl} 给了一个 ``不安装文档/源文件'' 的选项, 但是我们不推荐使用这个选项. (默认状态下会安装所有的文件). 如果用了这个选项, 那么当用户想获得软件包的文档或者源文件的时候, 可以使用这两个选项与 \op{--reinstall}, 用 \texttt{fontspec} 宏包为例: + \begin{quote} + \tlmgr{} \ac{install} \op{-reinstall} \op{-with-doc} \op{-with-src} \texttt{fontspec} + \end{quote} + \item \op{-no-depends}\par + 不安装软件包的从属. (默认状态下, 安装一个软件包会保证它包含它所有的从属. ) +\end{description} + + \textbf{注意}: \ac{install} 操作并不会自动向系统目录中添加新的\textbf{符号链接} (symlinks), 需要自行运行 + \begin{quote} + \tlmgr{} \ac{path} \key{add} + \end{quote} + 如果您想使用这个功能并且想添加新的符号链接, 可以阅读 \href{https://www.tug.org/texlive/doc/tlmgr.html#path}{path} 操作. + +\subsection{\mdseries{\ac{update}}}\label{subsec:update} + +\paragraph{使用方法:} +\begin{quote} + \tlmgr{} \ac{update} \marg{\textup{-all|}pkgs} +\end{quote} + +把参数 \marg{pkgs} 中的宏包升级到安装源中最新的可用版本, 必须指定 \marg{\textup{-all}} 或至少一个软件包. + +\paragraph{{\mdseries\ac{update}} 的特有选项:} +\begin{description} + \item \op{-all}\par + 升级全部的软件包 (除了 \tlmgr{} 本身). 如果把 \tlmgr 也列出安装范围将会报错, 除非同时指定了 \op{-force} 与 \op{-self} 选项. (见下) + + 除了对已安装的软件包进行升级之外, 对本地安装的集合的升级 (默认是) 将它与服务器上的集合进行同步, 无论是新增还是移除. + + 类似地, 如果服务器上的一个本地已经安装的集合新增了一个软件包, 那么它将会被加入本地安装, 这被称作 ``auto-install'', 同时会在使用选项 \op{-list} 的时候被显示. + + 在集合从属软件包的检查中, 如果有一些被用户强制删除 (forcibly removed), 也就是用户使用对它们使用了 \tlmgr{} \ac{remove} \op{-force} 命令 (见 \nameref{subsec:remove} 小节). 如果想重新安装任何一个被强制删除的软件包, 要使用 \hyperlink{op:-reinstall-forcibly-removed}{\op{-reinstall-forcibly-removed}} 选项. + + 重申一遍: 自动新增与移除是完全通过集合之间的比较完成的. 因此, 如果用户手动安装了一个稍后将被服务器移除的软件包, \tlmgr{} 不会注意到它, 也不会在本地移除它. (尽量不要主动进行架构重组,因为 TLPDB 不记录软件包的来源仓库\footnote{It has to be this way, without major rearchitecture work, because the tlpdb does not record the repository from which packages come from.}) + + 如果用户想在最近的更新中忽略某些软件包, 可以使用下面的 \hyperlink{op:exclude}{\op{-exclude}} 选项. + \item \op{-self}\par + 如果有更新的 \tlmgr 版本存在, 那么升级 \tlmgr{} 本身, 即 \tlmgr 的基础架构. 在 Windows 设备上这个选项也会升级 \tl 自带的 Perl 解释器. + + 如果这个选项与 \op{-all} 一起被指定, 那么 \tlmgr 将会先升级自身, 如果成功了, \tlmgr 将会自动重启并执行接下来的升级. + + 表 \ref{tab:update} 展示了 \ac{update} 中 \op{-self} 与 \op{-all} 的关系. + \begin{table} + \caption{\ac{update}的几种关系}\label{tab:update} + \begin{center} + \begin{tabularx}{35em}{>{\raggedright}p{14em}@{\texttt{\#}\ }>{\raggedright\arraybackslash\ttfamily}X}\toprule + \tlmgr{} \ac{update} \op{-self} & 仅升级 \tlmgr 本身\\ + \tlmgr{} \ac{update} \op{-self} \op{-all} & 升级 \tlmgr 本身和全部可升级软件包\\ + \tlmgr{} \ac{upadte} \op{-force} \op{-all} & 升级全部软件包但是\textbf{不}升级 \tlmgr\\ + & 最后一个有风险, 不建议使用!\\\bottomrule + \end{tabularx} + \end{center} + \end{table} + \item \op{-dry-run}\par + 在终端显示将要执行的操作, 而不进行安装. 这个选项有比 \op{-list} 更详细的显示内容. + \item \op{-list} \oarg{pkgs}\par + 简略地列出即将被更新, 新增或移除的软件包, 但不做实质的更改. 如果同时指定了 \op{-all}, 那么将列出所有可用的更新. 如果同时指定了 \op{-self} 但是不指定 \op{-all}, 那么只会列出可更新的核心软件包 (\tlmgr, \tl 的核心架构, Windows 上的 Perl 等等). + + 如果不指定 \op{-all} 或 \op{-self}, 但是给出了具体的软件包 \oarg{pkgs}, 那么将检查 \oarg{pkgs} 中的可更新软件包并列出. + + 如果不指定 \op{-all} 或 \op{-self}, 同时也没有给出 \oarg{pkg}, 那么 \tlmgr 就会假定使用了 \op{-all}, 也就是说 \tlmgr{} \ac{update} \op{-\op{list}} 与 \tlmgr{} \ac{update} \op{-list} \op{-all} 是一样的. + \item \hypertarget{op:exclude}{\op{-exclude} \marg{pkg}} \par + 在更新程序中排除软件包 \marg{pkg} 本身以及所有平台特定的软件包, 比如 + \begin{quote} + \tlmgr{} \ac{update} \op{-all} \op{-exclude} \texttt{a2ping} + \end{quote} + 将不会升级 \texttt{a2ping}, \texttt{a2ping.i386-linux}, 以及任何其它的 \texttt{a2ping.xxx} 软件包. + + 如果这个选项指定了一个宏包, 程序将会在以下情况报错并退出: \marg{pkg} 将被自动安装, \marg{pkg} 将被自动移除, 或者 \marg{pkg} 是被手动删除并需要被重新安装\footnote{reinstallation of a forcibly removed package.}的时候. \op{-exclude} 选项不支持这些情况. + \item \op{-no-dependent}\par + 如果用户升级一个软件包, 正常情况下所有依赖的软件包在必要的情况下都会被升级. 这个选项会抑致这个行为. + \item \hypertarget{op:-reinstall-forcibly-removed}{\op{-reinstall-forcibly-removed}}\par + 在通常情况下 \tlmgr 不会自动安装那些被用户强制删除的软件包, 比如被 \ac{remove} \op{-force} 删除, 或者在之前的升级中被选项 \op{-no-auto-install} 禁止安装的软件包. + \item \op{-no-auto-remove} \oarg{pkgs}\par + 默认状态下, \tlmgr 将会尝试删除存在于集合中但是在服务器中已经被删除的软件包. 这个选项会阻止这些删除操作, 如果同时指定 \op{-all} 则范围为全部软件包, 如果指定 \oarg{pkgs}, 则范围为给定的软件包. 这可能导致 \TeX 安装的不一致, 因为软件包的作者可能重命名软件包或者改变软件包的位置, 所以这个选项不推荐使用\footnote{This can lead to an inconsistent TeX installation, since packages are not infrequently renamed or replaced by their authors. Therefore this is not recommended.}. + \item \op{-no-auto-install} \oarg{pkgs}\par + 默认状态下, \tlmgr 会自动安装服务器上的新软件包, 与指定选项 \op{-all} 的效果相同. 这个选项阻止了所有的自动安装, 如果同时指定 \op{-all} 则范围为全部软件包, 如果指定 \oarg{pkgs}, 则范围为给定的软件包. + + 此外, 在 \op{-no-auto-install} 选项下完成升级之后, 那些应该被自动安装的软件包会被认为成\textbf{被用户强制删除的}. 所以, 如果 \texttt{foobar} 是唯一一个服务器上新增的软件包, 那么 + \begin{quote} + \tlmgr{} \ac{update} \op{-all} \op{-no-auto-install} + \end{quote} + 等价于 + \begin{quote} + \tlmgr{} \ac{upadte} \op{-all}\\ + \tlmgr{} \ac{remove} \op{-force} \texttt{foobar} + \end{quote} + 同样地, 因为软件包的作者可能重命名软件包或者改变软件包的位置, 所以这个选项不推荐使用. + \item \hypertarget{op:backup}{\op{-backup}, \op{-backupdir} \marg{dir}}\par + 这两个选项会在\textbf{升级之前}创建软件包的备份, 也就是说会备份升级之前最新的软件包, 如果不指定这两个选项, 那么将不会创建备份. 如果指定了 \op{-backupdir} 同时 \marg{dir} 是一个可写且有足够空间的路径, 那么 \tlmgr 将会在这个路径下创建备份文件. 如果仅指定了 \op{-backup}, 那么备份将会被创建在 \nameref{subsec:option} 小节中设置的位置, 默认在 \tl 根目录下的 \texttt{texlive//tlpkg/backups} 中. + + \textbf{注}: \href{https://www.tug.org/texlive/doc/tlmgr.html#update-option...-pkg}{tlmgr 文档} 原文为: If neither option is given, no backup will made. 但是 \tlmgr 在 \tl{}2010 以后将自动备份关键词 \key{autobackup} 默认设置为 1, 也就是说, 即使不使用 \op{-backup} 选项, 也会自动将软件包备份在默认位置, 方便用户使用 \nameref{subsec:restore} 操作回滚. 更新日志见 \href{https://www.tug.org/texlive/doc/texlive-en/texlive-en.html#x1-780009.1.7}{texlive-en} + + \item \op{-force}\par + 强制升级所有软件包, 不包括 \tlmgr 本身, 除非同时指定了 \op{-self} 选项. 不推荐. + + 同样地, \ac{update} \op{-list} 将会无视这个选项按它本身该有的样子显示. +\end{description} + +\textbf{注意}: 如果本地安装的软件包的版本高于服务器端的时候 (比如设置的镜像站过时了), \tlmgr 会忽略这个软件包而不进行降级. + +\clearpage + +\subsection{\mdseries{\ac{restore}}}\label{subsec:restore} + +\paragraph{使用方法:} + +\begin{quote} + \ac{restore} \oarg{pkg} \oarg{revision} \\ + \ac{restore} \marg{\upshape -all} +\end{quote} + +这个操作将从之前的备份中回滚软件包版本. + +如果指定了 \marg{\upshape -all}, 那么将会从可找到的备份中回滚所有的软件包版本. + +如果不指定 \oarg{pkg} 与 \oarg{revision}, 那么将列出所有软件包的可用备份的版本. + +如果指定了 \oarg{pkg} 但是没有指定 \oarg{revision}, 那么就列出软件包 \oarg{pkg} 的所有可用的备份版本, 比如使用 \tlmgr{} \ac{restore} \texttt{fancyhdr}, 那么将会得到如下形式的输出 +\begin{verbatim} + Available backups for fancyhdr: xxxxx (yyyy-MM-dd HH:mm) +\end{verbatim} +其中 \texttt{xxxxx} 为 \texttt{fancyhdr} 可用备份的版本号. + +当且仅当同时指定 \oarg{pkg} 与一个可用的版本号 \oarg{revision} 时, \tlmgr 会从备份中将 \oarg{pkg} 回滚到版本 \oarg{revision}. + +\paragraph{\textmd{\ac{restore}}的特有选项:} +\begin{description} + \item \op{-all}\par + 尝试从从可找到的备份中回滚所有的软件包版本. 其他的非选项 (non-option) 的参数, 如 \oarg{pkg} 将不可用. + \item \op{-backupdir} \marg{dir}\par + 指定一个供 \tlmgr 获取备份的路径, 如果不使用这个选项, 那么 \tlmgr 就会使用从 TLPDB 的配置文件. + \item \op{-dry-run}\par + 在终端显示将要执行的操作, 而不进行回滚. + \item \op{-force}\par + 强制进行回滚\footnote{原文为: Don't ask questions.}. + \item \op{-json}\par + 将输出打印为 JSON 样式. +\end{description} + +\clearpage + +\subsection{\mdseries{\ac{remove}}}\label{subsec:remove} + +\paragraph{使用方法:} + +\begin{quote} + \tlmgr{} \ac{remove} \marg{pkgs} +\end{quote} + +移除 \marg{pkgs} 中给出的软件包. 如果要移除一个集合, 那么将移除这个集合下的所有软件包. 除非指定了 \op{-no-depends}, 入市不移除这个集合下的任何集合. 然而, 当移除一个软件包的时候, 它的从属永远不会被移除. + +\paragraph{\textmd{\ac{remove}}的特有选项:} +\begin{description} + \item \op{-dry-run}\par + 在终端显示将要执行的操作, 而不进行实质的删除. + \item \op{-no-depends}\par + 不移除从属软件包. + \item \op{-all}\par + 卸载整个 \tl, 会询问用户是否删除, 除非指定了 \op{-force} 选项. + \item \op{-force}\par + 默认状态下, 移除一个软件包或者一个集合的从属集合是不允许的. 使用这个选项可以无条件地轶软件包, 要谨慎使用. + + 如果使用 \tlmgr{} \ac{remove} \op{-force} 移除了一个软件包, 那它在 \tlmgr{} \ac{update} \op{-list} 中被认为是 \texttt{forcibly removed}. +\end{description} + +\clearpage + +\subsection{\mdseries{\ac{option}}}\label{subsec:option} +\paragraph{使用方法:} + +\begin{quote} + \tlmgr{} \ac{option} \\ + \tlmgr{} \ac{option} \texttt{help} \\ + \tlmgr{} \ac{option} \marg{key} \\ + \tlmgr{} \ac{option} \marg{key} \oarg{value} +\end{quote} + +\begin{enumerate}[(1)] + \item 第一种形式列出当前的全局 \tl 设置, 带有一个简短的介绍, 每一种设置里括号中的词就是修改这个设置需要的 \key{key}, 比如要修改备份文件的路径 可以使用 \tlmgr{} \ac{option} \key{backupdir} \oarg{dir}. + \begin{quote} + \ttfamily Directory for backups (\textbf{backupdir}): tlpkg/backups + \end{quote} + \item 第二种形式与第一种很像, 它会在 \tlmgr{} \ac{option} 的基础上列出可以被设置但是当前没有值的选项, + \item 第三种形式是列出 \marg{key} 对应的值, + \item 第四种形式将 \marg{key} 的值设置为 \oarg{value} +\end{enumerate} + +表 \ref{tab:option} 中是一些可用的 \marg{key} 值. 使用 \tlmgr{} \ac{option} \key{help} 来获得更详细的列表 + +\begin{table}[!hpb] + \caption{\tlmgr{} \ac{option} 的部分可用选项}\label{tab:option} + \begin{center} + \begin{small} + \begin{tabular}{>{\ttfamily}ll} + autobackup & 升级操作是否备份,\\ + backupdir & 备份文件的位置,\\ + repository & 默认的软件包仓库,\\ + docfiles & 安装文档文件,\\ + srcfiles & 安装源文件,\\ + sys\_bin & 通过 \texttt{path} 操作链接到的可执行文件的目录\\ + sys\_man & 通过 \texttt{path} 操作链接到的手册文件的目录\\ + sys\_info& 通过 \texttt{path} 动作链接到的信息文件的目录\\ + desktop\_integration & 仅 Windows: 创建开始菜单的快捷方式\\ + fileassocs& 仅 Windows: 改变文件关联\\ + multiuser & 仅 Windows: 为所有用户安装\\ + \end{tabular} + \end{small} + \end{center} +\end{table} + + +一个常见 \ac{option} 的用法是它可以在从 DVD 安装以后, 永久地改变安装的设置来通过互联网获得更新. 比如, 用户可以使用 +\begin{quote} + \tlmgr{} \ac{option} \key{repository} \val{ctan} +\end{quote} +来从一个附近的 CTAN 镜像来获得更新. + +但是中国大陆用户可能无法获取到实际``附近''的镜像站, 很多时候需要用户手动指定大陆地区的源. 详细信息见 \nameref{app:mirror} 一节. + +\key{docfiles} 与 \key{srcfiles} 分别控制着每个软件包的文件组 (文档, 源文件)\footnote{The \texttt{\scriptsize docfiles} and \texttt{\scriptsize srcfiles} keys control the installation of their respective file groups documentation, sources; grouping is approximate) per package.} 这两个 \marg{key} 的默认值都是 \texttt{1}, 如果用户的硬盘空间不足, 或者只是想做一个最小的安装测试, 那么每一个都可以被修改成 \texttt{0}, 这样就不会再下载这些相关的文件了. + +\key{sys\_bin}, \key{sys\_man}, \key{sys\_info} 选项是在 Unix 系统上使用的, 控制着对于可执行文件, 信息文件, 手册页面链接的生成. 详细信息见 \href{https://www.tug.org/texlive/doc/tlmgr.html#path}{path} 操作 + +其余的选项控制着 Windows 安装的表现. +\begin{itemize} + \item 如果设置了 \key{desktop\_integration}, 那么一些软件包将会把文件安装在开始菜单的 \tlmgr{} \ac{gui} 中, 比如文档等等. + \item 如果设置了 \key{fileassocs}, 将会建立 Windows 下的文件关联. 见 \href{https://www.tug.org/texlive/doc/tlmgr.html#postaction}{\ac{postaction}} 操作. + \item 如果设置了 \key{multiuser}, 那么对注册表和菜单的调整将针对系统上的所有用户, 而不仅仅是当前用户. +\end{itemize} +这三个选项默认都是开启的. + +\clearpage + +\subsection{\mdseries{\ac{backup}}}\label{subsec:backup} +\paragraph{使用方法:} + +\begin{quote} + \tlmgr{} \ac{backup} \marg{pkgs\textup{|-all}} +\end{quote} + +如果没有指定 \op{-clean} 选项, 那么这个操作会在默认位置, 为 \marg{pkgs} 中的每一个软件包创建一个备份文件, 如果使用了 \texttt{-all} 选项, 那么将创建全部软件包的备份. + +备份文件的位置由 \op{-backupdir} \marg{dir} 指定, 前提是 \marg{dir} 存在且可写. 如果没有指定 \op{-backupdir}, 那么就会使用 TLPDB 设置中的 \key{backupdir} 路径. 如果二者皆空, 那么就不会创建备份. 关于 \op{backupdir} 的信息可以参考 \ac{update} 操作的 \hyperlink{op:backup}{\op{-backupdir}} 选项. + +如果指定了 \op{-clean} 选项, 那么将会删除备份文件, 而不是创建备份. 这个选项有一个可选的整数值 \texttt{N} 来指定清理时保留的备份数量. 如果没有指定 \texttt{N}, 那么将会使用 \key{autobackup} 的值, 它在 TLPDB 中的默认值为 \texttt{1}, 如果二者皆空, 那么将会报错. + +\paragraph{\textmd{\ac{backup}}的特有选项:} +\begin{description} + \item \op{-backupdir} \marg{dir}\par + 临时盖 TLPDB 中 \key{backupdir} 的值, 参数 \marg{dir} 必须指定, 这是备份文件存放的路径, 它必须要存在且可写. + \item \op{-all}\par + 如果没有指定 \op{-clean} 选项, 那么创建一个 \tl 安装过的所有软件包的备份, 这会消耗大量的存储空间与时间, 如果指定了 \op{-clean} 选项, 所有的备份将被删除. + \item \op{-clean[=N]}\par + 删除备份目录 \key{backupdir} 中的旧备份, 而不创建备份. 可选整数参数 \texttt{N} 会临时覆盖 TLPDB 中的 \key{autobackup} 的值, 如果使用这个选项, 那么必须要指定 \op{-all} 或者一列软件包. + \item \op{-dry-run}\par + 在终端显示将要执行的操作, 而不进行备份. +\end{description} + diff --git a/body/examples.tex b/body/examples.tex new file mode 100644 index 0000000..04eb535 --- /dev/null +++ b/body/examples.tex @@ -0,0 +1,20 @@ +% !TeX root = ../tlmgr-intro-zh-cn.tex + +\section{例子}\label{sec:examples} + +在成功安装 \tl 后, 可以使用一些 \tlmgr 上的常用配置. + +\begin{description} + \item \tlmgr{} \ac{option} \key{repository} \val{ctan}\par + 告诉 \tlmgr 它可以从一个附近的 CTAN 镜像去获取最近的更新. + \item \tlmgr{} \ac{update} \op{-list}\par + 列出所有可以被更新的内容. + \item \tlmgr{} \ac{update} \op{-all}\par + 更新全部的安装包. + \item \tlmgr{} \ac{update} \op{-self}\par + 升级 \tlmgr 本身. + \item \tlmgr{} \ac{info} \marg{pkgs}\par + 列出 \marg{pkgs} 的详细信息, 比如它们的安装状态, 版本号, 介绍等等. +\end{description} + + diff --git a/body/mirrors.tex b/body/mirrors.tex new file mode 100644 index 0000000..e82ec8b --- /dev/null +++ b/body/mirrors.tex @@ -0,0 +1,53 @@ +% !TeX root = ../tlmgr-intro-zh-cn.tex +\section{中国大陆地区的源}\label{app:mirror} + +如果要更换大陆地区的源, 需要使用\footnote{这一节的内容来自 \href{https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf}{install-latex-guide-zh-cn}} +\begin{quote} + \tlmgr{} \ac{option} \key{repository} \marg{url}\texttt{/tlnet} +\end{quote} +需要将 \marg{url} 更换为表 \ref{tab:appendix:mirror} 中的 \tl 源地址. +\begin{table}[!hb] + \centering + \caption{大陆地区目前可用的源 (名称按拼音排序)}\label{tab:appendix:mirror} + \begin{tabular}{*{2}{l}} + \toprule + 镜像站名称 & \tl 源地址\\\midrule + \href{https://developer.aliyun.com/mirror/}{阿里云} + & \url{https://mirrors.aliyun.com/CTAN/systems/texlive/}\\ + \href{https://mirror.bjtu.edu.cn/}{北京交通大学} + & \url{https://mirror.bjtu.edu.cn/ctan/systems/texlive/}\\ + \href{https://mirrors.bit.edu.cn/web/}{北京理工大学} + & \url{https://mirrors.bit.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.bfsu.edu.cn/}{北京外国语大学} + & \url{https://mirrors.bfsu.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.cqu.edu.cn/}{重庆大学} + & \url{https://mirrors.cqu.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.dgut.edu.cn/}{东莞理工学院} + & \url{https://mirrors.dgut.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.hit.edu.cn/}{哈尔滨工业大学} + & \url{https://mirrors.hit.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.huaweicloud.com/}{华为云} + & \url{https://mirrors.huaweicloud.com/CTAN/systems/texlive/}\\ + \href{http://mirrors.hust.edu.cn/}{华中科技大学} + & \url{http://mirrors.hust.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirror.lzu.edu.cn/}{兰州大学} + & \url{https://mirror.lzu.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.nju.edu.cn/}{南京大学} + & \url{https://mirrors.nju.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.tuna.tsinghua.edu.cn/}{清华大学} + & \url{https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/}\\ + \href{https://mirrors.sjtug.sjtu.edu.cn/}{上海交通大学} + & \url{https://mirrors.sjtug.sjtu.edu.cn/ctan/systems/texlive/}\\ + \href{https://mirrors.geekpie.club/}{上海科技大学} + & \url{https://mirrors.geekpie.club/CTAN/systems/texlive/}\\ + \href{https://mirrors.cloud.tencent.com/}{腾讯云} + & \url{https://mirrors.cloud.tencent.com/CTAN/systems/texlive/}\\ + \href{https://mirrors.ustc.edu.cn/}{中国科学技术大学} + & \url{https://mirrors.ustc.edu.cn/CTAN/systems/texlive/}\\ + % \href{https://mirrors.zju.edu.cn/}{浙江大学} + % & \url{https://mirrors.zju.edu.cn/CTAN/systems/texlive/}\\ + % \href{http://mirror.neu.edu.cn/}{东北大学} + % & \url{http://mirror.neu.edu.cn/CTAN/systems/texlive/}\\ + \bottomrule + \end{tabular} +\end{table} \ No newline at end of file diff --git a/body/options.tex b/body/options.tex new file mode 100644 index 0000000..68f73d6 --- /dev/null +++ b/body/options.tex @@ -0,0 +1,20 @@ +% !TeX root = ../tlmgr-intro-zh-cn.tex +\section{全局选项 (GLOBAL OPTIONS)} +\begin{description} + \item \op{-help}, \op{-h}, \op{-?}\par + 这些选项可以显示任何一个操作的参考文档. + \item \op{-version}\par + 显示 \tl 发行版以及 \tlmgr 本身的版本信息, 如果同时指定了 \op{-v} 选项, \tl{} Perl 模块的版本号也会被显示. + \item \op{-q}\par + 抑致输出信息的生成. + \item \op{-v}\par + 显示调试信息, 重复使用 \op{-v} 来显示更多的调试信息. + \item \op{-command-logfile} \marg{file}\par + \tlmgr 把所有程序 (\texttt{mktexlr}, \texttt{mtxrun}, \texttt{fmtutil}, \texttt{updmap}) 的输出都记录在了一个 log 文件中, 这个文件默认在 \texttt{TEXMFSYSVAR/web2c/tlmgr-commands.log}. 这个选项允许用户把日志存放在 \marg{file} 中. + \item \op{-package-logfile} \marg{file}\par + \tlmgr 把所有对软件包的操作 (\ac{install}, \ac{remove}, \ac{update}, failed updates, failed restores) 记录在一个 log 文件中, 这个文件默认在 \texttt{TEXMFSYSVAR/web2c/tlmgr.log}. 这个选项允许用户把日志存放在 \marg{file} 中. + \item \op{-pause}\par + 这个选项让 \tlmgr 在退出之前等待用户输入. 可以有效地防止 Windows 10 中命令行窗口在运行后直接消失. + \item \op{-repository} \marg{url\textup{|}path}\par + 用来临时修改当前命令的仓库位置, 可以选择远端位置 \marg{url} 或者本地位置 \marg{path}, 如果想更改默认仓库位置, 可以使用 \tlmgr{} \ac{option} \key{repository}, 见 \nameref{subsec:option}. +\end{description} \ No newline at end of file diff --git a/body/preface.tex b/body/preface.tex new file mode 100644 index 0000000..96c2bdd --- /dev/null +++ b/body/preface.tex @@ -0,0 +1,22 @@ +% !TeX root = ../tlmgr-intro-zh-cn.tex +\section*{前\quad 言} +\addcontentsline{toc}{section}{前言} + +这个文档是对 \href{https://www.tug.org/texlive/devsrc/Master/texmf-dist/doc/latex/tlmgrbasics/tlmgr.pdf}{\texttt{texdoc tlmgr}} 的翻译以及补充. 由于翻译水平与专业知识有限, 文档中有一些词汇和语句翻译的并不好, 如果您有更好的翻译或者纠正我的错误, 可以在该项目处提出 \href{https://github.com/syvshc/tlmgr-intro-zh-cn/issues}{issue} 或者 \href{https://github.com/syvshc/tlmgr-intro-zh-cn/pulls}{PR}. + +\tlmgr 管理着 \tl 的安装, 包括软件包以及配置选项. 如果还没有安装 \tl, 可以参考 \href{https://www.tug.org/texlive/devsrc/Master/texmf-dist/doc/latex/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf}{install-latex-guide-zh-cn} 与 \href{https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf}{texlive-zh-cn} 进行安装. + +\tl 是由一些最高级别的\textbf{安装方案} (schemes) 构成的, 每一种方案中包含一些\textbf{集合} (collections) 和\textbf{软件包} (packages), 而每一个集合中也包含了一些软件包, 软件包中包含了一些可以看到的文件. 在安装 \tl 的时候, 我们可以选择在不同的级别来进行安装和管理. 比如在安装的时候可以只选则安装最小的安装方案 \texttt{minimal scheme (plain only)}, 以及一部分语言和功能的集合, 比如 \texttt{Chinese} 与 \texttt{LaTeX additional packages} + +\begin{center} + \includegraphics[height=4cm]{scheme.png} \quad + \includegraphics[height=4cm]{collection.png} + \captionof{figure}{Schemes 与 collections} +\end{center} + +使用 \tlmgr 管理这些安装方案, 集合和软件包是很有必要的, 但是 \href{https://www.tug.org/texlive/doc/tlmgr.html}{\tlmgr 官方文档} 过于冗长, 有很多一般用户接触不到的功能, 在这里将它简化, 拿出一些比较基础使用的命令来介绍. + +\tlmgr 也提供了图形界面: \texttt{tlshell}, \texttt{tlcockpit}, 在 Mac 上, 有 \tl{} Utility, 这些都需要启动另外的程序, 这篇简介只介绍命令行下的使用, 关于图形界面的使用可以看 +\begin{center} + \url{https://tug.org/texlive/doc/tlmgr.html#GUI-FOR-TLMGR}. +\end{center} \ No newline at end of file diff --git a/body/syntex.tex b/body/syntex.tex new file mode 100644 index 0000000..cf5592d --- /dev/null +++ b/body/syntex.tex @@ -0,0 +1,25 @@ +% !TeX root = ../tlmgr-intro-zh-cn.tex + +\section{基本格式与说明} + +\subsection{{\mdseries\tlmgr} 命令的基本格式:} + + +% \begin{lstlisting} +% +\tlmgr+ [+\textit{global option}+] <+\textit{action}+> [+\textit{action-specific option}+] [+\textit{operand}+] +% \end{lstlisting} + +\begin{quote} + \tlmgr{} \texttt{[}\op{\textit{global options}}\texttt{]} \texttt{<}\ac{\textit{action}}\texttt{>} \texttt{[}\op{\textit{action-specific options}}\texttt{]} \oarg{operand} +\end{quote} + +\subsection{文档记号说明} + +\begin{enumerate}[(1)] + \item \tlmgr 的\textbf{选项} (option) 分为全局选项与特定命令的选项, 它们一般以 \texttt{-} 或 \texttt{-{}-} 开头. 但是所有的选项可以在一条命令的任意位置, 按任意顺序调用. 一条命令中第一个不是选项的参数会称为这条命令的主要\textbf{操作} (action). + \item 在所有的情况中, \texttt{-option} 与 \texttt{-{}-option} 等价. + \item 文档中被中括号 \texttt{[arg]} 框起来的为可选参数, 如 \texttt{install [\textit{option}]}, + \item 文档中被尖括号 \texttt{} 框起来的为必选参数, 如 \texttt{info <\textit{pkg}>}, + \item 文档中被竖线 \texttt{|} 分隔的参数为 $ n $ 选 $ 1 $, 如 \op{-repository} \marg{url\textup{|}path} 表示选项 \op{-repository} 后面可以选择远端地址 \texttt{\textit{url}} 或本地位置 \texttt{\textit{path}}, + \item 文档中用斜体标出的参数 \texttt{\textit{arg}} 表示参数的类型, 用直立体标出的参数 \texttt{arg} 表示参数需要直接填 \texttt{arg}, 比如 \ac{backup} \marg{pkgs\textup{|-all}} 表示 \ac{backup} 操作后可以跟参数 \texttt{-all} 或软件包类型的参数. +\end{enumerate} diff --git a/fig/collection.png b/fig/collection.png new file mode 100644 index 0000000000000000000000000000000000000000..3a926bd5905098e1ff1428b413f3798d4268c8f7 GIT binary patch literal 34527 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 literal 0 HcmV?d00001 diff --git a/fig/scheme.png b/fig/scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b8c2c0f8b2f70c89ffcdb80e6f39f722817aa1 GIT binary patch literal 19054 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 Thj#bP0l+XkKt$oRu literal 0 HcmV?d00001 diff --git a/tlmgr-intro-zh-cn.sty b/tlmgr-intro-zh-cn.sty new file mode 100644 index 0000000..8f754eb --- /dev/null +++ b/tlmgr-intro-zh-cn.sty @@ -0,0 +1,67 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tlmgr-intro-zh-cn}[20200306 v0.1 test] + +% 版式设计 +\RequirePackage[margin=2.4cm]{geometry} +\RequirePackage{fancyhdr} +\pagestyle{fancy} +\RequirePackage{tocloft} +\renewcommand{\cftsecleader}{\bfseries\cftdotfill{\cftdotsep}} +\RequirePackage{FiraMono} + +% 超链接与颜色 +\RequirePackage[colorlinks]{hyperref} +\RequirePackage[dvipsnames]{xcolor} +\hypersetup{linkcolor = Purple} + +\RequirePackage{listings} +\RequirePackage[shortlabels]{enumitem} + +% 浮动体 +\RequirePackage{tabularx} +\RequirePackage{booktabs} +\RequirePackage{graphicx} +\RequirePackage{caption} +\graphicspath{{./fig/}} + +\lstset{ + basicstyle = {\ttfamily}, + keywordstyle = \color{blue}\bfseries, + commentstyle = \color{gray}, + stringstyle = \color{brown}, + breaklines = true, + gobble = 2, + escapechar = +, +} + +\ctexset{ + section = { + % afterskip = {}, + format = \Large\bfseries\raggedright, + number = \arabic{section}, + name = {}, + }, + subsection = { + afterskip = {1.5ex plus .2ex}, + format = \large\bfseries\raggedright, + } +} + +\newcommand{\tlmgr}{\texttt{tlmgr}} +\newcommand{\tl}{\TeX\,Live} + +\newcommand{\marg}[2][\textit]{\texttt{<#1{#2}>}} +\newcommand{\oarg}[2][\textit]{\texttt{[#1{#2}]}} +\newcommand{\op}[1]{\texttt{#1}} +\newcommand{\ac}[1]{\texttt{#1}} +\newcommand{\key}[1]{\texttt{#1}} +\newcommand{\val}[1]{\texttt{#1}} + +% textlabel from https://tex.stackexchange.com/questions/54854/reference-plain-text +% \makeatletter +% \newcommand*{\textlabel}[2]{% +% \edef\@currentlabel{#1}% Set target label +% \phantomsection% Correct hyper reference link +% #1\label{#2}% Print and store label +% } +% \makeatother \ No newline at end of file diff --git a/tlmgr-intro-zh-cn.tex b/tlmgr-intro-zh-cn.tex new file mode 100644 index 0000000..00ff14d --- /dev/null +++ b/tlmgr-intro-zh-cn.tex @@ -0,0 +1,20 @@ +\documentclass[fontset=fandol, 9pt]{ctexart} +\usepackage{tlmgr-intro-zh-cn} +\title{\bfseries 关于 {\mdseries\texttt{tlmgr}} 使用方法的简介% +\thanks{\url{https://www.github.com/syvshc/tlmgr-intro-zh-cn}}% +} +\author{Syvshc} +\date{\today} +\begin{document} + \maketitle + + \include{./body/preface} + \tableofcontents + \clearpage + \include{./body/syntex.tex} + \include{./body/examples} + \include{./body/options} + \include{./body/actions} + \appendix + \include{./body/mirrors} +\end{document}