TeX(读作Tech)是高德纳(Donald Knuth)发明的一个排版系统(typesetting system)。话说高德纳当年在写论文的时候,发现市面上压根儿就没有好用的排版系统,写出来的论文的版面很不美观。于是他一怒之下,撸起袖子把TeX给写出来了。他对自己的作品很满意,写完之后还洋洋得意宣布,谁要发现TeX的bug,就给谁开支票发奖金。

作为学计算机的,对高德纳大神当然崇拜有加,可惜以往的审美水平有限,觉得用微软的Word写文章就很满意了。可是文章写多了,总觉得需要再改进点什么,所以就来了解以下TeX是如何使用的。本文的目的是对TeX做简单的介绍;并在Mac上做一点实践,写几个示例来帮助自己加深对TeX的了解。

之前说TeX是一个排版系统,更确切地说它是一个脚本语言,用于告诉那些输出设备如何进行排版。作为脚本语言,TeX包含非常多细节(参考高德纳的The Tex Book),使用起来需要做一定程度的定制。使用TeX的人多了,不同的定制也多了,但是目前最流行的定制应该是LaTeX。LaTeX在TeX之上,对一些常用的任务做了定制,避免重复性的劳动。所以对于一般用户,最好的策略是直接使用LaTeX,在需要开发定制化功能的时候再去纠缠TeX的细节。

Mac上TeX的安装

在Mac上,最直截了当的方法是到TeX Users Group下载MacTeX安装。但是MacTeX的体积有2GB之巨,对于硬盘空间吃紧的,可以到BasicTex的页面下载瘦身吧的BasicTex,只有不到100MB。

BasicTex不包含图形界面,有位仁兄的网页推荐了几款GUI编辑器,可以从中选一个:

  • TexMaker
  • TeXstudio
  • TeXworks
  • TeXShop
  • LyX
  • TeXlipse

个人觉得TexMaker和TeXstudio都挺好用的。

一个简单的例子:Hello, world!

\documentclass{article}
\begin{document}
	Hello, \emph{world}!
\end{document}

以上的例子保存成hello.tex,然后执行命令pdflatex hello.tex可以生成一个hello.pdf,里面的内容是:Hello, world!

如果是使用TexMaker的话,可以直接在它提供的预览窗口预览生成的效果。

LaTeX是脚本语言,它可以指挥不同的后端输出不同的文档。pdflatex是其输出成pdf的后段,还有很多其他的后端,比如dvi或者ps。

TexLive的包管理器:tlmgr

BasicTeX或者MacTex都是术语TexLive的发行版(另外一个著名的发行版是MikTeX,二者之间有比较)。TexLive带着一个包管理器,叫做tlmgr(TeX Live Manager)。

如果tlmgr默认从ctan.org上下载包,ctan会根据IP地址分配一个镜像来下载包。由于国内可能会分到教育网的镜像,导致在运营商的网络下载不快,一种解决办法是强制制定使用某个镜像。

  • Mirror Asia找一个适用的镜像,这边以以mir­rors.shu­osc.org为例
  • 使用命令tlmgr option repository http://mirrors.shuosc.org/CTAN/systems/texlive/tlnet/添加镜像(可能要在命令行前面加sudo来获取系统权限)

添加https的镜像,比如https://mirrors.hustunique.com/ctan/systems/texlive/tlnet/有可能会导致错误,错误信息:/Library/TeX/texbin/tlmgr: open tlpdb(https://mirrors.hustunique.com/ctan/systems/texlive/tlnet/tlpkg/texlive.tlpdb) failed: Inappropriate ioctl for device at /usr/local/texlive/2017basic/tlpkg/TeXLive/TLPDB.pm line 360.。解决方法是使用http的镜像。

package的安装路径

现在我们可以尝试使用tlmgr安装一个包media9:tlmgr install media9

media9会被安装到目录/usr/local/texlive/2017basic/texmf-dist/tex/latex里面。

在我的Mac上,安装完包后,需要手动执行命令sudo texhash这样tex才可能把依赖关系搞清楚,不知为何?

另外tlmgr还支持USER MODE,即把包安装到系统目录以外的目录,具体参考tlmgr user mode。简单地说,就是先使用 tlmgr --init-usertree初始化USER MODE目录,然后tlmgr在安装包的时候带上*–usermode*选项,例子:tlmgr --usermode install 12many 2up

如果在编译一个tex文件的时候发现一些依赖缺失,却不知道需要安装哪些包时,可以使用texliveonfly来编译这个tex文件。texliveonfly会自动寻找和下载依赖。texliveonfly可以用tlmgr安装,参考stackexchange

一个更高级的例子:在LaTeX里面嵌入MP3

假设前面已经安装过media9的包了。首先到这个地址下载MP3素材“Horse-and-carriage-passing-by.mp3”。然后借用这个帖子里面的示例代码,将里面的mp3替换成下载的素材:

\documentclass{beamer}
\usepackage{media9}
%\usepackage[english]{babel} % no longer required as of media9-20120412 (v0.4)

\begin{document}

\begin{frame}{Sound example}
\includemedia[
  addresource=Horse-and-carriage-passing-by.mp3,
  flashvars={
    source=Horse-and-carriage-passing-by.mp3
   &autoPlay=true
  }
]{\fbox{Play}}{APlayer.swf}
\end{frame}

\end{document}

将上面的tex代码保存成文件,用pdflatex编译,会生成一个pdf文件。用Adobe Reader打开这个pdf文件,就可以点击里面的播放键播放mp3了。

另外一个可参考的例子是Audio examples in phonetics project

上面的例子使用了media9这个包。media9是通过在pdf文件中插入swf播放器来支持音频和视频,这需要Adobe Flash Player的支持。Adobe Reader 9和10有内建的Flash Player,但是从11开始就不自带了,需要操作系统安装有Adobe Flash Player才行。

(完)