用Auctex写Latex

本文是《从零开始——Emacs 安装配置使用教程 2015》(简称《从零开始》)的姊妹篇,总结了我在这几个月中使用Auctex模式的经验。建议优先阅读《从零开始》,以理解安装配置emacs的基本操作。我使用Tex Live2014作为Latex的编译环境。本文并不以介绍Latex以及Auctex为重点,仅仅止于描述基本的使用场景。

Auctex简介

背景知识

本文以《从零开始》中使用的设置为基础,如需额外设置均有提及。

本文中,init-auctex代表auctex的初始化文档。可以是一个独立的文件。如果你只有一个初始化文件,那么对应其中初始化auctex的部分。

emacs中,有些指令会在当前窗口的左侧或右侧调出一个临时区域,提供一个选项列表。一般光标会自动切换到这个区域中。其中,使用方向键或者np可以上下移动,RET键确认选择。

LaTex快捷键

核心操作

  • 编译文档
    C-c C-c 对主文档执行各种命令,如编译、预览PDF等。如果没有额外设置,默认主文档为当前正在编辑的文档。比如,使用Latex编译当前文档,C-c C-c latex。或者,预览当前文档,C-c C-c view

  • 预览PDF
    C-c C-v,相当于C-c C-c view的快捷版。

其他操作

原则上,Latex源码可以用任何文档编辑器编写。使用emacs,只要知道编译和预览指令的快捷键,就足够应对一般需求了。但毕竟用的是大名鼎鼎的auctex模式,不去使用那些特色功能就太可惜了。

  • 放大字体
    C-x C-+

  • 添加章节
    C-c C-s

  • 文档目录
    C-c =,体验非常赞。

  • 添加各类环境
    一个环境以\begin{env name}开始,以\end{env name}结束。使用C-c C-e来快速添加一个指定环境,比如C-c C-e equation,并且可以快速指定相关属性,比如label。

  • 快速引用label
    Latex中,许多地方都可以添加label属性,比如章节、公式块、图表等。C-c )可以快速引用指定label。右侧会自动打开一个窗口,键入RET选择以label名的形式引用,键入p以页码的形式引用。接下来,程序会检索整个文档,生成引用数据,所以请稍微等一下。然后窗口顶部提示“SELECT A LABEL TYPE”,键入相关快捷键后,比如e(equation),程序会列出文档中的全部有label的公式,选中后即可插入。另外,emacs会智能检测当前位置的文本环境。比如,如果你在单词“section”后面调用C-c ),那么程序会直接列出所有的"section label"。"equation"、"figure"也有类似的效果。如果修改了源文档中的label,记得在列出所有label的窗口内键入r来刷新label目录。

文献的引用比较特殊,参见RefTex插入引入文献
更多功能,请参考RefTeX-in-a-Nutshell

  • Auctex文档内预览Latex
    auctex的核心功能之一。编辑完一个公式块后,只想预览公式本身编译的结果,而非整个文档,该功能便派上用场了。保证光标在公式块内,键入C-c C-p C-e即可。这时,相应位置的Latex代码会被替换为渲染后的图片。光标进入到图片区域内部时,会显示Latex源码,移出源码区后,会显示图片,很方便吧?当然,修改过代码后,需要再次键入C-c C-p C-e来重新生成图片。对于大文档,局部预览可以节省许多时间。
    如果想要移除当前文档内的全部预览结果,键入C-c C-p C-c C-d即可。
    除了公式外,插入的图片、表格等,都可以预览。

进阶技巧

包含子文件的文档

<a name="multifile"></a>编写较大的文档时,经常会使用\include或者\input命令来将主要章节分离为独立的文件。在编写这些子文档时,可不可以在键入编译或预览等命令时,让auctex自动定位主文档并执行命令?参见Multifile Documents。在init-auctex中添加

;; Query for master file.
(setq-default TeX-master nil) 

之后,在文档中键入编译命令时,emacs会首先判断当前正在编辑的文档是否为主文档。如果不是,则询问主文档的位置。指定后,emacs自动将该位置添加到文档末尾,以备后续调用,比如:

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "master"
%%% End:

对应主文档名为master.tex。如果手动添加上述命令到文档结尾,记得重新打开该文档,让上述文件变量生效。

