05月26, 2017

在 macOS 下进行 TeX 写作

由于版本变更等原因,本文可能已经不符事实。笔者现在已经倾向于使用在线工具(overleaf etc)编辑 TeX 文档。

Knuth 在写 TAOCP 的时候遭遇了排版问题,当时粗糙的排版技术无法满足他(一个强迫症)的需求,于是他决定开发 TeX(排版系统)。有趣的是,他原以为这个东西不是很难,半年就能写好,但最终他用了十年的时间才最终停止修改。不同于我们常用的 Word、Pages 等 WYSIWYG(所见即所得)的排版软件,TeX 是一个所想即所得的排版软件,事实上它并不希望你关心最终的渲染效果,而是专注于内容。

许多人在刚接触 TeX 的时候,总会被与之相关的一些名词困扰,即使你使用 Wikipedia 进行检索,也很难得到准确严谨的答案。以下,我以 TUG(TeX Users Group) 上的介绍为主来说明一下。

相关概念

关于 TeX 主要有以下几个概念:

发行版:MiKTeX、TeXLive,这些都是常见的发行版。发行版打包了一大堆与 TeX 相关的软件,方便分发与安装。当人们说:“我要在我的电脑上装一个 TeX”,他们往往说的就是一个发行版。

引擎:TeX、pdfTeX、XeTeX,这些是编译 TeX 的引擎,它们把纯文本编译为我们想要的富文本文档。当人们在说:“TeX 找不到我的字体”时,他们往往说的就是一个引擎的问题。

格式:LaTeX、plain TeX,这些是 TeX 文本的格式,我们可以把他们看作一个个编程语言,它们之间可能是不同方言的关系。LaTeX 作为广泛使用的方言,人们常常用它来指代 TeX 语言。

弄清楚这些概念,我们就可以进入 TeX 的世界了。

TeX 的发行版不是很多,一般推荐的是 TUG 合作开发的 TeX Live,本文即以此发行版为例介绍。

TeX Live

建议在镜像站上下载,比如在 tuna 的镜像站页右侧就有一个下载链接,里面就可以看到 TeX 排版系统。

MacTeX

macOS 下的 TeX Live 叫做 MacTeX,我安装的是当前最新的 20161009 版本。安装结束后,强烈建议仔细阅读 Applications -> TeX 里的两个 PDF 文件,READ ME FIRST 和 What Is Installed。这两个文档详细说明发行版的安装路径,以及 GUI 的基本使用说明。

如果你读过 README 文档,你应该已经知道 TeXShop 的基本用法,本文不再赘述。下面我们来看一下 TeX 的命令行工具。

命令行

在命令行下进行 TeX 写作虽然繁琐但并不困难,TeX Live 安装的时候已经向 PATH 和 MANPATH 中写入了各种工具的路径并添加了 manual。

首先我们需要使用编辑器,创建一个具有如下内容的文件,命名为 sample.tex

\documentclass{article}
\usepackage{amssymb}
\title{Brief Article}
\author{The Author}
\begin{document}
\maketitle
\end{document}

接着我们用 latex 将其编译为 dvi 文件

latex sample.tex

这个命令将会在目录下生成 sample.dvi 文件,在程序的输出界面上我们可以看出这个命令其实调用的是 pdfTeX 这个程序,相当于 pdftex &latex sample.tex。dvi(Device independent file format)文件已经保存了所有文本内容和排版信息,但它是一个二进制文件,并不是为我们阅读准备的。

于是我们将 dvi 文件转换为 pdf 文件

dvipdf sample.dvi

这个命令将会在目录下生成 sample.pdf 文件。此时在 macOS 下可以直接使用 open sample.pdf 命令预览此 PDF 文件了。除了 dvipdf 命令以外,还有 dvipng、dvigif 等转换成其他格式的命令。

中文支持

LaTeX 默认不支持中文排版。有很多方法可以使其支持中文,由于历史原因,很多插件已经不再维护。建议使用 XeLaTeX 配合 ctex 宏包支持中文。对于命令行,只需要把第一行的 latex 命令换成 xelatex 命令即可。

VS Code

Code 在 LaTeX Workshop 插件的帮助下可以很好地支持 TeX 的编辑和 PDF 预览。

配置 XeLaTeX 只要修改用户配置文件,在latex-workshop.latex.tools中添加xelatex,然后在latex-workshop.latex.recipes中添加xelatex -> bibtex -> xelatex*2。LaTeX Workshop 默认使用recipes中第一个工具链进行编译。

"latex-workshop.latex.recipes": [
        {
            "name": "xelatex -> bibtex -> xelatex*2",
            "tools": [
                "xelatex",
                "bibtex",
                "xelatex",
                "xelatex"
            ]
        },
        ......
    ],
 "latex-workshop.latex.tools": [
        ......
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOC%"
            ]
        }
    ]

本文链接:https://sxing.xyz/post/tex.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。