本文是《從零開始——Emacs 安裝配置使用教程 2015》(簡稱《從零開始》)的姊妹篇,總結(jié)了我在這幾個月中使用Auctex模式的經(jīng)驗。建議優(yōu)先閱讀《從零開始》,以理解安裝配置emacs的基本操作。我使用Tex Live2014作為Latex的編譯環(huán)境十偶。本文并不以介紹Latex以及Auctex為重點,僅僅止于描述基本的使用場景园细。
Auctex簡介
背景知識
本文以《從零開始》中使用的設(shè)置為基礎(chǔ)惦积,如需額外設(shè)置均有提及。
本文中猛频,init-auctex
代表auctex的初始化文檔狮崩。可以是一個獨立的文件鹿寻。如果你只有一個初始化文件睦柴,那么對應(yīng)其中初始化auctex的部分。
emacs中毡熏,有些指令會在當前窗口的左側(cè)或右側(cè)調(diào)出一個臨時區(qū)域坦敌,提供一個選項列表。一般光標會自動切換到這個區(qū)域中痢法。其中狱窘,使用方向鍵或者n
、p
可以上下移動财搁,RET
鍵確認選擇训柴。
LaTex快捷鍵
核心操作
編譯文檔
C-c C-c
對主文檔執(zhí)行各種命令,如編譯妇拯、預(yù)覽PDF等幻馁。如果沒有額外設(shè)置,默認主文檔為當前正在編輯的文檔越锈。比如仗嗦,使用Latex編譯當前文檔,C-c C-c latex
甘凭∠」眨或者,預(yù)覽當前文檔丹弱,C-c C-c view
德撬。預(yù)覽PDF
C-c C-v
,相當于C-c C-c view
的快捷版躲胳。
其他操作
原則上蜓洪,Latex源碼可以用任何文檔編輯器編寫。使用emacs坯苹,只要知道編譯和預(yù)覽指令的快捷鍵隆檀,就足夠應(yīng)對一般需求了。但畢竟用的是大名鼎鼎的auctex模式,不去使用那些特色功能就太可惜了恐仑。
放大字體
C-x C-+
添加章節(jié)
C-c C-s
文檔目錄
C-c =
泉坐,體驗非常贊。添加各類環(huán)境
一個環(huán)境以\begin{env name}
開始裳仆,以\end{env name}
結(jié)束腕让。使用C-c C-e
來快速添加一個指定環(huán)境,比如C-c C-e equation
歧斟,并且可以快速指定相關(guān)屬性纯丸,比如label构捡。快速引用label
Latex中,許多地方都可以添加label屬性壳猜,比如章節(jié)勾徽、公式塊、圖表等统扳。C-c )
可以快速引用指定label喘帚。右側(cè)會自動打開一個窗口,鍵入RET
選擇以label名的形式引用咒钟,鍵入p
以頁碼的形式引用吹由。接下來,程序會檢索整個文檔朱嘴,生成引用數(shù)據(jù)倾鲫,所以請稍微等一下。然后窗口頂部提示“SELECT A LABEL TYPE”萍嬉,鍵入相關(guān)快捷鍵后乌昔,比如e
(equation),程序會列出文檔中的全部有l(wèi)abel的公式壤追,選中后即可插入磕道。另外,emacs會智能檢測當前位置的文本環(huán)境行冰。比如溺蕉,如果你在單詞“section”后面調(diào)用C-c )
,那么程序會直接列出所有的"section label"悼做。"equation"疯特、"figure"也有類似的效果。如果修改了源文檔中的label肛走,記得在列出所有l(wèi)abel的窗口內(nèi)鍵入r
來刷新label目錄辙芍。
文獻的引用比較特殊,參見RefTex插入引入文獻。
更多功能故硅,請參考RefTeX-in-a-Nutshell
- Auctex文檔內(nèi)預(yù)覽Latex
auctex的核心功能之一庶灿。編輯完一個公式塊后,只想預(yù)覽公式本身編譯的結(jié)果吃衅,而非整個文檔往踢,該功能便派上用場了。保證光標在公式塊內(nèi)徘层,鍵入C-c C-p C-e
即可峻呕。這時,相應(yīng)位置的Latex代碼會被替換為渲染后的圖片趣效。光標進入到圖片區(qū)域內(nèi)部時瘦癌,會顯示Latex源碼,移出源碼區(qū)后跷敬,會顯示圖片讯私,很方便吧?當然西傀,修改過代碼后斤寇,需要再次鍵入C-c C-p C-e
來重新生成圖片。對于大文檔拥褂,局部預(yù)覽可以節(jié)省許多時間娘锁。
如果想要移除當前文檔內(nèi)的全部預(yù)覽結(jié)果,鍵入C-c C-p C-c C-d
即可饺鹃。
除了公式外莫秆,插入的圖片、表格等悔详,都可以預(yù)覽馏锡。
進階技巧
包含子文件的文檔
<a name="multifile"></a>編寫較大的文檔時,經(jīng)常會使用\include
或者\input
命令來將主要章節(jié)分離為獨立的文件伟端。在編寫這些子文檔時杯道,可不可以在鍵入編譯或預(yù)覽等命令時,讓auctex自動定位主文檔并執(zhí)行命令责蝠?參見Multifile Documents党巾。在init-auctex
中添加
;; Query for master file.
(setq-default TeX-master nil)
之后,在文檔中鍵入編譯命令時霜医,emacs會首先判斷當前正在編輯的文檔是否為主文檔齿拂。如果不是,則詢問主文檔的位置肴敛。指定后署海,emacs自動將該位置添加到文檔末尾吗购,以備后續(xù)調(diào)用,比如:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "master"
%%% End:
對應(yīng)主文檔名為master.tex
砸狞。如果手動添加上述命令到文檔結(jié)尾捻勉,記得重新打開該文檔,讓上述文件變量生效刀森。
另外踱启,這一步也是RefTex、Forward-Invserse Search等功能在多文件文檔中能正常工作的前提研底。
自動執(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.")))
參見Arara integration in Emacs。然后在需要編譯的主文檔頂部添加需要順序執(zhí)行的指令榜晦。比如
% arara: pdflatex
% arara: bibtex
% arara: pdflatex
% arara: pdflatex
\documentclass {article}
...
配置好后冠蒋,編譯文檔時,鍵入C-c C-c arara
即可乾胶。
注:
- Arara是Latex的擴展包抖剿,TexLive2014默認集成。
- 使用Arara編譯文檔報錯后調(diào)試Bug時胚吁,按<code>C-c `</code>會打開一個名叫 "runscript.tlu"的文件牙躺。千萬別改里面的代碼愁憔。emacs打開這個文件只是為了提示你哪一步出錯了腕扶。如果不小心改了代碼,網(wǎng)上可以湊到源文件吨掌。替換回來即可半抱。
Forward-Inverse Search
寫完長長的一篇Latex文檔,想在預(yù)覽PDF時讓閱讀器自動定位到光標所在的位置膜宋,怎么辦窿侈?預(yù)覽PDF時,發(fā)現(xiàn)某個地方需要修改秋茫,如何在tex文檔中自動定位相關(guān)位置史简?如標題所示,這兩個功能的名字分別叫Forward Search和Inverse Search肛著,需要PDF閱讀器的支持圆兵。啟用需兩個步驟。
開啟同步枢贿。
參考Forward and Inverse Search殉农。我使用的是synctex方法,需Latex擴展包SyncTeX局荚。
這一步是為了讓編譯器自動生成一個.synctex.gz
文檔超凳,里面包含了PDF和Tex源碼之間位置上的對應(yīng)關(guān)系愈污。開啟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 }
。另外迷雪,對于包含子文件的文檔限书,記得設(shè)置主文檔。
RefTex插入引用文獻
以bibtex為例章咧。
默認快捷鍵是C-c [
倦西,如果無效,請使用C-h f reftex-citation
查閱綁定的快捷鍵赁严。另外扰柠,多文檔文件,記得指定主文檔疼约。也可直接調(diào)用函數(shù)卤档,M-x reftex-citation
。
第一步是在mini buffer中輸入需檢索的關(guān)鍵詞程剥,如果留空則會返回文獻數(shù)據(jù)庫的全部內(nèi)容劝枣。第二步,emacs會嘗試在右側(cè)新建一個臨時區(qū)域织鲸,名字為RefTex Select
舔腾,用以展示檢索結(jié)果。光標自動切換到該區(qū)域后昙沦,除了普通的移動和選擇外琢唾,f
還可以繼續(xù)在左側(cè)打開新窗口,瀏覽文獻數(shù)據(jù)庫中的完整信息盾饮,而且兩個窗口會保持同步滾動采桃。
另外懒熙,寫論文時經(jīng)常需要以作者名加年份的方式引用,具體的引用格式稱為Citation Style普办。參考Citation Styles工扎,Latex中有許多包可以自定義格式的引用。假定使用natbib衔蹲,希望以指令citet
肢娘、citep
的方式引用文獻。如果想借助RefTex自動插入指令舆驶,需要將reftex-cite-format
改為natlib
橱健。可以參考那篇文章中的操作步驟設(shè)置沙廉。設(shè)置好后拘荡,鍵入C-c [
會出現(xiàn)許多新選項。各選項對應(yīng)的效果可以參考Reference sheet for natbib usage撬陵。另外珊皿,latex主文檔中也應(yīng)進行相應(yīng)設(shè)置,參考Natbib In-Text Citation displays (author?)巨税,即在具體調(diào)用bibtex的地方使用\bibliographystyle{plainnat}
蟋定。
其實更方便的是手動輸入引用格式的代碼,比如\citep{}
草添,然后光標移動到{}
中驶兜,鍵入C-c [
引用文獻,auctex會智能識別你已經(jīng)寫好了引用的格式果元,而只插入文獻的索引關(guān)鍵詞促王。這點同引用label類似犀盟。