Emacs:在注释中定义宏并自动执行它

Emacs:在注释中定义宏并自动执行它,emacs,elisp,auctex,Emacs,Elisp,Auctex,我正在使用Emacs/AucTeX编辑LaTeX文件。在我的一些LaTeX文件中,我定义了一些“特定于文件”的命令(例如,在一个文件中定义了\todo{…},在另一个文件中定义了\compute{…},等等),这样我就可以跟踪文档中存在哪些未解决的问题 Emacs命令highlight regexp在highlightning所有出现的\todo{…}s resp中做得非常好\compute{…}s。但到目前为止,每次打开相应的文件时,我都必须手动执行highlightning 有没有一种方法可

我正在使用Emacs/AucTeX编辑LaTeX文件。在我的一些LaTeX文件中,我定义了一些“特定于文件”的命令(例如,在一个文件中定义了
\todo{…}
,在另一个文件中定义了
\compute{…}
,等等),这样我就可以跟踪文档中存在哪些未解决的问题

Emacs命令highlight regexp在highlightning所有出现的
\todo{…}
s resp中做得非常好<代码>\compute{…}s。但到目前为止,每次打开相应的文件时,我都必须手动执行highlightning

有没有一种方法可以告诉Emacs/AucTeX在打开特定文件时调用特定命令?我想在相应的文件中定义这些命令,这样我就可以轻松地为不同的文件(可能包含在局部变量中)调整它


你可以使用一个钩子来组合本地变量。例如,您可以添加一个局部变量
dohighlight
或其他内容,然后编写如下函数:

(defun condhighl ()
 (when (boundp 'dohighlight)
 (highlight-regexp "regexp")))
然后添加该函数作为AucTex的挂钩

(add-hook 'tex-mode-hook 'condhighl)
然后可以将本地变量中的dohighlight变量添加到要在其中突出显示代码的缓冲区中

试试这个

%%% Local Variables: 
%%% eval: (font-lock-add-keywords nil '(("\\\\todo" (0 font-lock-warning-face))))
%%% End: 

有关更多详细信息,请参见。

在使用
高亮显示regexp
设置高亮显示后,
hi-lock write interactive patterns
(M-s h w)将这些模式作为神奇注释写入缓冲区


您可能还想在
mode:latex
行之后添加一个
mode:hi lock
,以便在打开文件时立即激活高亮显示。

这是一个很好的、优雅的解决方案。我真的想知道他所描述的是否有一个次要模式,不过……解决方案很优雅。但Emacs似乎首先切换到
tex模式
(即执行所有钩子内容),然后加载文件。这意味着,在关键时间点,变量似乎是
void
。它看起来像文本模式挤压了本地变量。我可以使用其他模式挂钩在其他模式下工作。是的,看起来是这样。当我试图通过
descripe variable
获取变量的内容时,我得到了一个错误。我必须承认,我不知道这是如何工作的,但它确实工作。我读了这本手册,想用
eval
来做这件事,但我没能弄清楚它到底是如何工作的。然而,我读到,不应将风格格式提示包含在局部变量中,而应包含在personal
.emacs
中。尽管如此,它还是回答了这个问题,所以被接受了。您可以通过使用钩子来避免lambda(添加钩子'tex mode hook'(lambda()(字体锁定添加关键字nil'(“\\\\todo”(0字体锁定警告面`'))))))您知道todonotes包吗?太棒了,谢谢你的提示。我来看看。
%%% Local Variables: 
%%% eval: (font-lock-add-keywords nil '(("\\\\todo" (0 font-lock-warning-face))))
%%% End: