一、背景

前两天在自己的 Jupyter 服务器上想要把 notebook(.ipynb) 导出为 pdf 时发现 xelatex 没有安装:
LaTeX 2018 安装与使用教程 - 图1
500 : Internal Server Error 如下:

  1. nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex.

另外一点就是,对于经常做生信分析的童鞋而言,LaTeX,或者 Html+wkhtmltopdf 也许是当前生信报告生成与交付的两种主要解决方案(或许还有其他更好的,欢迎留言交流)。因此对于生信分析而言,LaTeX 也许并不陌生,但真正熟悉和掌握它的人却寥寥无几。

二、概念

TEX 是诞生于 20 世纪 70 年代末到 80 年代初的一款计算机排版软件,而且是命令行格式的,用来排版高质量的书籍,特别是包含有数学公式的书籍。TEX 以追求高质量为目标,很早就实现了矢量描述的计算机字体、细致的分页断行算法和数学排版功能,因其数学排版能力得到了学术界的广泛使用,也启发了后来复杂的商业计算机排版软件。

LATEX 开始于 20 世纪 80 年代初,是 Leslie Lamport 博士为了编写自己的一部书籍而设计的。LATEX 是对 TEX 的封装和拓展,实际上就是用 TEX 语言编写的一组宏代码,拥有比原来 TEX 格式(Plain TEX)更为规范的命令和一整套预定义的格式,隐藏了不少排版方面的细节,可以让完全不懂排版理论的学者们也可以比较容易地将书籍和文稿排版出来。

TEXLive 是 Tex 的一种比较流行的发行版,它是由 TUG(TEX User Group,TEX 用户组)发布的,可以在类 UNIX/Linux、Mac OS X 和 Windows 等不同的操作系统平台下安装使用,并且提供相当可靠的工作环境。

引擎 (Knuth)TeX 真正的(原始的)TeX
ε-TeX 相对于原始的TeX它提供了一种扩展模式
pdfTeX 它从tex文件不通过dvi文件直接生成pdf文件(开发者已经转向LuaTeX)
XeTeX 相对于原始的TeX,主要增加了Unicode和 OpenType 的支持
LuaTeX 它使用Lua作为扩展语言,对于LaTeX支持尚不完善?
…… ……
宏集 plain TeX 最古老的TeX宏集,提供了一些最基本的命令
AMSTeX 是美国数学会提供的一个TeX宏集,它添加了许多数学符号和数学字体
LaTeX 相对于 PlainTeX,它使得科技文档的排版更加直观和方便
ConTeXt 和 LaTeX 相比,它更加灵活和自由。
ctex 小写的 ctex 是可以很好支持中文的宏包。
…… ……


发行版
TeX Live 国际 TeX 用户组织 TUG 开发,支持不同的操作系统。
MiKTeX Windows 下广泛使用的一个 TeX 发行版。
ConTeXt Minimals 它包含了最新版本的 ConTeXt。
teTeX 一个 Unix 下的 TeX 发行版,现在已经停止更新且并入 TeXLive。
fpTeX 一个 Windows 的 TeX 发行版,已不再更新。
CTeX CTeX 是基于 Windows 下的 MiKTeX 系统的一个中文套装(ctex 是可以很好支持中文的宏包)。
…… ……

CTeX 中文套装是基于 Windows 下的 MiKTeX 系统,集成了编辑器 WinEdtPostScript 处理软件 Ghostscript 和 GSview 等主要工具。 CTeX 中文套装在 MiKTeX 的基础上增加了对中文的完整支持。 CTeX 中文套装支持 CJK, xeCJK, CCT, TY 等多种中文 TeX 处理方式。

三、安装

TEXLive 常用有两种安装方式:从 TEXLive 光盘进行安装和从网络在线安装。这里我们介绍第二种。

1. 镜像文件下载

TexLive 历史版本下载地址:ftp://tug.org/historic/systems/texlive/
TexLive 的镜像文件下载推荐使用 清华大学开源软件镜像站,国内下载速度极快。
https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/texlive2018.iso

2. 镜像挂载

TEXLive 镜像文件下载完之后,推荐使用 root 用户进行安装。

  1. $ sudo mkdir /mnt/textlive
  2. $ sudo mount -o loop texlive2018.iso /mnt/textlive
  3. mount: /dev/loop0 is write-protected, mounting read-only

注意:
使用 mount 挂载出现以上提示 mount: /dev/loop0 is write-protected, mounting read-only。这是因为 mount 命令默认以读写方式挂载一个设备,而光盘是只读的,所以在挂载光盘这个块设备时会出现上述从读写方式切换为以只读方式挂载光盘的提示。我们可以忽视不必管它。

如果不想看到这个提示,就请在 mount 命令后面添加参数,指定以只读方式来挂载设备。

  1. $ sudo mount -o loop texlive2018.iso /mnt/textlive -o ro

3. 镜像安装

