2010-07-18 92 views
8

emacs上的AucTeX是相當神奇的工具,但是當我寫一個'$'時,所有的着色都被破壞了。

正常情況下,'$'會附帶另一個'$'來表示數學方程,但對於源列表,經常使用單個'$'。

\begin{Verbatim} 
(let ((buffer (url-retrieve-synchronously 
... 
    (re-search-forward "^$" nil 'move) <-- It breaks the coloring 
... 
\end{Verbatim} 

簡單的解決方法如下,以匹配'$'。

(re-search-forward "^$" nil 'move) ;; $ 

AucTeX有沒有任何選項可以防止這個'$'問題?

回答

9

AUCTeX知道$不是逐字環境特殊,但你必須告訴它Verbatim是通過安排它出現在LaTeX-verbatim-environments-local逐字環境。

如果AUCTeX最佳安裝,它已經知道,因爲AUCTeX爲通過\usepackage和朋友加載的每個文件加載樣式鉤子。您可能需要告訴它用C-c C-nTeX-normal-mode)解析頭文件。

如果這還不夠,這意味着Verbatim被定義在AUCTeX沒有足夠信息的樣式文件中。您可以告訴AUCTeX解析您已安裝的部分或全部樣式文件;請參閱AUCTeX手冊中的「自動」章節。

有時AUCTeX沒有設法解析樣式文件;那麼你可以手工完成這部分。下面的代碼假設您從fancyvrb包獲得Verbatim環境;否則改名。創建一個在TeX-style-path具有以下內容中提到的目錄的一個叫fancyvrb.el文件(有可能是值得其他東西放在那裏,我剛剛適應alltt.el):

 
(TeX-add-style-hook 
"fancyvrb" 
(lambda() 
    (LaTeX-add-environments "BVerbatim" "LVerbatim" "SaveVerbatim" "Verbatim") 
    (make-local-variable 'LaTeX-indent-environment-list) 
    (add-to-list 'LaTeX-indent-environment-list '("BVerbatim" current-indentation)) 
    (add-to-list 'LaTeX-indent-environment-list '("LVerbatim" current-indentation)) 
    (add-to-list 'LaTeX-indent-environment-list '("SaveVerbatim" current-indentation)) 
    (add-to-list 'LaTeX-indent-environment-list '("Verbatim" current-indentation)) 
    (make-local-variable 'LaTeX-verbatim-regexp) 
    (setq LaTeX-verbatim-regexp (concat LaTeX-verbatim-regexp "\\|\\([BL]?\\|Save\\)Verbatim")) 
    (add-to-list 'LaTeX-verbatim-environments-local "BVerbatim") 
    (add-to-list 'LaTeX-verbatim-environments-local "LVerbatim") 
    (add-to-list 'LaTeX-verbatim-environments-local "SaveVerbatim") 
    (add-to-list 'LaTeX-verbatim-environments-local "Verbatim") 
    (when (and (featurep 'font-latex) 
       (eq TeX-install-font-lock 'font-latex-setup)) 
    (font-latex-set-syntactic-keywords) 
    (setq font-lock-set-defaults nil) 
    (font-lock-set-defaults)))) 

(我想你也能做到這一點手動通過文件變量,但事實證明這是行不通的,因爲字體鎖定設置是在文件局部變量初始化之前構建的,我沒有看到解決方法。)

+0

對於最終的方法,是否可以將它們複製到TeX源代碼的最後一行?它似乎沒有那樣工作。 – prosseek 2010-07-18 19:36:50

+0

@prosseek:對不起,我在變量名中輸入了錯字,現在修復了。但即使如此,我只是測試過,並不適合我。它看起來像着色參數設置後變量被設置,我不知道如何解決這個問題。 – Gilles 2010-07-18 20:34:24

+0

好吧,使用文件局部變量將不起作用,所以* style * .el是要走的路。我編輯了我的答案以包含此代碼。 – Gilles 2010-07-18 21:41:19

4

是有原因使用逐字還是逐字?逐字逐字顯示部分中的所有內容對我來說都是相同的顏色。另外,我更願意使用listings package.來顯示膠乳中的程序代碼。

使用軟件包列表,您可以像使用\ begin {verbatim}一樣添加非格式化文本,但其主要目標是在文檔中包含任何編程語言的源代碼。

+0

感謝您的提示,並且我看到該列表是更好的選擇。但是,就emacs/AucTeX而言,我看到了同樣的問題。 – prosseek 2010-07-19 17:20:01