12

I want auto-complete (ac) to work when I am inside AucTeX mode. I get all packages from MELPA by package installation.

This is my relevant code in init.el file:

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

as you can see, although I am setting ac globally it does not appear in AucTeX. However, by following instructions in this emacswiki, ac mode was displayed in status bar in AucTeX but non-functioning, no auto-completion by typing characters.

Notes
Emacs 24.4 under Windows 7 32bit and packages were updated.

6
  • Your problem is to make ac work together yasnippet or just alone, while in LaTex mode? In the latter case, I use ac with AUCTeX without much work.
    – giordano
    Commented Jan 1, 2015 at 0:14
  • 1st, I want to have ac do well with auctex. I mentioned yasnippet because I also use it to have some user-defined snippets in latex. So until you provide your code I cannot tell if yas will get in the way of ac.
    – doctorate
    Commented Jan 1, 2015 at 8:18
  • Tone, please! Try taking out yasnippet to see if autocomplete and AUCTeX work together as @giordano suggested. If yes, then the problem is with the inclusion of yasnippet. If so, it's probably your autocomplete setup.
    – Dan
    Commented Jan 1, 2015 at 11:48
  • We can forget about yasnippet I removed it from my init.el. The problem is most probably in the setup of auctex and ac.
    – doctorate
    Commented Jan 1, 2015 at 14:48
  • 1
    See a package by Christopher Monsanto github.com/monsanto/auto-complete-auctex. I haven't test it.
    – Name
    Commented Jan 2, 2015 at 13:09

3 Answers 3

12

After doing a long research in the web and careful examination of ac documentation with a lot of trials on my machine to examine code line by line, I came up with this solution that can have yasnippet working as well (optioinal) without any confict.

put this in your init.el or .emacs taking care of sequence:

(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) 

Notes:
as mentioned in the documentation of ac, the adding to ac-modes and hooks should be done before loading (ac-config-default).

Some suggested to put some code to play with TAB key which I didn't need and do not recommend as it will somehow destroy something else later. However, I saw people put something like this at the end just before global-auto-complete:

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

Until I added (ac-flyspell-workaround) auto-completion was too slow to think of using it in Auctex since I use flyspell. This bug was also mentioned in the documentation. Thanks!

Bonus
I was glad to know from the documentation, though not very clear how, that one can add a user-defined dictionary(ies)! I tried this and worked well.

add these two lines just after require-auto-complete line above:

(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  

Now in your .txt file add your favorite candidates for completion. Save yourself from candidates fewer than 4-letter long, they don't worth it! Simply put words of your like separated by a line feed or RET.

Example of the contents in the .txt file:

inconsistencies
[email protected]
do-not-put-your-password-here
long-line-in-any-programming-language-of-your-like

Enjoy auto-completion in LaTeX/AUCTeX with Emacs!

1
  • it would be nice if there would be an elisp function to throw any marked word in a buffer while writing into that .txt dictioinary on-the-fly and append it without much effort!
    – doctorate
    Commented Jan 2, 2015 at 13:39
6

As I told in my above comment, the package auto-complete-auctex can also solve the problem. I tested both, and they both work nicely. It would be nice to compare the solution of @doctorate and the above package by giving screen-shots. If I write $\sig$, the code of doctorate give something like this

enter image description here

and that of the package auto-complete-auctex gives something like this

enter image description here

Added: I should mention that the solution of @giordano works as well, here a screen-shot:

enter image description here

3
  • I think auto-complete should be the main package while auto-complete-auctex might have some extra features. I will try it and report if necessary. Thanks
    – doctorate
    Commented Jan 2, 2015 at 15:24
  • 2
    I have installed the package but I am unable to open the popup with the completions... How did you do it and is there some documentation on this one?
    – Raven
    Commented Mar 27, 2017 at 8:33
  • @Raven I'm not sure I have it "really" working. But if you add in the TAB key steps that doctorate said to avoid, pressing TAB makes it work (for me). Commented Feb 27, 2018 at 0:45
4

The following is my auto-complete related configuration:

(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)))

As you can see, there is nothing special for AUCTeX, it's the standard configuration of auto-complete. The configuration for ac-math is described on its web site. If you don't use ac-math, the only sensible difference with your configuration is (add-to-list 'ac-modes 'latex-mode).

2
  • -1: Use package-initialize. You may not like it, but please don't recommend bad practices such as manual load-path management in your answers.
    – user227
    Commented Jan 2, 2015 at 12:36
  • 2
    @lunaryorn I don't think I recommended bad practices, I clearly wrote it's a dirty hack just to load an auxiliary package. I'll try to improve the answer using package-initialize later anyway.
    – giordano
    Commented Jan 2, 2015 at 12:45

Not the answer you're looking for? Browse other questions tagged or ask your own question.