TEXLive 镜像的安装有两种方法:一是可以启动安装程序的图形化界面进行安装配置;二是直接在命令行中进行。这里主要介绍一下命令行下的安装。

  1. $ cd /mnt/textlive
  2. $ sudo ./install-tl
  3. Loading ./tlpkg/texlive.tlpdb
  4. Installing TeX Live 2018 from: . (verified)
  5. Platform: x86_64-linux => 'GNU/Linux on x86_64'
  6. Distribution: inst (compressed)
  7. Directory for temporary files: /tmp/j3dA84tbet
  8. ======================> TeX Live installation procedure <=====================
  9. ======> Letters/digits in indicate <=======
  10. ======> menu items for actions or customizations <=======
  11. Detected platform: GNU/Linux on x86_64
  12. set binary platforms: 1 out of 8
  13. set installation scheme: scheme-full
  14. set installation collections:
  15. 40 collections out of 41, disk space required: 5381 MB
  16. set directories:
  17. TEXDIR (the main TeX directory):
  18. /usr/local/texlive/2018
  19. TEXMFLOCAL (directory for site-wide local files):
  20. /usr/local/texlive/texmf-local
  21. TEXMFSYSVAR (directory for variable and automatically generated data):
  22. /usr/local/texlive/2018/texmf-var
  23. TEXMFSYSCONFIG (directory for local config):
  24. /usr/local/texlive/2018/texmf-config
  25. TEXMFVAR (personal directory for variable and automatically generated data):
  26. ~/.texlive2018/texmf-var
  27. TEXMFCONFIG (personal directory for local config):
  28. ~/.texlive2018/texmf-config
  29. TEXMFHOME (directory for user-specific files):
  30. ~/texmf
  31. options:
  32. [ ] use letter size instead of A4 by default
  33. [X] allow execution of restricted list of programs via \write18
  34. [X] create all format files
  35. [X] install macro/font doc tree
  36. [X] install macro/font source tree
  37. [ ] create symlinks to standard directories
  38. [X] after install, use tlnet on CTAN for package updates
  39. set up for portable installation
  40. Actions:
  41. start installation to hard disk
  42. save installation profile to 'texlive.profile' and exit
  43. help
  44. quit
  45. Enter command: D
  46. ===============================================================================
  47. Directories customization:
  48. <1> TEXDIR: /usr/local/texlive/2018
  49. support tree: /usr/local/texlive/2018/texmf-dist
  50. <2> TEXMFLOCAL: /usr/local/texlive/texmf-local
  51. <3> TEXMFSYSVAR: /usr/local/texlive/2018/texmf-var
  52. <4> TEXMFSYSCONFIG: /usr/local/texlive/2018/texmf-config
  53. <5> TEXMFVAR: ~/.texlive2018/texmf-var
  54. <6> TEXMFCONFIG: ~/.texlive2018/texmf-config
  55. <7> TEXMFHOME: ~/texmf
  56. Note: ~ will expand to $HOME (or to %USERPROFILE% on Windows)
  57. Actions:
  58. return to main menu
  59. quit
  60. Enter command: 1
  61. New value for TEXDIR [/usr/local/texlive/2018]: /usr/local/software/texlive/2018
  62. ===============================================================================
  63. Directories customization:
  64. <1> TEXDIR: /usr/local/software/texlive/2018
  65. support tree: /usr/local/software/texlive/2018/texmf-dist
  66. <2> TEXMFLOCAL: /usr/local/software/texlive/texmf-local
  67. <3> TEXMFSYSVAR: /usr/local/software/texlive/2018/texmf-var
  68. <4> TEXMFSYSCONFIG: /usr/local/software/texlive/2018/texmf-config
  69. <5> TEXMFVAR: ~/.texlive2018/texmf-var
  70. <6> TEXMFCONFIG: ~/.texlive2018/texmf-config
  71. <7> TEXMFHOME: ~/texmf
  72. Note: ~ will expand to $HOME (or to %USERPROFILE% on Windows)
  73. Actions:
  74. return to main menu
  75. quit
  76. Enter command:R
  77. ......
  78. Actions:
  79. start installation to hard disk
  80. save installation profile to 'texlive.profile' and exit
  81. help
  82. quit
  83. Enter command: I
  84. Installing to: /usr/local/software/texlive/2018
  85. Installing [0001/3590, time/total: ??:??/??:??]: 12many [376k]
  86. Installing [0002/3590, time/total: 00:00/00:00]: 2up [66k]
  87. Installing [0003/3590, time/total: 00:00/00:00]: Asana-Math [482k]
  88. Installing [0004/3590, time/total: 00:00/00:00]: ESIEEcv [137k]
  89. Installing [0005/3590, time/total: 00:00/00:00]: FAQ-en [4971k]
  90. ......
  91. finished with package-specific postactions
  92. Welcome to TeX Live!
  93. ......

FAQ-1:Digest::MD5

  1. Can't locate Digest/MD5.pm in @INC (@INC contains: ./tlpkg /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at tlpkg/TeXLive/TLCrypto.pm line 9.
  2. BEGIN failed--compilation aborted at tlpkg/TeXLive/TLCrypto.pm line 9.
  3. Compilation failed in require at tlpkg/TeXLive/TLPOBJ.pm line 16.
  4. BEGIN failed--compilation aborted at tlpkg/TeXLive/TLPOBJ.pm line 16.
  5. Compilation failed in require at ./install-tl line 55.
  6. BEGIN failed--compilation aborted at ./install-tl line 55.

