2012-08-07 74 views
5

我想強調我在乳膠創造了一個新的命令:Emacs的Auctex定製的語法高亮

\newcommand{\conceito}[3]{ 
    \subsection{#1} (Original: \textit{#2} #3). 
} 

我用這個代碼是這樣的:

\conceito{Foo}{Bar}{Bla} 

我跟着manual,並把這個代碼在我~/.emacs,但沒有奏效:

(add-hook 'LaTeX-mode-hook 
    (lambda() 
     (font-lock-add-keywords nil 
      '((""\\<\\(\\conceito)\\>"" 1 font-lock-warning-face t))))) 

有什麼不對?

回答

6

編輯:Deokhwan金原指出,你的正則表達式包含兩個連續的雙引號,而右括號)需要用雙引號進行轉義還有:

(add-hook 'LaTeX-mode-hook 
    (lambda() 
     (font-lock-add-keywords nil 
      '(("\\<\\(\\conceito\\)\\>" 1 font-lock-warning-face t))))) 

除了點指出,通過Deokhwan金,也存在以下兩個問題:

  • 需要四個backslashs,而不是兩個「conceito」的前面:\\\\conceito

  • 反斜槓序列\\<僅在字的開頭匹配空字符串,但是,新LaTeX命令開頭處的反斜槓不被視爲字的一部分,因此\\<將不匹配。

試試這個:

(add-hook 'LaTeX-mode-hook 
    (lambda() 
     (font-lock-add-keywords nil 
      '(("\\(\\\\conceito\\)\\>" 1 font-lock-warning-face t))) 

編輯:另外一個很好的觀察到Deokhwan金正日提出的是,在這種特殊情況下,你真的不需要括號可言,因爲你試圖無論如何要匹配整個表達。所以到最後一行的選擇可以是:

'(("\\\\conceito\\>" 0 font-lock-warning-face t))))) 

關於括號中的點是正確的,但你可以在你的正則表達式實際上延伸到只有一個大括號{如下單詞「conceito」時的匹配。但是,因爲你真的不希望強調的是梅開二度,使用括號定義子組是路要走:

(add-hook 'LaTeX-mode-hook 
    (lambda() 
     (font-lock-add-keywords nil 
      '(("\\(\\\\conceito\\)\\s-*{" 1 font-lock-warning-face t))) 

注意,因爲我們正在測試的「conceito」後直接跟隨一個{ (除非兩者之間有空格),我們根本不需要測試\\>

一般來說,應儘量M-X再建設者交互手藝正則表達式:您可以在一個較小的緩衝區編輯一個新的正則表達式,並立即看到什麼是從中調用重新構建器中的緩衝區突出。

+0

爲了記錄,在我刪除的帖子中,我指出了一些錯誤,如連續的雙引號''「',在'''之前丟失\\',在問題的正則表達式中。但托馬斯通知我還有其他問題,但我的解決方案還不夠。所以我刪除了我的帖子以避免任何併發症。 – dkim 2012-08-07 17:32:12

+0

不錯的工作!還有一點建議是,在最後一個例子中,'\\ s- *'最好不在那裏。在LaTeX中,一個論點應該立即跟隨它的宏觀而沒有任何空間,不是嗎? – dkim 2012-08-09 06:39:15

+0

@Deokhwan Kim - 不,命令和'{'之間沒有空格。 – Thomas 2012-08-10 02:16:03

2

GNU AUCTeX有一種內置的方式來爲用戶定義的宏定義自定義突出顯示。看看變量font-latex-user-keyword-classesAUCTeX documentation

下面是一個簡單的例子(我的配置):

(setq font-latex-user-keyword-classes 
     '(("shadow-hidden" (("hide" "{"))  shadow command) 
     ("shadow-mycomment" (("mycomment" "{")) shadow command) 
     ("shadow-comment" (("comment" "{")) shadow command))) 

這將顯示\隱藏{}中的內容,\ mycomment {}和\評論{}在昏暗的陰影面的宏。