Arch 下 TeXlive-basic 的安装以及 texliveonfly 的基础使用的折腾日记

最近又在玩 Linux,顺便要装 TeXlive。但是这次不想像以往一样完整安装。实际上还是完整安装省事,就是浪费了很多空间,换来的是少折腾。其实还有 MikTeXTinyTeX 的选择。另外这次发现了 texliveonfly.py 脚本,多谢林前辈的指点。下面进入折腾吧。这篇教程的核心内容应该适用于其它几个常见的 Linux 发行版本。


注意此文中的操做建议老手,有兴趣折腾的来尝试。新手还是别看了,看 install-latexpdf 才好。

另外我在文中也有几处疑惑,欢迎一起讨论。

安装

因为是安装 texlive-basic ,没必要下载完整的光盘下来挂载离线安装,可以用在线安装的方法安装。文中的链接可能因为年份原因而失效,自己可以上 tug 搜搜相关的东西。首先是上 tug 下载安装脚本 install-tl-unx.tar.gz 或者 install-tl.zip。我选择了前者。下载下来解压开,进入解压后的内部目录,在这里打开终端。准备安装。

1
2
echo 'selected_scheme scheme-basic' > temp.profile
sudo perl install-tl -profile temp.profile

scheme-basic 就是指定安装 texlive-basiczsh 里面的 install-tl 应该是不能用 ./install-tl 的方法运行的,bash 的应该可以,实际上它是一个 perl 脚本,用 perl 运行是可以的。另外需要 sudo ,我一开始没加就没得安装。但是其实也有 Portable 的安装选择,这个不用 sudo 就可以,更多详细的参考 The TEX Live Guide—2019


这个安装应该很快就完成了,安装完成要注意终端里面最后提示的信息,是让加环境变量的提示。按照提示的可以进行下面的操作。

1
2
3
4
5
6
7
# nvim ~/.profile
# nvim ~/.bashrc
nvim ~/.zshrc
# Add TeX Live to the PATH, MANPATH, INFOPATH
export PATH=/usr/local/texlive/2019/bin/x86_64-linux:$PATH
export MANPATH=/usr/local/texlive/2019/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2019/texmf-dist/doc/info:$INFOPATH

用编辑器打开 ~/.zshrcexport 那三行的内容加进去,我这用了 nvim ,并且只在 zsh 交互终端设置,你需要根据自己需求调整。另外如果你是后来者,比如安装了 TeXlive-2020 的话,别直接复制上面的三行,记得改年份,看终端的信息是最好的。


测试安装及增加必要的模块

安装好之后还要检验一下真实性。重新打开终端,运行 tex -v ,如果返回版本信息的话,那么安装基本成功了。但是如果是出现 xxx not found 这样的信息,那么你很不幸,安装有问题,或者环境变量没加好。在确认安装完成后可以性执行以下的步骤。sudo tlmgr update --self --all 建议执行,后面几个看需求。

1
2
3
4
5
sudo tlmgr update --self --all
sudo tlmgr install texdoc
sudo tlmgr install texliveonfly
sudo tlmgr install latexmk
sudo tlmgr install xetex

texdoc 是查看帮助文档的命令,这个还是要装的吧。

texliveonfly 安装了才能继续跟进本文后续的操作,它是用于帮你自动下载缺失宏包,具体用法可以使用 texdoc texliveonfly 后者直接在网络上看,点这里。我发现后者更详细点。多数 Linux 发行版本应该自带 python,它是一个 python 脚本,如果要运行,必然要先安装 python

latexmk 是帮助你自动编译的 perl 脚本,我比较常用它。用法一样通过 texdoc latexmk 查看。

texlive-basic 版本是不带 xetex,如果你要用到 xelatex 编译的话需要装它。


安装完上面的东西可以进入使用的环节了。新建一个 a.tex 的文件,写入如下内容。

1
2
3
4
\documentclass{article}
\begin{document}
Hello world \LaTeX{}.
\end{document}

运行 pdflatex a.tex ,应该能够直接编译得到一些辅助文件和 a.pdf 文件。

texliveonfly 的开始使用

接下来调试用 xelatex 运行一个中文的 Hello world。修改 a.tex 的内容。

1
2
3
4
5
\documentclass{ctexart}
\begin{document}
Hello world \LaTeX{}.
你好,世界。
\end{document}

可以在终端运行 xelatex a.tex ,会发现缺少很多宏包无法运行下去,按 x 退出,放弃运行,开始用 texliveonfly 脚本。在这之前先用 latexmk -C 清除辅助文件后运行,避免遇到奇怪的问题。

1
sudo texliveonfly --terminal_only --compiler=xelatex a.tex

上面指定编译的引擎为 xelatex ,这里需要等待挺久的,喝杯茶回来,发现终端已经完成任务了,但是 pdf 文件可没好。运行下面两条指令:

1
2
latexmk -C 
latexmk -xelatex a.tex

第二条指令不能彻底完成,但是它帮助我们发现问题所在,是缺少 fandol 字体导致的。也就是 texliveonfly 在解决字体类宏包是不够稳健。这时需要手动处理一下。

