如何在AucTeX模式下使自动完成工作?


11

auto-complete当我处于内部AucTeX模式时,我想(ac)工作。我通过安装软件包从MELPA获取所有软件包。

这是我在init.el文件中的相关代码:

(require 'package)
(package-initialize)
(require 'auto-complete-config)
(ac-config-default)   
(global-auto-complete-mode t)

如您所见,尽管我是ac全局设置的,但它不会出现在中AucTeX。但是,按照此emacswiki中的指示进行操作ac模式已在状态栏中显示为,AucTeX但不起作用,并且无法通过键入字符自动完成。


Windows 7 32bit下的Notes Emacs 24.4和软件包已更新。


您的问题是在LaTex模式下使yasnippet或单独工作ac?在后一种情况下,我将ac与AUCTeX结合使用时不需要太多工作。
giordano 2015年

1,我想与ac做好auctex。我yasnippet之所以提及是因为我还使用它在乳胶中包含一些用户定义的片段。因此,在您提供代码之前,我无法确定是否yas会妨碍您ac
博士学位

音调,拜托!尝试yasnippet查看自动完成功能和AUCTeX是否如@giordano建议一起使用。如果是,则问题在于包含yasnippet。如果是这样,则可能是您的自动完成设置。

我们可以忘记yasnippet我从init.el中删除了它。问题是最有可能在安装auctexac
博士学位

1
请参阅Christopher Monsanto的软件包github.com/monsanto/auto-complete-auctex。我还没有测试。
命名

Answers:


11

在Web上进行了长期研究并ac在机器上进行了大量试验以逐行检查代码之后,仔细检查了文档之后,我想到了这种解决方案,该解决方案也可以yasnippet(最佳)正常工作。

将此放入您的帐户init.el.emacs按顺序进行:

(require 'package)
(package-initialize)

;; yasnippet code 'optional', before auto-complete
(require 'yasnippet)
(yas-global-mode 1)

;; auto-complete setup, sequence is important
(require 'auto-complete)
(add-to-list 'ac-modes 'latex-mode) ; beware of using 'LaTeX-mode instead
(require 'ac-math) ; package should be installed first 
(defun my-ac-latex-mode () ; add ac-sources for latex
   (setq ac-sources
         (append '(ac-source-math-unicode
           ac-source-math-latex
           ac-source-latex-commands)
                 ac-sources)))
(add-hook 'LaTeX-mode-hook 'my-ac-latex-mode)
(setq ac-math-unicode-in-math-p t)
(ac-flyspell-workaround) ; fixes a known bug of delay due to flyspell (if it is there)
(add-to-list 'ac-modes 'org-mode) ; auto-complete for org-mode (optional)
(require 'auto-complete-config) ; should be after add-to-list 'ac-modes and hooks
(ac-config-default)
(setq ac-auto-start nil)            ; if t starts ac at startup automatically
(setq ac-auto-show-menu t)
(global-auto-complete-mode t) 

注意:
如的文档中所述acac-modes应该在加载之前添加和挂钩(ac-config-default)

有些人建议把一些TAB我不需要的代码与不需要的键一起玩,因为它以后会以某种方式破坏其他东西。但是,我看到人们在最后之前把这样的内容放在最后global-auto-complete

(ac-set-trigger-key "TAB")
(ac-set-trigger-key "<tab>")  

直到我添加了(ac-flyspell-workaround)自动补全功能,因为我使用了flyspell,因此才想到在Auctex中使用自动补全功能太慢了。文档中也提到了此错误。谢谢!

奖金
我很高兴从文档中知道,尽管还不清楚如何,可以添加一个用户定义的词典!我尝试了一下,效果很好。

在上require-auto-complete一行之后添加这两行:

(add-to-list 'ac-dictionary-directories "~/.emacs.d/.dict") ; make sure this folder exists
(add-to-list 'ac-user-dictionary-files "~/.emacs.d/.dict/custom-dict.txt") ; put any name to your `.txt` file  

现在,在您的.txt文件中添加您喜欢的候选人以完成工作。从少于四个字母的候选人中拯救自己,这是不值得的!只需将您喜欢的单词用换行或分隔即可RET

.txt文件内容的示例:

inconsistencies
foobaremaild@foobar.com
do-not-put-your-password-here
long-line-in-any-programming-language-of-your-like

借助Emacs在LaTeX / AUCTeX中享受自动补全功能!


如果有一个elisp函数可以随时将任何标记的单词扔到缓冲区中,.txt然后不费吹灰之力地将其附加到缓冲区中,那就太好了!
博士学位

6

正如我在上面的评论中告诉的那样,该软件包auto-complete-auctex也可以解决问题。我对它们都进行了测试,它们都很好地工作。通过提供屏幕截图来比较@doctorate和上述软件包的解决方案将是很好的。如果我写的话$\sig$,博士学位的代码会这样

在此处输入图片说明

那个包装的包装auto-complete-auctex就是这样

在此处输入图片说明

补充:我应该提到@giordano的解决方案也可以工作,这里是一个屏幕截图:

在此处输入图片说明


我认为它auto-complete应该是主要包装,同时auto-complete-auctex可能具有一些额外的功能。我将尝试并在必要时进行报告。谢谢
博士学位

2
我已经安装了该软件包,但是无法打开包含完成内容的弹出式窗口……您是如何做到的,关于此的一些文档?
乌鸦

@Raven我不确定我是否“确实”在工作。但是,如果您添加了TAB博士说可以避免的关键步骤,则按TAB可使它起作用(对我而言)。
Chill2Macht

4

以下是我的auto-complete相关配置:

(require 'package)
(package-initialize)
(require 'auto-complete-config)
(ac-config-default)

;; Activate auto-complete for latex modes (AUCTeX or Emacs' builtin one).
(add-to-list 'ac-modes 'latex-mode)

;; Activate ac-math.
(eval-after-load "latex"
  '(when (featurep 'auto-complete)
     ;; See https://github.com/vspinu/ac-math
     (require 'ac-math)
     (defun ac-latex-mode-setup ()       ; add ac-sources to default ac-sources
       (setq ac-sources
         (append '(ac-source-math-unicode ac-source-math-latex ac-source-latex-commands)
             ac-sources)))
     (add-hook 'LaTeX-mode-hook 'ac-latex-mode-setup)))

如您所见,AUCTeX没有什么特别的,它是的标准配置auto-complete。其配置ac-math在其网站上描述。如果不使用ac-math,与配置唯一明智的区别是(add-to-list 'ac-modes 'latex-mode)


-1:使用package-initialize。您可能不喜欢它,但是请不要load-path在答案中建议不良做法,例如手动管理。
lunaryorn 2015年

2
@lunaryorn我不认为我建议使用不良做法,我清楚地写道,仅加载辅助软件包是一个肮脏的hack。package-initialize无论如何,我将尝试使用稍后的方法来改善答案。
giordano
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.