font-lock-keyword-face
被 AUCTeX 用于所有关键词,我一直没能找到创建不同颜色的新关键词的方法。
我已将的前景定义font-lock-keyword-face
为红色(白色背景),这会影响每个定义的关键字。
我想创建自己的关键字,使其从所有其他关键字中脱颖而出 - 例如::foreground“yellow”:background“black”。
\insert-data
看起来只有三 (3) 个主要组可用:
keywords
(受控制于font-lock-keyword-face
);warnings
(受 控制font-latex-warning-face
);及undefined-keywords
(受控制于font-latex-sedate-face
)。
互联网上的所有示例似乎都侧重于使用变量更改方括号/波浪括号内的颜色font-latex-user-keyword-classes
。我还没有找到任何创建新关键字组(具有不同颜色)的有效示例。
没有任何以下示例创建了第四个主要组:
;; \EFFECT{[font-lock-type-face]}
(setq font-latex-match-textual-keywords
'(
("parentext" "{")
("hybridblockquote" "[{")
)
)
;; \EFFECT{[font-lock-variable-name-face]}
(setq font-latex-match-variable-keywords
'(
("setlist" "[{")
("setlist*" "[{")
)
)
;; \EFFECT{[font-lock-constant-face]}
(setq font-latex-match-reference-keywords
'(
("citet" "[{")
("degrees" "")
("units" "{")
)
)
;; \font-latex-warning-face
(setq font-latex-match-warning-keywords
'(
("fixme" "{")
("INSERT" "")
)
)
;; only affects inside wavy square brackets
(setq font-latex-user-keyword-classes
'(("my-warning-commands"
(("fixme" "{"))
(:foreground "purple")
command)))
答案1
这是为模式设置某些内容的示例hi-lock
。
首先定义一个面:
(defface af-bold-yellow-box '((t (:background "yellow"
:foreground "black"
:bold t
))) "yellow-box-face")
然后,您可以定义一个宏来将您的面孔应用到指定的正则表达式。
(defun z-hi-lock-quizzes ()
;; this next line is necessary to correct sloppy hi-locking
(if (not hi-lock-mode)
(progn (hi-lock-mode -1)
(hi-lock-mode 1))
(hi-lock-mode)
(hi-lock-mode))
(highlight-regexp "^%-\\*-mode:LaTeX.*$" (quote hi-conceal-content));
(highlight-regexp "^%-@-(.+$" (quote hi-lock-page-break));
)
我定义了各种宏来强调不同的特性。然后我编写了一个interactive
宏来组合和应用这些宏。
(defun ae-hi-lock-features ()
(interactive)
(z-hi-lock-quizzes)
... call other functions ...
)
供参考我相信我在这里使用的各种面孔都是我定义的面孔。即使在下面的例子中也是如此。但面孔的定义正如我上面所说明的那样。
添加字体锁定功能
下面是我用来向font-lock
功能添加元素的一些代码。但是,距离我写这篇文章已经过去很久了,我真的不知道下面的代码是否足以获得所有想要的结果
(setq ae-keywords:tex-mode:list
(list '( comment "^\\s *\\(%.+$\\)" 'hi-pink )
'( newpara "\\(^%-=-.+$\\)" 'hi-skyblue-boldred-border )
'( newsect "\\(^%-\\#-.+$\\)" 'hi-goldback-boldbluefront-border )
'( newpage "\\(^%-@-(.+$\\)" 'hi-lock-page-break )
'( tab "\\(\t\\)" 'hi-lightblue-red-text-border )
'( begin.doc "\\(\\\\\\(begin\\|end\\\){document}\\)" 'hi-goldback-boldbluefront-border)
'( comment.b "\\(%\\.\\.%.*$\\)" 'hi-darkblue-lightblue-text)
'( multiplechoice.a "\\(^\\[o\\] .+$\\)" 'hi-light-multiple-choices)
'( multiplechoice.b "\\(^\\[[\\?\\.\\ ]\\] .+$\\)" 'hi-goldback-boldbluefront-border)
'( multiplechoice.c "\\(^\\[x\\] .+$\\)" 'hi-light-multiple-choice-answer)
))
(dolist (elt ae-keywords:tex-mode:list)
(font-lock-add-keywords nil (list (list (nth 1 elt) 1 (nth 2 elt) 'append)))
)
如果上面的方法看起来太复杂,你可以做一些更直接的事情,比如
(font-lock-add-keywords nil '(("\\(hello\\) \\(World\\)"
2
'hi-goldback-boldbluefront-border)))
编辑
我认为你可能想做的是
(font-lock-add-keywords 'latex-mode '(("<regex>"
<level-of-subexpression>
'<face-name>)))
您可能想要设置<level-of-subexpression>
为 0,但使用子表达式可以获得很好的效果,如我的hello World
示例所示。