注: 2020 版的 fandol 已经能自动安装了。

1
sudo tlmgr install fandol

安装好 fandol 字体后再用 latexmk -xelatex a.tex 则能得到正确的 pdf


解决 pdf 中的中文渲染问题

得到 pdf 后,其实我遇到一个小插曲。就是 a.pdf 里面的中文在 pdf 里面并未显示,我发现是渲染问题,尝试打开别的带中文的 pdf 也是无法显示。而且我用 okularLibreOffice 等打开都是同样的结果。 VSCodeLaTeX Workshoptab 预览却能渲染。应该是系统缺少相应的东西导致的。搜索后在 stack overflow 上得到解答。缺少 poppler-data,通过 yay -s poppler-data 安装后,问题得到解决。


现在我们装的 texlive-basic 里面有的宏包还是太少,我想运行一个带有很多宏包的文档让它帮助我们安装一下比较常用的宏包,避免一直需要用 texliveonfly 运行。我想到是用自己写的毕业论文摸板和自己改造的一个书籍摸板

先调试毕业论文模板,到对应文件夹下运行 sudo texliveonfly --terminal_only XMU.tex 等待良久,再重复之前的步骤

1
2
latexmk -C 
latexmk -xelatex XMU.tex

这次又出现字体问题,缺的是一些外部的字体 times new romanArial 这样的。可以通过如下命令安装:

1
2
yay -s ttf-ms-win10
yay -s ttf-ms-win10-zh_cn

如果你不懂 yay 怎么才能成功安装,可以上 Github 下载 ttf-ms-win10-10.0.18362.116-1-any.pkg.tar.xzttf-ms-win10-zh_cn-10.0.18362.116-1-any.pkg.tar.xz ,再到对应所在的文件执行

1
2
sudo pacman -U ttf-ms-win10-10.0.18362.116-1-any.pkg.tar.xz
sudo pacman -U ttf-ms-win10-zh_cn-10.0.18362.116-1-any.pkg.tar.xz

解决了字体问题。这次继续运行

1
2
latexmk -C 
latexmk -xelatex XMU.tex

解决编译。似乎我这里不用 ttf-ms-win10-zh_cn 也可以啊。

第二个书籍模板故技重施,顺利解决。这里意外开心的一点是这次的 noto 字体它自己安装上了。然而我前面的 fandol 却没装上。


VSCode 配置 texliveonfly 的编译

解决权限问题

接下来我想在编辑器里快速调用 texliveonfly 来编译缺少宏包的文档,但是 texliveonfly 没有 sudo 是无法正常工作的,其中的原因之一是 tlmgr 指令需要 sudo 。这是因为初始安装的时候就是全局安装。可以用如下的命令改变 texlive 的所有权限,这样可以使该用户直接运行相关的指令。其中的 newowner 是用户名,记得修改。

1
sudo chown -R newowner /usr/local/texlive

这样处理之后运行 tlmgrtexliveonfly 等指令就无需 sudo 了。这为编辑器里面直接调用 texliveonfly 创造了条件。如果需要加 sudo 指令,必然要输入密码,这样给的交互给编辑器调用命令造成障碍。

编译链的配置

我用 VSCode ,插件是 LaTeX Workshop ,下面给出 texliveonfly 编译的配置。

加入 latexmk -c 命令的原因是为了清除辅助文件,避免辅助文件影响 texliveonfly 的运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
"latex-workshop.latex.recipes": [
{
"name": "fly-pdflatex🔃",
"tools": [
"clean",
"fly-pdflatex"
]
},
{
"name": "fly-xelatex🔃",
"tools": [
"clean",
"fly-xelatex"
]
},
],

"latex-workshop.latex.tools": [
{
"name": "clean",
"command": "latexmk",
"args": [
"-c"
]
},
{
"name": "fly-pdflatex",
"command": "texliveonfly",
"args": [
"--terminal_only",
"--compiler=pdflatex",
"%DOC%"
]
},
{
"name": "fly-xelatex",
"command": "texliveonfly",
"args": [
"--terminal_only",
"--compiler=xelatex",
"%DOC%"
]
},
],

texliveonfly 的字体问题

它很可能不能很好的帮你解决字体的安装,尤其是 type1 的字体。所以你可以选择一次性把字体都安装了

1
2
tlmgr install collection-fontsrecommended 
tlmgr install collection-fontsextra

collection-fontsrecommended 比较少,比较常用。第二个的 collection-fontsextra 巨大无比。如果你编译的模板用不到 type1 字体,可以不安装这部分字体。安装之后 texliveonfly 应该就能解决剩下宏包的自动安装了。

这样装好后大概有 3.3G 了,也不小了。 好处是每次完全更新的宏包一般不多,比完整安装更新起来舒服很多,快非常多。

一些问题

  • 我的 LaTeX Workshop 里调用 texliveonfly 速度会慢很多,而且可能不成功。

Welcome to my other publishing channels