声明 本文是介绍如何使用 Emacs
来写作 LaTeX
数学文档的文章,至于到底该使用哪个编辑器来写作 LaTeX
文档这样的问题,与本文无关,不在本文考虑范围。
本文介绍使用 Emacs
配合相关插件来编写 LaTeX
文档(偏向数学文档),并作出一份相关的最小化配置,主要内容如下:
Emacs
基础.Emacs
安装.- 基本使用.
- 插件的安装方法.
- 与
LaTeX
相关插件的安装与配置.auctex
的安装及配置.company-auctex
的安装及配置.cdlatex
的安装及配置.
有一个内容被略去,即 LaTeX
环境的安装,这一点不在本文介绍范围,请自行网上搜索。
Emacs
是一个通用的文本编辑器,其本质上是一个 Emacs Lisp
语言(简称 elisp
)的解释器和编程平台, elisp
是一个 lisp
系的编程语言。通过用 elisp
编写实现各种功能的程序(插件),可以无限的扩展 Emacs
的功能。
[待完成]
无论如何, Emacs
自带的教程必须通读两遍,安装后打开编辑器,界面上就有这个教程的链接(Emacs Tutorial
),其中介绍了基本的使用。
Emacs
可以通过其自带的编程语言 Emacs Lisp
进行无限制扩展,这些用于扩展 Emacs
功能的程序代码就称为配置,也正因为如此, Emacs
的配置可以简单到没有配置,也可以复杂到拥有几十万个代码文件,甚至比 Emacs
本身还更复杂的配置。
Emacs
的配置文件必须放在指定路径才能被正确加载,这就是 HOME
路径,在类 unix
系统上就是用户的主目录,在 windows
上根据系统版本的不同而不同,在 windows 2000/XP/2003
上是 C:\Documents and Settings\<username>\Application Data
,在 windows vista/7/2008/8/10
上则是 C:\Users\<username>\AppData\Roaming
,其它版本系统请查阅 Emacs
官方文档的介绍。
如果配置内容不多,可以只写一个文件在 HOME
路径下,这个文件必须被命名为 .emacs
注意前面的点号,在 windows
系统中则是 _emacs
,因为 windows
文件名不允许以点号开头。
如果配置内容比较多,则可以在 HOME
下创建名为 .emacs.d
的目录(windows
下不能直接在图形界面中创建点号开头的文件夹,但可以在命令行创建,也可以通过启动一次 Emacs
的方式自动创建),并在此目录下创建文件 init.el
作为配置的入口文件(名称必须是这个)。
Emacs
有大量的插件包(称为 package
)可供下载和安装,这些插件实现了各种各样的额外功能,每一个 package
都是一个独立的 Emacs Lisp
程序,而且通常还有独立的手册或者文档。按下 M-x list-packages
后会在一个名为 *Packages*
的缓冲区中列出所有的 package
,可以在此缓冲区中安装和删除 package
.
如果已经知道一个 package
的名字,则可以 C-h P
后输入这个名字,回车后会在一个名为 *Help*
的缓冲区中显示这个 package
的描述信息。
安装 package
的方式有两种,一种是手工安装,一种是自动安装,当然这都指的是通过 Emacs
内置的 package
工具来安装,除此之外还可以手工下载后自行加载 package
,这是后话。
手工安装一个 package
的方法是,在 *Packages*
缓冲区中,将光标移动到要安装的 package
上,按下 i
标记它,可以一次性标记多个 package
,标记完成后按下 x
, Emacs
就开始执行下载安装的动作,默认的安装目录是 ~/.emacs.d/elpa/
.
默认情况下, Emacs
会从官方维护和插件仓库中下载插件,可以通过配置第三方插件仓库来改变这一点,这一点是有用的,因为默认的官方仓库都在国外,速度通常比较慢,网友”子龙山人”在国内利用阿里的服务器搭建了主要的官方仓库的国内镜像,详情见 https://elpa.emacs-china.org/, 按上面的说明,我们把默认的插件仓库切换到 emacs-china
上的仓库镜像,把以下代码加到配置文件中。
(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/") ("melpa" . "http://elpa.emacs-china.org/melpa/")))
完整代码如下(lisp/init-auctex.el)
;; 如果 auctex 未安装,则进行安装
(install-package-if-not-found 'auctex)
;; 加载 auctex.el 文件
(load "auctex.el" nil t t)
;; 如果需要预览 latex,则去掉下面这行前面的注释
;;(load "preview-latex.el" nil t t)
;; 如果是 windows 系统,则需要 MikTeX.
(if (string-equal system-type "windows-nt")
(require 'tex-mik))
;; 默认情况下,编译的时候总是假定正在编译的 tex 文件为主文件,如果去掉下面这行的注释,
;; 则在每次编译时都会询问哪一个 tex 文件是主文件。
(setq-default TeX-master nil) ; Query for master file.
;; 定义 LaTeX 模式在哪些环境下启用
(mapc (lambda (mode)
(add-hook 'LaTeX-mode-hook mode))
(list 'LaTeX-math-mode
'turn-on-reftex))
;; 作 LaTeX 相关设定
(add-hook 'LaTeX-mode-hook
(lambda ()
(setq TeX-auto-untabify t ; 在保存的时候自动去掉的 TAB 空白
TeX-engine 'xetex ; 默认使用 XeLaTeX 编译引擎
TeX-show-compilation t) ; 显示编译输出窗口
(TeX-global-PDF-mode t) ; 启用 PDF 模式
(setq TeX-save-query nil)
(imenu-add-menubar-index)
(define-key LaTeX-mode-map (kbd "TAB") 'TeX-complete-symbol)))
(provide 'init-auctex)
完整代码如下(lisp/init-company-auctex.el)
;; 如果没有安装 company-auctex,则进行安装
(install-package-if-not-found 'company-auctex)
;; 加载 company-auctex 并初始化
(use-package company-auctex
:config
(company-auctex-init))
(provide 'init-company-auctex)
完整代码(lisp/init-cdlatex.el)
;; 如果 cdlatex 没有安装,则进行安装
(install-package-if-not-found 'cdlatex)
;; 在 LaTeX 模式被启用时,启用 cdlatex
(use-package cdlatex
:config
(add-hook 'org-mode-hook 'turn-on-org-cdlatex)
(add-hook 'LaTeX-mode-hook 'turn-on-cdlatex))
;; 提供 init-cdlatex 特性.
(provide 'init-cdlatex)