2013-05-15 120 views
2

我很想看看是否可以匹配1個反斜槓,只有2個反斜槓,以及一個波形符號和兩個反斜槓。我在latex-mode中使用Emacs,併爲字體鎖設置關鍵字。將單個反斜線定義爲關鍵字會對各種其他定義造成嚴重破壞。我希望一個反斜槓是紅色的;兩個反斜槓是藍色的;一個波浪號+兩個反斜槓是綠色的。我不認爲代字號會造成問題,但我希望它本身是紅色的。我有font-lock-add-keywords格式,但不是這種情況下的特殊正則表達式。這與我們之前和之後使用\ b的情況類似,但據我所知,這不適用於反斜槓。匹配一個間隙;匹配兩個反斜槓;匹配代字符+兩個反斜槓

~ - 紅色

\ - 紅色,except觸摸字母數字字符時。

\\ - 藍色

~\\ - 綠色

(defvar lawlist-face-a (make-face 'lawlist-face-a)) 
(set-face-attribute 'lawlist-face-a nil :foreground "red" :bold t) 

(defvar lawlist-face-b (make-face 'lawlist-face-b)) 
(set-face-attribute 'lawlist-face-b nil :foreground "blue" :bold t) 

(defvar lawlist-face-c (make-face 'lawlist-face-c)) 
(set-face-attribute 'lawlist-face-c nil :foreground "green" :bold t) 

(font-lock-add-keywords 'latex-mode '(

("~\\|\\\\" 0 lawlist-face-a prepend) 

("\\\\\\\\" 0 lawlist-face-b prepend) 

("~\\\\\\\\" 0 lawlist-face-c prepend) 

)) 

在上面提到的示例的上下文中,定義單個反斜槓勾銷內auctex-11.86font-latex.el預定警告在線路280 -285。從第四行代碼中刪除"\\"不能解決這種情況。例如,鍵入\newpage不再與font-latex-warning-face關聯 - 而是以未定義的形式出現,它被分配到font-latex-sedate-face

(defvar font-latex-built-in-keyword-classes 
    '(("warning" 
    ("nopagebreak" "pagebreak" "newpage" "clearpage" "cleardoublepage" 
     "enlargethispage" "nolinebreak" "linebreak" "newline" "-" "\\*" "\\" 
     "appendix" "displaybreak" "allowdisplaybreaks" "include") 
    'font-latex-warning-face 1 noarg) 

緩衝示例 - 膠乳模式:

\newpage - 字型應font-latex-warning-face

\newpage - 字體面限定一個反斜槓當如上文所指出的錯誤地顯示爲font-latex-sedate-face


編輯 - 疑難解答 - 測試 - 的re-builder截圖和一個LaTeX文檔:

\\(\\\\\\)[^[email protected]] 

re-builder http://www.lawlist.com/images/re-builder_01.png

test01 http://www.lawlist.com/images/test01.png

(defvar lawlist-face-a (make-face 'lawlist-face-a)) 
(set-face-attribute 'lawlist-face-a nil :background "black" :foreground "red" :bold t) 

(defvar lawlist-face-b (make-face 'lawlist-face-b)) 
(set-face-attribute 'lawlist-face-b nil :foreground "blue" :bold t) 

(defvar lawlist-face-c (make-face 'lawlist-face-c)) 
(set-face-attribute 'lawlist-face-c nil :foreground "green" :bold t) 

(font-lock-add-keywords 'latex-mode 
    '(("~\\|\\(\\\\\\)[^[email protected]]" 0 lawlist-face-a prepend) 
    ("\\\\\\\\" 0 lawlist-face-b prepend) 
    ("~\\\\\\\\" 0 lawlist-face-c prepend))) 

test02 http://www.lawlist.com/images/test02.png

+0

我運行你的代碼,它給了我期望從你的描述中得到的結果。你能給出一個文本的例子,你期望什麼,出了什麼問題。 –

+0

我已經添加了一個由定義單個反斜槓引起的錯誤的具體示例。昨天,我遇到了這樣的情況:單個反斜槓將雙反斜槓的定義置爲無效 - 我會看看是否可以重新創建該反斜槓並將其作爲第二個示例發佈。 – lawlist

+0

請在緩衝區中添加一個包含文本的框,並說明所需的輸出。重現更容易。 –

回答

1

LaTeX命令只能由字母(和庫中的@符號)組成。因此,足以做到以下幾點來區分單斜線和命令的開始:

(defvar lawlist-face-a (make-face 'lawlist-face-a)) 
(set-face-attribute 'lawlist-face-a nil :foreground "red" :bold t) 

(defvar lawlist-face-b (make-face 'lawlist-face-b)) 
(set-face-attribute 'lawlist-face-b nil :foreground "blue" :bold t) 

(defvar lawlist-face-c (make-face 'lawlist-face-c)) 
(set-face-attribute 'lawlist-face-c nil :foreground "green" :bold t) 

(font-lock-add-keywords 'latex-mode 
         '(("~" 0 lawlist-face-a prepend) 
          ("\\(\\\\\\)[^[email protected]]" 1 lawlist-face-a prepend) 
          ("\\\\\\\\" 0 lawlist-face-b prepend) 
          ("~\\\\\\\\" 0 lawlist-face-c prepend))) 
+0

我認爲這樣做 - 內置的警告類再次工作,其他'\ commands'不再受到欺騙。今天我將使用新配置,並通過最終確認報告(以及答案的綠色複選標記):)。非常感謝您幫助我解決問題並提出解決方案 - 非常感謝! – lawlist

+0

如果單個反斜槓的背景爲'nil',則一切正常。如果單個反斜線的背景包含顏色(例如黑色),並且單個反斜線位於該行的末尾,則背景將從線條的最後一直突出顯示到右側窗口邊緣。我試過在各個地方插入一段時間和美元符號,但這並沒有完全解決問題。這不是一個大問題,但如果有美元符號或可以解決問題的東西,那會很好。 – lawlist

+0

反斜槓上有背景色嗎?是什麼造成的? –

相關問題