【发布时间】:2013-05-09 13:32:42
【问题描述】:
我很想知道是否可以只匹配 1 个反斜杠、2 个反斜杠和一个波浪号加两个反斜杠。我在乳胶模式下使用 Emacs 并为字体锁定设置关键字。将单个反斜杠定义为关键字会对各种其他定义造成严重破坏。我希望一个反斜杠是红色的;两个反斜杠为蓝色;和一个波浪号+两个反斜杠是绿色的。我不认为波浪号会造成问题,但我希望它本身就是红色的。我有 font-lock-add-keywords 格式,但没有这种情况的特殊正则表达式。这类似于我们在之前和之后使用 \b 的情况,但据我所知,这不适用于反斜杠。
~ -- 红色
\ -- 红色,except 触摸字母数字字符时。
\\ -- 蓝色
~\\ -- 绿色
(defvar lawlist-face-a (make-face 'lawlist-face-a))
(set-face-attribute 'lawlist-face-a nil :foreground "red" :bold t)
(defvar lawlist-face-b (make-face 'lawlist-face-b))
(set-face-attribute 'lawlist-face-b nil :foreground "blue" :bold t)
(defvar lawlist-face-c (make-face 'lawlist-face-c))
(set-face-attribute 'lawlist-face-c nil :foreground "green" :bold t)
(font-lock-add-keywords 'latex-mode '(
("~\\|\\\\" 0 lawlist-face-a prepend)
("\\\\\\\\" 0 lawlist-face-b prepend)
("~\\\\\\\\" 0 lawlist-face-c prepend)
))
在上述示例的上下文中,定义单个反斜杠会使第 280-285 行 auctex-11.86 内的 font-latex.el 的预定义警告无效。从第四行代码中删除"\\" 并不能解决问题。例如,键入\newpage 不再与font-latex-warning-face 关联——相反,它显示为未定义,分配给font-latex-sedate-face。
(defvar font-latex-built-in-keyword-classes
'(("warning"
("nopagebreak" "pagebreak" "newpage" "clearpage" "cleardoublepage"
"enlargethispage" "nolinebreak" "linebreak" "newline" "-" "\\*" "\\"
"appendix" "displaybreak" "allowdisplaybreaks" "include")
'font-latex-warning-face 1 noarg)
缓冲区示例——乳胶模式:
\newpage -- 字体应该是font-latex-warning-face
\newpage -- 如上所述定义单个反斜杠时,字体错误地显示为 font-latex-sedate-face。
编辑 -- 故障排除 -- 测试 -- re-builder 和 LaTeX 文档的屏幕截图:
\\(\\\\\\)[^a-zA-Z@]
(来源:lawlist.com)
(来源:lawlist.com)
(defvar lawlist-face-a (make-face 'lawlist-face-a))
(set-face-attribute 'lawlist-face-a nil :background "black" :foreground "red" :bold t)
(defvar lawlist-face-b (make-face 'lawlist-face-b))
(set-face-attribute 'lawlist-face-b nil :foreground "blue" :bold t)
(defvar lawlist-face-c (make-face 'lawlist-face-c))
(set-face-attribute 'lawlist-face-c nil :foreground "green" :bold t)
(font-lock-add-keywords 'latex-mode
'(("~\\|\\(\\\\\\)[^a-zA-Z@]" 0 lawlist-face-a prepend)
("\\\\\\\\" 0 lawlist-face-b prepend)
("~\\\\\\\\" 0 lawlist-face-c prepend)))
(来源:lawlist.com)
【问题讨论】:
-
我运行你的代码,它给了我从你的描述中预期的结果。您能否举一个文本示例,说明您的期望和问题所在。
-
我添加了一个由定义单个反斜杠导致的错误的具体示例。昨天,我遇到了单反斜杠使双反斜杠的定义无效的情况——我会看看是否可以重新创建它并将其作为第二个示例发布。
-
请添加一个框,其中包含您在缓冲区中的文本并解释您想要的输出。更容易复制。
-
如果有一种方法可以为
exclude定义一个反斜杠,在touching alphanumeric characters的情况下可以解决问题。我将对上面的错误示例进行一些说明。 -
目标是能够单独使用单个红色反斜杠在 LaTeX 文档中插入空格(如果无意插入,请提醒我注意);并且还提醒注意反斜杠数量不均匀的情况 - 例如,三个反斜杠应该显示为两个蓝色,然后是一个红色。
Excluding单个反斜杠为touching alphanumeric characters的情况可以避免与我能想到的几乎所有 LaTeX 定义发生冲突——例如,\begin... \end... \1234
标签: regex emacs elisp emacs-faces