Emacs Auctex 自定义语法高亮

Posted

技术标签:

【中文标题】Emacs Auctex 自定义语法高亮【英文标题】:Emacs Auctex custom syntax highlight 【发布时间】:2012-08-07 11:26:15 【问题描述】:

我想强调一下我在 LaTeX 中创建的一个新命令:

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

我是这样使用这段代码的:

\conceitoFooBarBla

我跟着manual,把这段代码放到了我的~/.emacs,但是没用:

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

怎么了?

【问题讨论】:

【参考方案1】:

编辑:Deokhwan Kim 最初指出您的正则表达式包含两个连续的双引号,并且右括号 ) 也需要用双引号进行转义:

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

除了Deokhwan Kim指出的几点,还有以下两个问题:

'conceito' 前面需要四个反斜杠而不是两个:\\\\conceito

反斜杠序列 \\&lt; 仅匹配单词开头的空字符串,但是,新 LaTeX 命令开头的反斜杠不被视为单词的一部分,因此 \\&lt; 不会匹配。

试试这个:

(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”之后的(除非中间有空格),因此我们根本不需要测试\\&gt;

一般来说,尝试 M-x re-builder 以交互方式制作正则表达式:您可以在一个小缓冲区中编辑一个新的正则表达式,并立即查看您调用 re-建设者。

【讨论】:

为了记录,在我删除的帖子中,我指出了问题中的正则表达式中的一些错误,例如连续双引号"")之前缺少\\。但托马斯通知我,其他问题仍然潜伏在那里,我的解决方案还不够。所以我删除了我的帖子以避免任何并发症。 干得好!还有一个建议是,在最后一个示例中,\\s-* 最好不要在那里。在 LaTeX 中,一个参数应该紧跟在它的宏后面,它们之间没有任何空格,不是吗? @Deokhwan Kim - 不,命令和 之间的空格很好。 糟糕。到目前为止我一直误解它。再次感谢!【参考方案2】:

GNU AUCTeX 具有为用户定义的宏定义自定义突出显示的内置方式。查看变量font-latex-user-keyword-classes 和AUCTeX documentation。

这是一个简单的例子(我的配置):

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

这将在暗淡的阴影面上显示 \hide、\mycomment 和 \comment 宏的内容。

【讨论】:

以上是关于Emacs Auctex 自定义语法高亮的主要内容,如果未能解决你的问题,请参考以下文章

有没有人遇到过在 iterm2 下 vim 语法高亮的问题

.srt .smi 等字幕文件的 Emacs 语法高亮显示

vue - 自定义块 - 语法高亮

Geany 中的自定义语法高亮显示

Sublime Text 3:自定义语法高亮

使用 QScintilla 和 Qt/C++ 自定义语法高亮