2013-12-13 30 views
0

我寫了下面的代碼來突出顯示AUCTeX緩衝區中美元符號的不同顏色,但後來我發現它甚至突出顯示了註釋中的美元符號,這是意想不到的,但我開始喜歡它。但現在只是爲了好奇,我想知道這是否可以避免。如何在AUCTeX緩衝區外部註釋時鎖定美元符號(數學模式分隔符)?

(defun my-LaTeX-mode-dollars() 
    (font-lock-add-keywords 
    nil 
    `((,(rx "$") (0 'success t))) 
    t)) 
(add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-dollars) 

回答

1

font-lock-keywords文檔:

MATCH高亮應該是這樣的形式:

(SUBEXP面名[OVERRIDE [LAXMATCH]])

OVERRIDE和LAXMATCH是標誌。如果OVERRIDE是t,現有的 可以被覆蓋。如果將keep', only parts not already fontified are highlighted. If前置'或'附加',現有的 分成合並與新的,其中新的或現有的分別優先。

換句話說,如果您在成功後放棄t,它將不再在評論和字符串中使用美元符號。

編輯:

顯然,上述方案是不是在這種情況下,充足的,可能是因爲美元的跡象已使用另一張臉前面着色。

可能有效的一種方法是不將HOW參數(當前爲t)傳遞至font-lock-add-keywords。這意味着它們應該被添加到列表的結尾。但是,這可能會導致其他事情停止工作。

如果我們需要更大的錘子,您可以編寫一些更先進的規則來檢查當前的分形,並決定如何處理。例如,使用由Emacs中添加一個警告面以下以括號內的字符串放置在柱0:

"^\\s(" 
    (0 
    (if 
     (memq 
     (get-text-property 
     (match-beginning 0) 
     'face) 
     '(font-lock-string-face font-lock-doc-face font-lock-comment-face)) 
      (list 'face font-lock-warning-face 'help-echo "Looks like a toplevel defun: escape the parenthesis")) 
    prepend) 

第三方式做到這一點是具有功能的名稱來代替正則表達式(rx "$")那可以搜索$並檢查它是否顯示在正確的上下文中。這種字體鎖規則的一個例子可以在標準的Emacs包cwarn中找到。

+0

它不再適用於註釋外的美元符號的成功字體 –

+0

@JisangYoo,請參閱我的更新答案。 – Lindydancer