Emacs / AUCTeX——关键字高亮语法的自定义

Emacs / AUCTeX——关键字高亮语法的自定义

font-lock-keyword-face被 AUCTeX 用于所有关键词,我一直没能找到创建不同颜色的新关键词的方法。

我已将的前景定义font-lock-keyword-face为红色(白色背景),这会影响每个定义的关键字。

我想创建自己的关键字,使其从所有其他关键字中脱颖而出 - 例如::foreground“yellow”:background“black”。

\insert-data

看起来只有三 (3) 个主要组可用:

  1. keywords(受控制于font-lock-keyword-face);

  2. warnings(受 控制font-latex-warning-face);及

  3. 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示例所示。

相关内容