簡體   English   中英

Emacs Auctex自定義語法高亮

[英]Emacs Auctex custom syntax highlight

我想強調一下我在LaTeX中創建的新命令:

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

我用這種方式使用這段代碼:

\conceito{Foo}{Bar}{Bla}

我按照手冊將這段代碼放在我的~/.emacs ,但它不起作用:

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

怎么了?

編輯:Deokhwan Kim最初指出你的正則表達式包含兩個連續的雙引號,並且右括號)需要用雙引號進行轉義:

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

除了Deokhwan Kim指出的觀點之外,還有以下兩個問題:

  • 在'conceito'面前你需要四個反斜杠而不是兩個反斜杠: \\\\\\\\conceito

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

試試這個:

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

編輯:Deokhwan Kim提出的另一個好觀察是,在這種特殊情況下,你根本不需要括號,因為你無論如何都試圖匹配整個表達式。 所以最后一行的替代方案可能是:

'(("\\\\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”之后(除非兩者之間有空格),我們根本不需要對\\\\>進行測試。

通常,嘗試使用Mx重構器以交互方式創建正則表達式:您可以在小緩沖區中編輯新的正則表達式,並立即查看緩沖區中突出顯示的內容,從中調用重構器。

GNU AUCTeX具有為用戶定義的宏定義自定義突出顯示的內置方法。 看看變量font-latex-user-keyword-classesAUCTeX文檔

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

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

這將顯示昏暗陰影面中\\ hide {},\\ mycomment {}和\\ comment {}宏的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM