Comment faire fonctionner la saisie automatique en mode AucTeX?


11

Je veux que auto-complete(ac) fonctionne lorsque je suis en AucTeXmode intérieur . J'obtiens tous les packages de MELPA par installation de packages.

Voici mon code pertinent dans le init.elfichier:

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

comme vous pouvez le voir, bien que je définisse acglobalement, il n'apparaît pas dans AucTeX. Cependant, en suivant les instructions de cet emacswiki , le acmode était affiché dans la barre d'état dans AucTeXmais ne fonctionnait pas, pas de saisie automatique en tapant des caractères.

Notes
Emacs 24.4 sous Windows 7 32 bits et les packages ont été mis à jour.


Votre problème est de faire fonctionner AC ensemble yasnippet ou juste seul, en mode LaTex? Dans ce dernier cas, j'utilise ac avec AUCTeX sans trop de travail.
giordano

1er, je veux acbien faire avec auctex. Je l'ai mentionné yasnippetparce que je l'utilise également pour avoir des extraits définis par l'utilisateur en latex. Donc, jusqu'à ce que vous fournissiez votre code, je ne peux pas dire si yascela entravera ac.
doctorat du

Ton, s'il te plait! Essayez de retirer yasnippetpour voir si la saisie semi-automatique et AUCTeX fonctionnent ensemble comme l'a suggéré @giordano. Si oui, le problème est lié à l'inclusion de yasnippet. Si c'est le cas, c'est probablement votre configuration de saisie semi-automatique.
Dan

Nous pouvons oublier que yasnippetje l'ai supprimé de mon init.el. Le problème se situe très probablement dans la configuration de auctexet ac.
doctorat du

1
Voir un package par Christopher Monsanto github.com/monsanto/auto-complete-auctex . Je ne l'ai pas testé.
Nom du

Réponses:


11

Après avoir fait une longue recherche sur le web et un examen minutieux de la acdocumentation avec beaucoup d'essais sur ma machine pour examiner le code ligne par ligne, j'ai trouvé cette solution qui peut aussi yasnippetfonctionner (optioinal) sans aucun conflit.

mettez cela dans votre séquence init.elou en .emacsprenant soin de:

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

Remarques:
comme mentionné dans la documentation de ac, l'ajout à ac-modeset les crochets doivent être effectués avant le chargement (ac-config-default).

Certains ont suggéré de mettre du code à jouer avec une TABclé dont je n'avais pas besoin et que je ne recommande pas car cela détruirait quelque chose d'autre plus tard. Cependant, j'ai vu des gens mettre quelque chose comme ça à la fin juste avant global-auto-complete:

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

Jusqu'à ce que j'ajoute l' (ac-flyspell-workaround)auto-complétion était trop lent pour penser à l'utiliser dans Auctex depuis que j'utilise flyspell. Ce bug a également été mentionné dans la documentation. Merci!

Bonus
J'ai été heureux de savoir à partir de la documentation, mais pas très clairement comment, que l'on peut ajouter un ou des dictionnaires définis par l'utilisateur! J'ai essayé cela et j'ai bien fonctionné.

ajoutez ces deux lignes juste après la require-auto-completeligne ci-dessus:

(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  

Maintenant, dans votre .txtdossier, ajoutez vos candidats préférés pour l'achèvement. Sauvez-vous des candidats de moins de 4 lettres, ils n'en valent pas la peine! Mettez simplement vos mots séparés par un saut de ligne ou RET.

Exemple du contenu du .txtfichier:

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

Profitez de l'auto-complétion dans LaTeX / AUCTeX avec Emacs!


ce serait bien s'il y avait une elispfonction pour jeter n'importe quel mot marqué dans un tampon tout en écrivant dans ce .txtdictioinary à la volée et l'ajouter sans trop d'effort!
doctorat du

6

Comme je l'ai dit dans mon commentaire ci-dessus, le package auto-complete-auctexpeut également résoudre le problème. J'ai testé les deux, et ils fonctionnent tous les deux très bien. Il serait intéressant de comparer la solution de @doctorate et le package ci-dessus en donnant des captures d'écran. Si j'écris $\sig$, le code du doctorat donne quelque chose comme ça

entrez la description de l'image ici

et celui du paquet auto-complete-auctexdonne quelque chose comme ça

entrez la description de l'image ici

Ajouté: Je dois mentionner que la solution de @giordano fonctionne aussi bien, voici une capture d'écran:

entrez la description de l'image ici


Je pense que auto-completedevrait être le package principal tout en auto-complete-auctexayant des fonctionnalités supplémentaires. Je vais l'essayer et faire un rapport si nécessaire. Merci
doctorat

2
J'ai installé le paquet mais je n'arrive pas à ouvrir le popup avec les compléments ... Comment avez-vous fait et y a-t-il une documentation sur celui-ci?
Raven

@ Raven, je ne suis pas sûr de l'avoir "vraiment" en marche. Mais si vous ajoutez les étapes clés de TAB que le doctorat a dit d'éviter, appuyez sur TAB pour que cela fonctionne (pour moi).
Chill2Macht

4

Voici ma auto-completeconfiguration associée:

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

Comme vous pouvez le voir, il n'y a rien de spécial pour AUCTeX, c'est la configuration standard de auto-complete. La configuration de ac-mathest décrite sur son site Web. Si vous n'utilisez pas ac-math, la seule différence sensible avec votre configuration est (add-to-list 'ac-modes 'latex-mode).


-1: Utiliser package-initialize. Cela peut ne pas vous plaire, mais veuillez ne pas recommander de mauvaises pratiques telles que la load-pathgestion manuelle dans vos réponses.
lunaryorn

2
@lunaryorn Je ne pense pas avoir recommandé de mauvaises pratiques, j'ai clairement écrit que c'est un hack sale juste pour charger un paquet auxiliaire. J'essaierai d'améliorer la réponse en utilisant de package-initializetoute façon plus tard.
giordano
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.