[英]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-classes
和AUCTeX文檔 。
這是一個簡單的例子(我的配置):
(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.