用Auctex寫(xiě)Latex

本文是《從零開(kāi)始——Emacs 安裝配置使用教程 2015》(簡(jiǎn)稱(chēng)《從零開(kāi)始》)的姊妹篇,總結(jié)了我在這幾個(gè)月中使用Auctex模式的經(jīng)驗(yàn)。建議優(yōu)先閱讀《從零開(kāi)始》,以理解安裝配置emacs的基本操作。我使用Tex Live2014作為L(zhǎng)atex的編譯環(huán)境。本文并不以介紹Latex以及Auctex為重點(diǎn),僅僅止于描述基本的使用場(chǎng)景。

Auctex簡(jiǎn)介

背景知識(shí)

本文以《從零開(kāi)始》中使用的設(shè)置為基礎(chǔ),如需額外設(shè)置均有提及。

本文中,init-auctex代表auctex的初始化文檔??梢允且粋€(gè)獨(dú)立的文件。如果你只有一個(gè)初始化文件,那么對(duì)應(yīng)其中初始化auctex的部分。

emacs中,有些指令會(huì)在當(dāng)前窗口的左側(cè)或右側(cè)調(diào)出一個(gè)臨時(shí)區(qū)域,提供一個(gè)選項(xiàng)列表。一般光標(biāo)會(huì)自動(dòng)切換到這個(gè)區(qū)域中。其中,使用方向鍵或者n、p可以上下移動(dòng),RET鍵確認(rèn)選擇。

LaTex快捷鍵

核心操作

  • 編譯文檔
    C-c C-c 對(duì)主文檔執(zhí)行各種命令,如編譯、預(yù)覽PDF等。如果沒(méi)有額外設(shè)置,默認(rèn)主文檔為當(dāng)前正在編輯的文檔。比如,使用Latex編譯當(dāng)前文檔,C-c C-c latex?;蛘?,預(yù)覽當(dāng)前文檔,C-c C-c view

  • 預(yù)覽PDF
    C-c C-v,相當(dāng)于C-c C-c view的快捷版。

其他操作

原則上,Latex源碼可以用任何文檔編輯器編寫(xiě)。使用emacs,只要知道編譯和預(yù)覽指令的快捷鍵,就足夠應(yīng)對(duì)一般需求了。但畢竟用的是大名鼎鼎的auctex模式,不去使用那些特色功能就太可惜了。

  • 放大字體
    C-x C-+

  • 添加章節(jié)
    C-c C-s

  • 文檔目錄
    C-c =,體驗(yàn)非常贊。

  • 添加各類(lèi)環(huán)境
    一個(gè)環(huán)境以\begin{env name}開(kāi)始,以\end{env name}結(jié)束。使用C-c C-e來(lái)快速添加一個(gè)指定環(huán)境,比如C-c C-e equation,并且可以快速指定相關(guān)屬性,比如label。

  • 快速引用label
    Latex中,許多地方都可以添加label屬性,比如章節(jié)、公式塊、圖表等。C-c )可以快速引用指定label。右側(cè)會(huì)自動(dòng)打開(kāi)一個(gè)窗口,鍵入RET選擇以label名的形式引用,鍵入p以頁(yè)碼的形式引用。接下來(lái),程序會(huì)檢索整個(gè)文檔,生成引用數(shù)據(jù),所以請(qǐng)稍微等一下。然后窗口頂部提示“SELECT A LABEL TYPE”,鍵入相關(guān)快捷鍵后,比如e(equation),程序會(huì)列出文檔中的全部有l(wèi)abel的公式,選中后即可插入。另外,emacs會(huì)智能檢測(cè)當(dāng)前位置的文本環(huán)境。比如,如果你在單詞“section”后面調(diào)用C-c ),那么程序會(huì)直接列出所有的"section label"。"equation"、"figure"也有類(lèi)似的效果。如果修改了源文檔中的label,記得在列出所有l(wèi)abel的窗口內(nèi)鍵入r來(lái)刷新label目錄。

文獻(xiàn)的引用比較特殊,參見(jiàn)RefTex插入引入文獻(xiàn)。
更多功能,請(qǐng)參考RefTeX-in-a-Nutshell

  • Auctex文檔內(nèi)預(yù)覽Latex
    auctex的核心功能之一。編輯完一個(gè)公式塊后,只想預(yù)覽公式本身編譯的結(jié)果,而非整個(gè)文檔,該功能便派上用場(chǎng)了。保證光標(biāo)在公式塊內(nèi),鍵入C-c C-p C-e即可。這時(shí),相應(yīng)位置的Latex代碼會(huì)被替換為渲染后的圖片。光標(biāo)進(jìn)入到圖片區(qū)域內(nèi)部時(shí),會(huì)顯示Latex源碼,移出源碼區(qū)后,會(huì)顯示圖片,很方便吧?當(dāng)然,修改過(guò)代碼后,需要再次鍵入C-c C-p C-e來(lái)重新生成圖片。對(duì)于大文檔,局部預(yù)覽可以節(jié)省許多時(shí)間。
    如果想要移除當(dāng)前文檔內(nèi)的全部預(yù)覽結(jié)果,鍵入C-c C-p C-c C-d即可。
    除了公式外,插入的圖片、表格等,都可以預(yù)覽。

進(jìn)階技巧

包含子文件的文檔

