
1. 在 Linux 上装 TeX Live为什么值得折腾先聊几句题外话。如果你是个理工科学生、科研人员或者经常写技术报告的人那你大概率躲不开 LaTeX。而一提到 LaTeX第一个绕不开的东西就是发行版TeX Live 几乎就是事实标准。Linux 上安装 TeX Live 这件事说难不难说简单也不简单——网上教程不少但大部分要么是“执行三条命令就完事”这种过于乐观的要么是“从源码编译所有宏包”这种硬核到劝退的。我前后在 Ubuntu、Fedora、Arch 这些主流发行版上都装过不止一次 TeX Live也踩过不少坑。换了个新机器、给同事帮忙修环境或者自己从零搭一套干净的工作环境每一次装完我都想写点什么记下来。这篇东西就是我反复操作下来觉得最稳的一条路径不是最快的也不是最小的而是放之四海而皆准、装完能安心用几年的那种。这篇教程适合谁我觉得有三类人第一次在 Linux 上用 LaTeX完全不知道从哪下手的纯新手之前用 Windows 或 macOS 的 TeX 发行版刚切到 Linux习惯性想找个图形安装器结果发现不太一样的朋友已经能简单用 LaTeX 写东西但对字体配置、宏包维护、版本更新这些底层机制始终一知半解想趁安装一遍搞清楚原理的进阶用户。先说结论这篇教程会带你用官方网络安装器的方式从头到尾完整安装一遍 TeX Live然后配置好环境变量、验证中文字体、搞定宏包更新最后附上我这些年踩过的坑和排查思路。整个流程大约需要二十到四十分钟取决于你的网速和机器性能。中间涉及的每一个概念我都会解释得比较细所以哪怕你之前完全没接触过命令行跟着一步步来也能搞定。2. TeX Live 版本怎么选以及为什么不用发行版自带的2.1 TeX Live 是什么和 TeX 是一回事吗每次聊到这个都有人分不清。TeX 是排版引擎LaTeX 是在它之上的一套宏集和语言而 TeX Live 是一整套软件发行版把这些东西打包在一起还附带了字体、文档、辅助工具、编辑器集成支持等。比较形象的类比是TeX 相当于引擎LaTeX 相当于车的操控系统TeX Live 则是整辆出厂的车到手就能开。你需要知道的是Linux 上常见的 TeX 发行版有两个TeX Live和MiKTeX。TeX Live 是社区主导、内容最全的最新版一般每年四五月发布命名跟着年份走比如现在常用的是某一年的年度版具体年份看官方仓库MiKTeX 在 Windows 上用得更多Linux 版本也有但生态和文档支持没有 TeX Live 那么通用。如果你主要是在 Linux 服务器或桌面机上做论文、技术文档TeX Live 基本就是默认答案。2.2 发行版自带的 TeX Live省事但有坑很多 Linux 发行版都提供了 TeX Live 的软件包比如 Ubuntu 的 texlive-full、Fedora 的 texlive-scheme-full。用包管理器安装确实最省事但我不建议你这么做原因是版本太旧。发行版仓库里的 TeX Live 通常是发布当时打包的版本滞后一年甚至更多。LaTeX 生态更新很快宏包可能会有兼容性修复、新特性你用老版本写稿子报错之后搜解决方案往往会发现答案都是针对新版本的行为这就很难受了。宏包维护不便。包管理器版本下你要装一个新宏包往往得先找发行版里对应的包名可能叫 texlive-foo装上之后还有各种依赖等你要用的宏包没被发行版打包时就麻烦得不得了。补丁和配置比较碎片化。某些发行版对 TeX Live 加了自己的patch行为跟官方版不一定完全一致排查问题时容易遇到“明明按教程走了结果还是不对”的窘境。所以我推荐的方案是使用官方提供的安装程序装到用户目录下完全绕开发行版的包管理。这也是 TeX Live 官方文档推荐的方式尤其在服务器上能避免很多权限和路径问题。2.3 年度版与发布日的选择TeX Live 每年发布一版默认情况下你从官方仓库下载到的“最新”版本就是当前年份的版本。如果你需要写期刊论文某些期刊会指定 TeX Live 版本要求比如编辑部要求用某年以后的版本来编译这时用年度大版本就非常重要。另外要注意TeX Live 的仓库是持续更新的哪怕你是今年下载发布的版本之后每天运行更新命令也会把宏包的夜间快照同步到最新。所以“年度版”更多是基础平台宏包层面始终是紧跟上游的。3. 安装前要准备什么镜像源、磁盘空间与依赖检查3.1 网络与镜像源官方网络安装器会从一个距离你最近的 CTAN 镜像自动下载文件。CTAN 是 TeX 资源的大本营全球各地都有镜像。理论上你什么都不用配置安装器会自动探测但在某些网络环境下它默认选的镜像可能速度一般。我建议安装前先手动指定一个国内或离你物理位置较近的镜像站能明显少等几分钟。常见做法是进入安装器交互界面后选项里有一个“选择镜像站点”的菜单你可以直接搜索匹配地区的镜像。如果安装器没有图形菜单比如命令行模式下也可以设置环境变量来指定默认的仓库地址比如export TEXLIVE_INSTALL_PREFIX$HOME/texlive export TEXLIVE_INSTALL_TEXDIR$HOME/texlive/2025具体的镜像 URL 配置在安装器的菜单里选这个后面步骤会细说。3.2 磁盘空间比你想象的大TeX Live 完整的套装full scheme装下来默认要占 6 到 8 GB 磁盘空间这个数据每一年都在缓慢膨胀。如果你只是写写普通文档可以选 small scheme大概 100 到 200 MB但我不推荐因为你后面会发现缺这个缺那个装宏包时又会踩各种依赖的坑得不偿失。经验上给 TeX Live 预留10 GB空间比较安心毕竟平时编译文档产生的临时文件都会放在~/.texlive或项目目录下的隐藏文件夹里。检查磁盘空间用df -h ~输出里关注你 home 目录所在分区的可用空间不要看总空间要看“Avail”那一列。装完后你可以用du -sh ~/texlive看看实际占用。3.3 编译工具链依赖TeX Live 本身带了一套编译所需的最小工具但某些内部命令还会调用系统工具如perl、fontconfig、unzip、wget、curl。在 CentOS、Ubuntu 这类服务器上系统精简安装时可能缺这些建议提前装好# Debian/Ubuntu sudo apt install wget curl perl fontconfig unzip # RHEL/CentOS/Fedora sudo dnf install wget curl perl fontconfig unzip如果是桌面版 Linux这些一般都有了。装完依赖之后就可以正式进入安装流程了。4. 完整安装流程从网络安装器到环境变量4.1 获取网络安装器TeX Live 的安装方式无非三种ISO 镜像挂载、网络安装器、包管理器。包管理器前面已经否了ISO 镜像适合离线环境但你要先下载一个五六个 GB 的镜像文件麻烦网络安装器是体积小、按需下载的方案也是本文的主角。网络安装器是一小段脚本名字叫install-tl。从官方仓库或镜像站下载install-tl.zip是一个固定动作wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl.zip unzip install-tl.zip cd install-tl-*或者也可以直接拉取不带 zip 的脚本 tarball。这个文件只有几 MB主要起一个“引导程序”的作用真正的宏包内容还是后续按需下载。如果你习惯用命令行方式拉取安装器后在install-tl-*目录下执行sudo ./install-tl --profile /path/to/texlive.profile没有 profile 文件的话直接执行./install-tl会进入交互式菜单。我建议第一次装的朋友走一遍交互菜单能让你对目录结构、方案选择这些概念建立直观认知。4.2 交互菜单中的关键选项进入安装器后屏幕上会列出类似这样的选项不同年份文本略有差异但核心字段不变S设置安装方案这里默认是full scheme就是全部宏包、全部文档保证齐全但耗时长、空间大。你也可以选medium scheme但后面总得回来补装所以这一步值得想一想。D设置安装目录默认会装到/usr/local/texlive/年份但我强烈建议改成你 home 目录下的路径比如/home/你的用户名/texlive/年份。好处有两个一是不需要 root 权限日常更新和维护都没负担二是不会污染系统目录将来你要卸载整个 TeX Live直接删掉这个文件夹就行。L设置符号链接目录这是把pdflatex、xelatex、tlmgr这些命令软链到/usr/local/bin的选项。如果你选了自定义安装目录符号链接这一项可以跳过直接用环境变量来补充 PATH。O设置语言集合默认会包含几十种语言、字体不建议裁剪因为中英文文档都会依赖其中的字体子集裁掉后面哭都来不及。设置好之后按R开始安装。安装器会连到镜像去下载这一步会打印每一秒的进度有时候看起来像“卡住”其实只是某个大宏包在压缩解压。耐心等进度条走到 100% 后它会提示安装完成。4.3 环境变量配置PATH、MANPATH、INFOPATH如果你选择了自定义安装目录装完第一件事就是配置环境变量。所谓“环境变量”就是给终端一个寻人的索引。你敲pdflatex命令时shell 会按PATH里列出的目录顺序一个个去找有没有名字叫pdflatex的可执行文件。TeX Live 虽然把可执行文件放在~/texlive/2025/bin/x86_64-linux这个目录里但如果它不在PATH里你再怎么敲都只会得到“command not found”。所以要在 shell 配置文件里加上一行。常见 shell 是 bash 或 zsh配置文件分别对应# ~/.bashrc 或 ~/.zshrc export PATH/home/你的用户名/texlive/2025/bin/x86_64-linux:$PATH export MANPATH/home/你的用户名/texlive/2025/texmf-dist/doc/man:$MANPATH export INFOPATH/home/你的用户名/texlive/2025/texmf-dist/doc/info:$INFOPATH注意这台机器的架构。大部分 64 位 x86 系统是x86_64-linux如果你用的是 ARM 架构某些服务器或树莓派那可能是aarch64-linux。不确定时可以看一眼安装目录里bin下有几个文件夹或者用命令查一下uname -m如果输出是x86_64那就是x86_64-linux。如果是aarch64就改成aarch64-linux。改完后让配置生效source ~/.bashrc然后验证一下which pdflatex pdflatex --version如果第一行输出的路径带texlive说明配置起效了。安装这一步就算正式完成。4.4 中文字体配置最容易踩坑的部分很多人在 Linux 上装完 TeX Live兴致勃勃地编译一个包含中文的xelatex文档结果一上来就报错The font SimSun cannot be found。这不一定是 TeX Live 没装好而是系统里没装中文字体或者 TeX 系统找不到对应的字体。Linux 桌面发行版一般自带少量中文字体比如文泉驿、Noto CJK。服务器环境或者精简系统上就经常什么都没有。解决思路有两个给系统安装中文字体。Debian/Ubuntu 上装fonts-noto-cjkFedora 上装google-noto-sans-cjk-fonts或类似包RHEL/CentOS 需要额外开启 EPEL 再装。这是一个治本的办法因为不仅 TeX Live 要用字体其他应用也要用。把字体放进 TeX Live 的字体目录。如果你工作的机器上没有 root 权限无法给系统装字体那就把字体文件otf/ttf复制到~/texlive/texmf-local/fonts/opentype或相应目录然后跑一下fc-cache和updmap-sys让字体缓存识别到它们。我个人更推荐第一种因为系统级字体对所有程序都生效后续用fontspec宏包选择字体也方便。第二种适合服务器上无权限场景可用但每换一个字体都要手动维护目录会增加额外心智负担。这里顺带提一下新版 TeX Live 默认的ctex宏包会自己找系统字体只要系统有 Noto CJK 或者文泉驿大多数情况下就不需要额外指定字体名。如果你习惯了 Windows 上的“宋体”这种感觉那需要写这样的文档头% !TEX program xelatex \documentclass{ctexart} \setCJKmainfont{Noto Serif CJK SC}用fc-list :langzh可以查看系统上有哪些可用的中文字体。这个命令输出的字体名就是你在 LaTeX 里可以引用的字体名称。5. 安装后的验证与常用操作5.1 编译一个最小文档安装配置完之后第一件事是建一个小文档验证全链路。建议你在一个干净目录里新建test.tex\documentclass{article} \usepackage{fontspec} \usepackage{xeCJK} \setCJKmainfont{Noto Serif CJK SC} \begin{document} 你好世界。Hello, TeX Live! \end{document}然后注意文件名前面没有空格且扩展名必须是.texxelatex test.tex看到生成test.pdf并且没有任何 Fatal Error就说明 TeX Live 主程序和中文支持都正常了。这里特意用了xelatex而不是pdflatex因为现代写中文文档xelatex配合ctex或xeCJK是最省心的路。有一点要提一下第一次编译时可能会提示生成.aux、.log、.toc这些辅助文件。这是正常的不要把 log 里的 Warning 当成错误只要最终的 PDF 正常出来了就好。5.2 tlmgr宏包管理的日常操作tlmgr是 TeX Live 的包管理器地位相当于 pip 之于 Python。装完 TeX Live 之后日常最常用的 tlmgr 操作更新全部宏包tlmgr update --all查看已安装宏包tlmgr list --only-installed搜索宏包tlmgr search 关键词安装单个宏包tlmgr install 宏包名卸载单个宏包tlmgr remove 宏包名一个小提醒宏包名字和你在 LaTeX 源码里\usepackage{...}的名字常常不一样。比如你用的是\usepackage{listings}但 tlmgr 里对应的包名同样也是listings大部分是一致的但有些带路径前缀。不确定时用tlmgr search搜一下别一个个瞎试。建议定期更新宏包尤其是论文投稿前把 LaTeX 更新到最新状态能避免很多“我本地编译没问题投出去系统上挂了”的悲剧。更新命令tlmgr update --self tlmgr update --all--self是先把 tlmgr 自己更新了然后再同步全部宏包。更新过程可能会有输出提示“某些宏包被跳过”基本不影响使用。5.3 搭建本地项目目录的几个习惯TeX Live 装好之后写文档的体验很大程度上取决于工作区管理。我个人习惯每个文档一个独立目录目录内放.tex源文件、figures子目录、bib子目录存放 .bib 参考文献文件。这样编译时辅助文件不会跟其他项目混在一起就算编译出问题也能直接删掉整个目录重来。如果你用 Overleaf 习惯了在线编辑本地也可以复现类似体验装一个支持 LaTeX 的编辑器或者用 VS Code 加 LaTeX Workshop 插件这样写的时候会有实时语法高亮和错误提示但编译还是调用本地的latexmk或xelatex。用latexmk -xelatex编译的好处是它会自动处理多次编译循环生成目录、交叉引用等省心很多。6. 常见问题与排查技巧6.1 tlmgr 连接不到仓库遇到tlmgr cannot find remote package或超时多半是网络问题或者仓库地址不对。在更新的机器上tlmgr 默认会访问它打包时写死的远程仓库但随着时间的推移这些仓库地址可能会失效或被迁移。解决方法是手动指定一个可靠的镜像tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet然后再更新。这是我在国内环境里最常用的手段比默认源快得多。6.2 宏包版本找不到或编译报错奇怪如果你写的文档在某个工具站、在线编译器上都能跑偏偏在本机报错十有八九是宏包版本不一致。穷举一下排第一的是 TeX Live 的宏包过期。这时不要急着一条条升级直接tlmgr update --all一把梭把全部宏包同步一遍很多奇奇怪怪的报错就会消失。如果网络慢只更新当前文档用到的宏包也凑合但我不建议这么做毕竟宏包之间还有依赖你永远不知道次要宏包会不会突然要调用另一个宏包的新特性。还有一种情况你用的是旧版 TeX Live比如上一年度的而某位给模板的同事或网上教程使用了更新的命令。这种除了升级年度版本没有太好的办法。好在年度升级并不麻烦大版本之间变化也不至于太折磨人。6.3 中文显示为方块如果编译成功但 PDF 里中文全部是空方块而不是报错那基本都是字体问题。先确认系统里中文字体是否存在fc-list :langzh | head如果输出为空说明没装中文字体去装对应发行版的 CJK 字体包即可。字体装好后还要刷新字体缓存fc-cache -f然后重新编译。这一步不需要重装 TeX Live纯系统字体层的问题。另一种可能是你用的文档类或字体设置指定了一个根本不存在的字体名。排查方法先不用\setCJKmainfont让系统自动选默认中文字体如果正常显示说明问题出在字体名上。6.4 PATH 配置了但命令找不到这种情况最让人抓狂。如果你明明在.bashrc里加了export PATH...也执行了source但新开的终端里还是找不到命令要检查两个地方是否使用了 zsh而 zsh 加载的是.zshrc而不是.bashrc。如果终端走的是 zsh你必须在~/.zshrc里加同样的配置或者确认 bash 的配置在 zsh 里被间接加载。是否通过图形界面打开终端后没有重新登录。有些桌面环境GNOME 的 terminal 默认不会完全重新执行 .bashrc需要你重新登录或者直接exec $SHELL让 shell 重载。还有一个细节如果你在.bashrc里写的路径里面有拼写错误比如texlive/2025/bin/x86_64-linux写成了x86_64-linux/也会出现这个现象。用echo $PATH看看到底包含哪些路径排查会快很多。6.5 网络安装器下载中断怎么办网络安装器下载了一半断了怎么办不需要从头再来。重新执行./install-tl它会识别到已经下载的包缓存缓存目录一般在~/.texlive或临时目录从断点继续。前提是你没清掉临时目录。如果下载反复在某个包上卡住大概率是那个包较大且当前网络链路不稳定。这时有两个选择换一个更近的镜像或者把缓存目录清掉、从头再一遍。实测下来下载速度不稳定的环境用国内镜像断点续传比硬等国外的源强太多了。7. 一些提高舒适度的技巧7.1 为当前用户新建 utils 命令装完 TeX Live 后我习惯在 home 目录的bin目录下放两个小脚本texon和texoff用来快速切换 TeX Live 版本如果机器上有旧版共存的话。本质就是切换 PATH 里的路径顺序代码不复杂但日常用起来特别方便。7.2 一次做好备份省得重装后悔TeX Live 不像 Python 环境那样有 conda 级别的导出但你可以备份已安装宏包列表tlmgr list --only-installed /tmp/texlive_packages.txt在需要重装时用这个列表对比确认。需要注意你备份出的列表不包含宏包配置文件如texmf.cnf的修改那些放在~/.texlive和用户目录下的配置文件需要单独备份。7.3 设置本地自定义宏包目录不管你是写简历、实验报告还是课程作业总会积累一些自己的.sty文件。在~/texlive/texmf-local/tex/latex/下建一个自己的目录把.sty文件放进去然后在终端里执行mktexlsr ~/texlive/texmf-local之后任何用户都可以不加路径直接\usepackage{我的宏包}。这是 TeX Live 全局宏包目录的延伸也是我强烈建议养成的习惯。像我这种写惯了自己的\newcommand的人把这些公共片段收集到一个mystyle.sty里比每次复制粘贴省事太多。7.4 配合 LaTeX 编译工具食用更佳本地装完 TeX Live 还不够日常编译建议用latexmk帮你管理latexmk -xelatex -synctex1 -interactionnonstopmode test.tex-xelatex用 xelatex 编译中文字体友好-synctex1产生同步信息配合编辑器实现“Ctrl点击跳转”-interactionnonstopmode遇到错误不暂停等待人工输入直接滚完日志减少挂起概率。如果你用 VS Code 的 LaTeX Workshop它本身会调用 latexmk配置好命令参数后几乎就是 Overleaf 的本地版体验。8. 安装完以后日常更新与维护的经验装完 TeX Live 最常犯的错误是“装完就再也不管了”。宏包生态是很活跃的某个宏包的 bug 修复、某位投稿期刊建议的 LaTeX 引擎升级都要求你保持更新。我自己的更新节奏是每月至少一次tlmgr update --all。遇到投稿高峰期前还会临时来一次确保宏包版本清新。更新前如果磁盘紧张先清理缓存tlmgr cache clean因为每次更新下载的包都会暂存在本地。另外一个经验是别老换版本。LaTeX 文档一般没有“必须用新版才能编译”的强耦合除非宏包被废弃。我见过有同学一年内从 2023 升到 2025又从 2025 降回 2024折腾半天无非是因为根目录下堆了多套版本PATH 互相打架最后自己都分不清在用哪一套。真正工作起来一套稳定的最新版就够了版本切换脚本这种对普通用户来说基本用不上。最后说一下卸载。如果是用户目录安装卸载 TeX Live 就是删除整个文件夹再删掉.bashrc里加的三行环境变量配置文件的残留一般在~/.texlive2025或~/.texlive里可以看到变体目录配件也一并清掉。命令清理起来很理直气壮rm -rf ~/texlive ~/.texlive*当然先确认你真的不用了再执行。9. 再给新手一个完整的示例会话为了让你更直观地看到全流程我模拟一段完整操作记录包含了从下载到编译成功的命令# 1. 进入工作目录想好后装在哪里 cd ~/downloads # 2. 下载网络安装器推荐国内镜像 wget https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/install-tl.zip # 3. 解压 unzip install-tl.zip cd install-tl-* # 4. 直接开始交互安装如果没有窗口交互界面用 -no-gui 走纯文本 ./install-tl -no-gui # 按 S 选择 full scheme默认已经是 full确认即可 # 按 D 更改安装目录为 /home/你的用户名/texlive/2025 # 按 R 开始安装 # 5. 配置环境变量追加到 ~/.bashrc echo export PATH/home/你的用户名/texlive/2025/bin/x86_64-linux:$PATH ~/.bashrc echo export MANPATH/home/你的用户名/texlive/2025/texmf-dist/doc/man:$MANPATH ~/.bashrc echo export INFOPATH/home/你的用户名/texlive/2025/texmf-dist/doc/info:$INFOPATH ~/.bashrc source ~/.bashrc # 6. 验证 pdflatex --version # 7. 安装中文字体Debian/Ubuntu 为例 sudo apt install fonts-noto-cjk fc-cache -f # 8. 编译测试文档 mkdir ~/testtex cd ~/testtex cat test.tex EOF \documentclass{article} \usepackage{ctex} \begin{document} 你好世界。Hello, TeX Live! \end{document} EOF xelatex test.tex这个流程走完你就拥有了一套干净的、属于你自己用户目录的 TeX Live 环境。在整个安装过程中我反复提醒自己一句话TeX Live 的本质是一整套可执行文件加宏包库装它对系统本身的侵入越少后续维护就越省心。所以不管是选目录、配 PATH还是处理字体都尽量在用户态完成不跟系统包管理器纠缠。这套思路不仅适用于 TeX Live你以后装其他编程语言工具链也完全可以沿用。