msa*_*aio 5 emacs syntax-highlighting auctex
我想强调一下我在LaTeX中创建的新命令:
\newcommand{\conceito}[3]{
\subsection{#1} (Original: \textit{#2} #3).
}
Run Code Online (Sandbox Code Playgroud)
我用这种方式使用这段代码:
\conceito{Foo}{Bar}{Bla}
Run Code Online (Sandbox Code Playgroud)
我按照手册并将此代码放入我的~/.emacs,但它不起作用:
(add-hook 'LaTeX-mode-hook
(lambda ()
(font-lock-add-keywords nil
'((""\\<\\(\\conceito)\\>"" 1 font-lock-warning-face t)))))
Run Code Online (Sandbox Code Playgroud)
怎么了?
编辑:Deokhwan Kim最初指出你的正则表达式包含两个连续的双引号,并且右括号也)需要用双引号进行转义:
(add-hook 'LaTeX-mode-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\<\\(\\conceito\\)\\>" 1 font-lock-warning-face t)))))
Run Code Online (Sandbox Code Playgroud)
除了Deokhwan Kim指出的观点之外,还有以下两个问题:
在'conceito'前面你需要四个反斜杠而不是两个反斜杠: \\\\conceito
反斜杠序列\\<仅在单词的开头匹配空字符串,但是,新LaTeX命令开头的反斜杠不被视为单词的一部分,因此\\<不匹配.
试试这个:
(add-hook 'LaTeX-mode-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\(\\\\conceito\\)\\>" 1 font-lock-warning-face t)))
Run Code Online (Sandbox Code Playgroud)
编辑:Deokhwan Kim提出的另一个好观察是,在这种特殊情况下,你根本不需要括号,因为你无论如何都试图匹配整个表达式.所以最后一行的替代方案可能是:
'(("\\\\conceito\\>" 0 font-lock-warning-face t)))))
Run Code Online (Sandbox Code Playgroud)
关于括号的观点是正确的,但实际上你可以扩展你的正则表达式,只有当一个开口大括号{跟在单词"conceito"后面时才匹配.但是,由于您并不想突出显示该括号,因此使用括号定义的子组是可行的方法:
(add-hook 'LaTeX-mode-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\(\\\\conceito\\)\\s-*{" 1 font-lock-warning-face t)))
Run Code Online (Sandbox Code Playgroud)
请注意,由于我们{在"conceito"之后直接测试了一个(除非中间有空格),我们根本不再需要测试\\>.
通常,尝试M-x re-builder以交互方式创建正则表达式:您可以在小缓冲区中编辑新的正则表达式,并立即查看缓冲区中突出显示的内容,从中调用重构器.
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |