前两天在自己的 Jupyter 服务器上想要把 notebook(.ipynb) 导出为 pdf 时发现 xelatex 没有安装

500 : Internal Server Error 如下:

nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at #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 等不同的操作系统平台下安装使用,并且提供相当可靠的工作环境。

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

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

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

$ sudo mkdir /mnt/textlive

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

mount: /dev/loop0 is write-protected, mounting read-only

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

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

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

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

$ cd /mnt/textlive

$ sudo ./install-tl

Loading ./tlpkg/texlive.tlpdb

Installing TeX Live 2018 from: . (verified)

Platform: x86_64-linux => 'GNU/Linux on x86_64'

Distribution: inst (compressed)

Directory for temporary files: /tmp/j3dA84tbet

======================> TeX Live installation procedure <=====================

======>   Letters/digits in <angle brackets> indicate   <=======

======>   menu items for actions or customizations      <=======

Detected platform: GNU/Linux on x86_64

<B> set binary platforms: 1 out of 8

<S> set installation scheme: scheme-full

<C> set installation collections:

40 collections out of 41, disk space required: 5381 MB

<D> set directories:

TEXDIR (the main TeX directory):

/usr/local/texlive/2018

TEXMFLOCAL (directory for site-wide local files):

/usr/local/texlive/texmf-local

TEXMFSYSVAR (directory for variable and automatically generated data):

/usr/local/texlive/2018/texmf-var

TEXMFSYSCONFIG (directory for local config):

/usr/local/texlive/2018/texmf-config

TEXMFVAR (personal directory for variable and automatically generated data):

~/.texlive2018/texmf-var

TEXMFCONFIG (personal directory for local config):

~/.texlive2018/texmf-config

TEXMFHOME (directory for user-specific files):

<O> options:

[ ] use letter size instead of A4 by default

[X] allow execution of restricted list of programs via \write18

[X] create all format files

[X] install macro/font doc tree

[X] install macro/font source tree

[ ] create symlinks to standard directories

[X] after install, use tlnet on CTAN for package updates

<V> set up for portable installation

<I> start installation to hard disk

<P> save installation profile to 'texlive.profile' and exit

<H> help

<Q> quit

Enter command: D

===============================================================================

Directories customization:

<1> TEXDIR:       /usr/local/texlive/2018

support tree: /usr/local/texlive/2018/texmf-dist

<2> TEXMFLOCAL:     /usr/local/texlive/texmf-local

<3> TEXMFSYSVAR:    /usr/local/texlive/2018/texmf-var

<4> TEXMFSYSCONFIG: /usr/local/texlive/2018/texmf-config

<5> TEXMFVAR:       ~/.texlive2018/texmf-var

<6> TEXMFCONFIG:    ~/.texlive2018/texmf-config

<7> TEXMFHOME:      ~/texmf

Note: ~ will expand to $HOME (or to %USERPROFILE% on Windows)

<R> return to main menu

<Q> quit

Enter command: 1

New value for TEXDIR [/usr/local/texlive/2018]:/usr/local/software/texlive/2018

===============================================================================

Directories customization:

<1> TEXDIR:       /usr/local/software/texlive/2018

support tree: /usr/local/software/texlive/2018/texmf-dist

<2> TEXMFLOCAL:     /usr/local/software/texlive/texmf-local

<3> TEXMFSYSVAR:    /usr/local/software/texlive/2018/texmf-var

<4> TEXMFSYSCONFIG: /usr/local/software/texlive/2018/texmf-config

<5> TEXMFVAR:       ~/.texlive2018/texmf-var

<6> TEXMFCONFIG:    ~/.texlive2018/texmf-config

<7> TEXMFHOME:      ~/texmf

Note: ~ will expand to $HOME (or to %USERPROFILE% on Windows)

<R> return to main menu

<Q> quit

Enter command:R

<I> start installation to hard disk

<P> save installation profile to 'texlive.profile' and exit

<H> help

<Q> quit

Enter command: I

Installing to: /usr/local/software/texlive/2018

Installing [0001/3590, time/total: ??:??/??:??]: 12many [376k]

Installing [0002/3590, time/total: 00:00/00:00]: 2up [66k]

Installing [0003/3590, time/total: 00:00/00:00]: Asana-Math [482k]

Installing [0004/3590, time/total: 00:00/00:00]: ESIEEcv [137k]

Installing [0005/3590, time/total: 00:00/00:00]: FAQ-en [4971k]

finished with package-specific postactions

Welcome to TeX Live!

FAQ-1:Digest::MD5

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.

BEGIN failed--compilation aborted at tlpkg/TeXLive/TLCrypto.pm line 9.

Compilation failed in require at tlpkg/TeXLive/TLPOBJ.pm line 16.

BEGIN failed--compilation aborted at tlpkg/TeXLive/TLPOBJ.pm line 16.

Compilation failed in require at ./install-tl line 55.

BEGIN failed--compilation aborted at ./install-tl line 55.

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

$ sudo yum install perl-Digest-MD5

FAQ-2:perl-TK

Error message from loading Tk:

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手动安装,这里不详述,有兴趣的可自行谷歌一下):

$ sudo yum install perl-Tk

最后,卸载镜像:

$ sudo umount /mnt/textlive/

umount: /mnt/textlive: target is busy.

(In some cases useful info about processes that use

the device is found by lsof(8) or fuser(1))

# fuser/lsof 能识别出正在对某个文件或端口访问的进程

$ sudo fuser -m /mnt/textlive/

/mnt/textlive:        6436c  6548c  6549c

$ ps aux|grep 6436

shenwei+  6436  0.0  0.0  2220 pts/3    Ss   10:36   0:00 -bash

shenwei+ 18041  0.0  0.0   952 pts/1    S+   11:11   0:00 grep --color 6436

$ ps aux|grep 6548

root      6548  0.0  0.1  4020 pts/3    S+   10:37   0:00 sudo ./install-tl

shenwei+ 18062  0.0  0.0   952 pts/1    S+   11:11   0:00 grep --color 6548

# 杀掉占用此设备的进程

$ sudo fuser -m -v -k /mnt/textlive/

# 执行 umount 就可以正常卸载

$ sudo umount /mnt/textlive/

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

export PATH=/usr/local/software/texlive/2018/bin/x86_64-linux:$PATH

export MANPATH=/usr/local/software/texlive/2018/texmf-dist/doc/man:$MANPATH

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 文件:

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 主要特点:

分别设置 CJK 和英文字体;

自动忽略 CJK 文字间的空格而保留其它空格,允许在非标点汉字和英文字 母 (a-z, A-Z) 间断行;

提供多种标点处理方式:全角式、半角式、开明式、行末半角式;

自动调整中英文间空白。

TexLive 2018 已经默认安装了 xeCJK,我们可以使用下面的命令查看 TexLive 已经安装的包以及包的具体信息:

# 查看 TexLive 所有已经安装的包

$ tlmgr list --only-installed

# 查看具体某个包的信息

$ tlmgr info xecjk

# 安装新的宏包

$ tlmgr install pkgname

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

\documentclass{article}

\usepackage{xeCJK}

\setCJKmainfont{SimSun}

\begin{document}

你好,TeX Live 2018!

\end{document}

CTAN,xecjk – Support for CJK documents in XeLaTeX

Tass,Regular Tass Office Hour,《CJK, xeCJK 與 cwTeX 對於中文支援的比較》

CTEX.ORG,《xeCJK 宏包(中文文档)》

CTAN,xecjk – Support for CJK documents in XELATEX

Jiedong Hao,jdhao blog,LaTeX 中如何使用中文

2019年,遇见更好的自己