<a name="multifile"></a>編寫(xiě)較大的文檔時(shí),經(jīng)常會(huì)使用\include或者\input命令來(lái)將主要章節(jié)分離為獨(dú)立的文件。在編寫(xiě)這些子文檔時(shí),可不可以在鍵入編譯或預(yù)覽等命令時(shí),讓auctex自動(dòng)定位主文檔并執(zhí)行命令?參見(jiàn)Multifile Documents。在init-auctex中添加

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

之后,在文檔中鍵入編譯命令時(shí),emacs會(huì)首先判斷當(dāng)前正在編輯的文檔是否為主文檔。如果不是,則詢(xún)問(wèn)主文檔的位置。指定后,emacs自動(dòng)將該位置添加到文檔末尾,以備后續(xù)調(diào)用,比如:

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

對(duì)應(yīng)主文檔名為master.tex。如果手動(dòng)添加上述命令到文檔結(jié)尾,記得重新打開(kāi)該文檔,讓上述文件變量生效。

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

自動(dòng)執(zhí)行多步編譯

使用Arara,在init-auctex中添加

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

參見(jiàn)Arara integration in Emacs。然后在需要編譯的主文檔頂部添加需要順序執(zhí)行的指令。比如

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

配置好后,編譯文檔時(shí),鍵入C-c C-c arara即可。

注:

  1. Arara是Latex的擴(kuò)展包,TexLive2014默認(rèn)集成。
  2. 使用Arara編譯文檔報(bào)錯(cuò)后調(diào)試Bug時(shí),按<code>C-c `</code>會(huì)打開(kāi)一個(gè)名叫 "runscript.tlu"的文件。千萬(wàn)別改里面的代碼。emacs打開(kāi)這個(gè)文件只是為了提示你哪一步出錯(cuò)了。如果不小心改了代碼,網(wǎng)上可以湊到源文件。替換回來(lái)即可。

Forward-Inverse Search

寫(xiě)完長(zhǎng)長(zhǎng)的一篇Latex文檔,想在預(yù)覽PDF時(shí)讓閱讀器自動(dòng)定位到光標(biāo)所在的位置,怎么辦?預(yù)覽PDF時(shí),發(fā)現(xiàn)某個(gè)地方需要修改,如何在tex文檔中自動(dòng)定位相關(guān)位置?如標(biāo)題所示,這兩個(gè)功能的名字分別叫Forward SearchInverse Search,需要PDF閱讀器的支持。啟用需兩個(gè)步驟。

  1. 開(kāi)啟同步。
    參考Forward and Inverse Search。我使用的是synctex方法,需Latex擴(kuò)展包SyncTeX。
    這一步是為了讓編譯器自動(dòng)生成一個(gè).synctex.gz文檔,里面包含了PDF和Tex源碼之間位置上的對(duì)應(yīng)關(guān)系。

  2. 開(kāi)啟PDF閱讀器支持。
    我使用的是windows系統(tǒng)下的Sumatra。參考Sync Emacs AUCTeX with Sumatra PDF。

總結(jié)下,在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編譯文檔,那么應(yīng)該使用% arara: pdflatex: { synctex: on }。另外,對(duì)于包含子文件的文檔,記得設(shè)置主文檔。

RefTex插入引用文獻(xiàn)

以bibtex為例。

默認(rèn)快捷鍵是C-c [,如果無(wú)效,請(qǐng)使用C-h f reftex-citation查閱綁定的快捷鍵。另外,多文檔文件,記得指定主文檔。也可直接調(diào)用函數(shù),M-x reftex-citation。

第一步是在mini buffer中輸入需檢索的關(guān)鍵詞,如果留空則會(huì)返回文獻(xiàn)數(shù)據(jù)庫(kù)的全部?jī)?nèi)容。第二步,emacs會(huì)嘗試在右側(cè)新建一個(gè)臨時(shí)區(qū)域,名字為RefTex Select,用以展示檢索結(jié)果。光標(biāo)自動(dòng)切換到該區(qū)域后,除了普通的移動(dòng)和選擇外,f還可以繼續(xù)在左側(cè)打開(kāi)新窗口,瀏覽文獻(xiàn)數(shù)據(jù)庫(kù)中的完整信息,而且兩個(gè)窗口會(huì)保持同步滾動(dòng)。

另外,寫(xiě)論文時(shí)經(jīng)常需要以作者名加年份的方式引用,具體的引用格式稱(chēng)為Citation Style。參考Citation Styles,Latex中有許多包可以自定義格式的引用。假定使用natbib,希望以指令citetcitep的方式引用文獻(xiàn)。如果想借助RefTex自動(dòng)插入指令,需要將reftex-cite-format改為natlib。可以參考那篇文章中的操作步驟設(shè)置。設(shè)置好后,鍵入C-c [會(huì)出現(xiàn)許多新選項(xiàng)。各選項(xiàng)對(duì)應(yīng)的效果可以參考Reference sheet for natbib usage。另外,latex主文檔中也應(yīng)進(jìn)行相應(yīng)設(shè)置,參考Natbib In-Text Citation displays (author?),即在具體調(diào)用bibtex的地方使用\bibliographystyle{plainnat}。

其實(shí)更方便的是手動(dòng)輸入引用格式的代碼,比如\citep{},然后光標(biāo)移動(dòng)到{}中,鍵入C-c [引用文獻(xiàn),auctex會(huì)智能識(shí)別你已經(jīng)寫(xiě)好了引用的格式,而只插入文獻(xiàn)的索引關(guān)鍵詞。這點(diǎn)同引用label類(lèi)似。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容