2012-08-07 142 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 {}和\评论{}在昏暗的阴影面的宏。