Can't locate Digest/MD5.pm 是因为系统的 perl(/usr/bin/perl) 中没有安装 Digest::MD5 模块,我们可以去 CPAN 下载手动安装,也可以在线安装:

  1. $ sudo yum install perl-Digest-MD5

__FAQ-2:perl-TK__

  1. Error message from loading Tk:
  2. Can't locate Tk.pm in @INC (@INC contains: ./tlpkg /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./install-tl line 398.

在线安装 Tk 的 perl 模块(通过 CPAN手动安装,这里不详述,有兴趣的可自行谷歌一下):

  1. $ sudo yum install perl-Tk

最后,卸载镜像:

  1. $ sudo umount /mnt/textlive/
  2. umount: /mnt/textlive: target is busy.
  3. (In some cases useful info about processes that use
  4. the device is found by lsof(8) or fuser(1))
  5. # fuser/lsof 能识别出正在对某个文件或端口访问的进程
  6. $ sudo fuser -m /mnt/textlive/
  7. /mnt/textlive: 6436c 6548c 6549c
  8. $ ps aux|grep 6436
  9. shenwei+ 6436 0.0 0.0 115568 2220 pts/3 Ss 10:36 0:00 -bash
  10. shenwei+ 18041 0.0 0.0 112704 952 pts/1 S+ 11:11 0:00 grep --color 6436
  11. $ ps aux|grep 6548
  12. root 6548 0.0 0.1 218528 4020 pts/3 S+ 10:37 0:00 sudo ./install-tl
  13. shenwei+ 18062 0.0 0.0 112704 952 pts/1 S+ 11:11 0:00 grep --color 6548
  14. # 杀掉占用此设备的进程
  15. $ sudo fuser -m -v -k /mnt/textlive/
  16. # 执行 umount 就可以正常卸载
  17. $ sudo umount /mnt/textlive/

Texlive2017 有一个详细指南,其中也有详细介绍各平台各种安装方法。

四、设置环境变量

将 texlive 部分目录添加到环境变量(~/.bashrc),编辑完记得 source 刷新一下:

  1. export PATH=/usr/local/software/texlive/2018/bin/x86_64-linux:$PATH
  2. export MANPATH=/usr/local/software/texlive/2018/texmf-dist/doc/man:$MANPATH
  3. export INFOPATH=/usr/local/software/texlive/2018/texmf-dist/doc/info:$INFOPATH

五、使用与测试

编辑一个 tex-test.tex 文件:

\documentclass{article} \begin{document} Hello \LaTeX! 你好,这是一个测试文档。 \end{document}

使用命令,最后打开生成的 tex-test.pdf 文件:

  1. xelatex tex-test.tex

六、中文支持

LaTeX 默认是不支持中文的,想要支持中文排版,这里需要引入一个”宏包” 的概念。关于宏包,我们可以理解为一些指令的集合,用于专门处理某个特定的专题(如排版,字体等方面的细节问题),使用者可以方便地根据需要选用某个宏包。

LaTeX 中比较常用的中文排版处理宏包主要有 ctex、CJK、xeCJK 等等,这里主要介绍一下后面两个。CJK 是由 Werner Lemberg 开发的,是中文(Chinese)、日文(Japanese)、韩文(Korean)三国文字的缩写。顾名思义,它能够支持这三种文字。实际上,CJK 能够支持在 LaTeX 中使用包括中文、日文、韩文在内的多种亚洲双字节文字。

CJK 宏包提供了两种环境:CJK 环境和 CJK 环境,这两种环境的区别为:对于汉字后面的空格,前者不忽略,后者忽略,我们推荐使用 CJK 环境。

xeCJK 是在 CCT 和 CJK 包基础上发展起来的,支持多种标点格式。也有人说,xeCJK package 搭上 XeLaTeX 是最好的中文 TeX 处理方式。总的来说 xeCJK 主要特点:

  1. 分别设置 CJK 和英文字体;
  2. 自动忽略 CJK 文字间的空格而保留其它空格,允许在非标点汉字和英文字母 (a-z, A-Z) 间断行;
  3. 提供多种标点处理方式:全角式、半角式、开明式、行末半角式;
  4. 自动调整中英文间空白。
  5. TexLive 2018 已经默认安装了 xeCJK,我们可以使用下面的命令查看 TexLive 已经安装的包以及包的具体信息:
  1. # 查看 TexLive 所有已经安装的包
  2. $ tlmgr list --only-installed
  3. # 查看具体某个包的信息
  4. $ tlmgr info xecjk
  5. # 安装新的宏包
  6. $ tlmgr install pkgname

结合 xeCJK 宏包来配置字体,下面是一个小例子:

  1. \documentclass{article}
  2. \usepackage{xeCJK}
  3. \setCJKmainfont{SimSun}
  4. \begin{document}
  5. 你好,TeX Live 2018
  6. \end{document}

LaTeX 2018 安装与使用教程 - 图2


七、参考资料