-->

Emacs的Auctex定制的语法高亮(Emacs Auctex custom syntax hig

2019-07-30 20:07发布

我想强调我在乳胶创造了一个新的命令:

\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)))))

怎么了?

Answer 1:

编辑: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”之后直接跟随(除非有空格之间),我们不需要测试\\>更多可言。

在一般情况下,尝试重新的Mx建设者交互手艺正则表达式:您可以在一个较小的缓冲区编辑一个新的正则表达式,并立即看到什么是从中调用重新构建器中的缓冲区突出。



Answer 2:

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)))

这将显示在昏暗的阴影面\隐藏{} \ mycomment {}和\评论{}宏的内容。



文章来源: Emacs Auctex custom syntax highlight