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

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

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

怎么了?

【问题讨论】:

    标签: emacs syntax-highlighting auctex


    【解决方案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-classesAUCTeX 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{} 宏的内容。

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 2016-12-30
      • 2011-09-03
      • 1970-01-01
      • 2010-10-26
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多