Emacs 如何在AUCTeX缓冲区中仅在注释外部锁定美元符号(数学模式分隔符)?
我编写了以下代码以不同颜色突出显示AUCTeX缓冲区中的美元符号,但后来我发现它甚至在注释中突出显示美元符号,这是无意的,但我开始喜欢它了。但现在出于好奇,我想知道这是否可以避免Emacs 如何在AUCTeX缓冲区中仅在注释外部锁定美元符号(数学模式分隔符)?,emacs,elisp,auctex,font-lock,Emacs,Elisp,Auctex,Font Lock,我编写了以下代码以不同颜色突出显示AUCTeX缓冲区中的美元符号,但后来我发现它甚至在注释中突出显示美元符号,这是无意的,但我开始喜欢它了。但现在出于好奇,我想知道这是否可以避免 (defun my-LaTeX-mode-dollars () (font-lock-add-keywords nil `((,(rx "$") (0 'success t))) t)) (add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-dollars) 从字体
(defun my-LaTeX-mode-dollars ()
(font-lock-add-keywords
nil
`((,(rx "$") (0 'success t)))
t))
(add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-dollars)
从
字体锁定关键字的文档中
:
匹配突出显示应采用以下形式:
(SUBEXP FACENAME[覆盖[LAXMATCH]])
覆盖和匹配是标志。如果OVERRIDE为t,则表示存在
字体化可以被覆盖。如果keep',则仅限尚未安装的零件
字体被突出显示。如果
prepend'或'append',则存在
字体化与新字体合并,其中新字体或现有字体
字体化分别优先
换句话说,如果在“成功”之后删除t
,它将不再在注释和字符串中设置美元符号
编辑:
显然,在这种情况下,上述解决方案是不够的,可能是因为美元符号早些时候已经用另一张脸着色了
一种可能有效的方法是不将HOW参数(当前为t
)传递给字体锁定添加关键字。这意味着它们应该被添加到列表的末尾。然而,这可能会导致其他事情停止工作
如果我们需要一个更大的锤子,您可以编写一个更高级的规则来检查当前的字体,并决定如何处理它。例如,Emacs使用以下命令将警告面添加到字符串中第0列的括号中:
"^\\s("
(0
(if
(memq
(get-text-property
(match-beginning 0)
'face)
'(font-lock-string-face font-lock-doc-face font-lock-comment-face))
(list 'face font-lock-warning-face 'help-echo "Looks like a toplevel defun: escape the parenthesis"))
prepend)
第三种方法是将regexp(rx“$”
替换为可以搜索$
并检查其是否出现在正确上下文中的函数名。此类字体锁定规则的一个示例可以在标准Emacs包cwarn
中找到,它也不再将成功字体应用于注释之外的美元符号