另外,这一步也是RefTex、Forward-Invserse Search等功能在多文件文档中能正常工作的前提。

自动执行多步编译

使用Arara,在init-auctex中添加

(eval-after-load "tex"
  '(add-to-list 'TeX-command-list
        '("Arara" "arara %s" TeX-run-TeX nil t :help "Run Arara.")))

参见Arara integration in Emacs。然后在需要编译的主文档顶部添加需要顺序执行的指令。比如

% arara: pdflatex
% arara: bibtex
% arara: pdflatex
% arara: pdflatex
\documentclass {article}
...

配置好后,编译文档时,键入C-c C-c arara即可。

注:

  1. Arara是Latex的扩展包,TexLive2014默认集成。
  2. 使用Arara编译文档报错后调试Bug时,按<code>C-c `</code>会打开一个名叫 "runscript.tlu"的文件。千万别改里面的代码。emacs打开这个文件只是为了提示你哪一步出错了。如果不小心改了代码,网上可以凑到源文件。替换回来即可。

Forward-Inverse Search

写完长长的一篇Latex文档,想在预览PDF时让阅读器自动定位到光标所在的位置,怎么办?预览PDF时,发现某个地方需要修改,如何在tex文档中自动定位相关位置?如标题所示,这两个功能的名字分别叫Forward SearchInverse Search,需要PDF阅读器的支持。启用需两个步骤。

  1. 开启同步。
    参考Forward and Inverse Search。我使用的是synctex方法,需Latex扩展包SyncTeX
    这一步是为了让编译器自动生成一个.synctex.gz文档,里面包含了PDF和Tex源码之间位置上的对应关系。

  2. 开启PDF阅读器支持。
    我使用的是windows系统下的Sumatra。参考Sync Emacs AUCTeX with Sumatra PDF

总结下,在init-auctex添加

;; forward and inverse search
(setq TeX-source-correlate-mode t)
(setq TeX-source-correlate-method 'synctex)
(setq TeX-source-correlate-start-server t)

;; use Sumatra PDF to preview pdf
(eval-after-load 'tex
  '(progn
     (assq-delete-all 'output-pdf TeX-view-program-selection)
     (add-to-list 'TeX-view-program-selection '(output-pdf "Sumatra PDF"))
))

注意替换Sumatra安装路径。
另外,需要让Sumatra支持Inverse Search。Sumatra中,Settings->Options, 在set Set inverse search command line那里添加
c:\emacs\bin\emacsclient.exe" --no-wait +%l "%f
注意替换emacs路径。

:如果同Arara配合使用,需要配套使用{ synctex: on }。参考1.1.2 Arara。比如,如果使用pdflatex编译文档,那么应该使用% arara: pdflatex: { synctex: on }。另外,对于包含子文件的文档,记得设置主文档。

RefTex插入引用文献

以bibtex为例。

默认快捷键是C-c [,如果无效,请使用C-h f reftex-citation查阅绑定的快捷键。另外,多文档文件,记得指定主文档。也可直接调用函数,M-x reftex-citation

第一步是在mini buffer中输入需检索的关键词,如果留空则会返回文献数据库的全部内容。第二步,emacs会尝试在右侧新建一个临时区域,名字为RefTex Select,用以展示检索结果。光标自动切换到该区域后,除了普通的移动和选择外,f还可以继续在左侧打开新窗口,浏览文献数据库中的完整信息,而且两个窗口会保持同步滚动。

另外,写论文时经常需要以作者名加年份的方式引用,具体的引用格式称为Citation Style。参考Citation Styles,Latex中有许多包可以自定义格式的引用。假定使用natbib,希望以指令citetcitep的方式引用文献。如果想借助RefTex自动插入指令,需要将reftex-cite-format改为natlib。可以参考那篇文章中的操作步骤设置。设置好后,键入C-c [会出现许多新选项。各选项对应的效果可以参考Reference sheet for natbib usage。另外,latex主文档中也应进行相应设置,参考Natbib In-Text Citation displays (author?),即在具体调用bibtex的地方使用\bibliographystyle{plainnat}

其实更方便的是手动输入引用格式的代码,比如\citep{},然后光标移动到{}中,键入C-c [引用文献,auctex会智能识别你已经写好了引用的格式,而只插入文献的索引关键词。这点同引用label类似。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容