2010-07-18 89 views
8

emacs上的AucTeX是相当神奇的工具,但是当我写一个'$'时,所有的着色都被破坏了。

正常情况下,'$'会附带另一个'$'来表示数学方程,但对于源列表,经常使用单个'$'。

\begin{Verbatim} 
(let ((buffer (url-retrieve-synchronously 
... 
    (re-search-forward "^$" nil 'move) <-- It breaks the coloring 
... 
\end{Verbatim} 

简单的解决方法如下,以匹配'$'。

(re-search-forward "^$" nil 'move) ;; $ 

AucTeX有没有任何选项可以防止这个'$'问题?

回答

9

AUCTeX知道$不是逐字环境特殊,但你必须告诉它Verbatim是通过安排它出现在LaTeX-verbatim-environments-local逐字环境。

如果AUCTeX最佳安装,它已经知道,因为AUCTeX为通过\usepackage和朋友加载的每个文件加载样式钩子。您可能需要告诉它用C-c C-nTeX-normal-mode)解析头文件。

如果这还不够,这意味着Verbatim被定义在AUCTeX没有足够信息的样式文件中。您可以告诉AUCTeX解析您已安装的部分或全部样式文件;请参阅AUCTeX手册中的“自动”章节。

有时AUCTeX没有设法解析样式文件;那么你可以手工完成这部分。下面的代码假设您从fancyvrb包获得Verbatim环境;否则改名。创建一个在TeX-style-path具有以下内容中提到的目录的一个叫fancyvrb.el文件(有可能是值得其他东西放在那里,我刚刚适应alltt.el):

 
(TeX-add-style-hook 
"fancyvrb" 
(lambda() 
    (LaTeX-add-environments "BVerbatim" "LVerbatim" "SaveVerbatim" "Verbatim") 
    (make-local-variable 'LaTeX-indent-environment-list) 
    (add-to-list 'LaTeX-indent-environment-list '("BVerbatim" current-indentation)) 
    (add-to-list 'LaTeX-indent-environment-list '("LVerbatim" current-indentation)) 
    (add-to-list 'LaTeX-indent-environment-list '("SaveVerbatim" current-indentation)) 
    (add-to-list 'LaTeX-indent-environment-list '("Verbatim" current-indentation)) 
    (make-local-variable 'LaTeX-verbatim-regexp) 
    (setq LaTeX-verbatim-regexp (concat LaTeX-verbatim-regexp "\\|\\([BL]?\\|Save\\)Verbatim")) 
    (add-to-list 'LaTeX-verbatim-environments-local "BVerbatim") 
    (add-to-list 'LaTeX-verbatim-environments-local "LVerbatim") 
    (add-to-list 'LaTeX-verbatim-environments-local "SaveVerbatim") 
    (add-to-list 'LaTeX-verbatim-environments-local "Verbatim") 
    (when (and (featurep 'font-latex) 
       (eq TeX-install-font-lock 'font-latex-setup)) 
    (font-latex-set-syntactic-keywords) 
    (setq font-lock-set-defaults nil) 
    (font-lock-set-defaults)))) 

(我想你也能做到这一点手动通过文件变量,但事实证明这是行不通的,因为字体锁定设置是在文件局部变量初始化之前构建的,我没有看到解决方法。)

+0

对于最终的方法,是否可以将它们复制到TeX源代码的最后一行?它似乎没有那样工作。 – prosseek 2010-07-18 19:36:50

+0

@prosseek:对不起,我在变量名中输入了错字,现在修复了。但即使如此,我只是测试过,并不适合我。它看起来像着色参数设置后变量被设置,我不知道如何解决这个问题。 – Gilles 2010-07-18 20:34:24

+0

好吧,使用文件局部变量将不起作用,所以* style * .el是要走的路。我编辑了我的答案以包含此代码。 – Gilles 2010-07-18 21:41:19

4

是有原因使用逐字还是逐字?逐字逐字显示部分中的所有内容对我来说都是相同的颜色。另外,我更愿意使用listings package.来显示胶乳中的程序代码。

使用软件包列表,您可以像使用\ begin {verbatim}一样添加非格式化文本,但其主要目标是在文档中包含任何编程语言的源代码。

+0

感谢您的提示,并且我看到该列表是更好的选择。但是,就emacs/AucTeX而言,我看到了同样的问题。 – prosseek 2010-07-19 17:20:01