gpt4 book ai didi

Emacs Auctex 自定义语法高亮

转载 作者:行者123 更新时间:2023-12-02 17:43:50 25 4
gpt4 key购买 nike

我想强调一下我在 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)))))

出了什么问题?

最佳答案

编辑: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”之后(除非中间有空格),我们不需要测试 \\>根本就没有了。

一般来说,尝试M-x re-builder以交互方式制作正则表达式:您可以在一个小缓冲区中编辑一个新的正则表达式,并立即看到您调用重新构建的缓冲区中突出显示的内容。 build 者。

关于Emacs Auctex 自定义语法高亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11844936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com