Wie kann die automatische Vervollständigung im AucTeX-Modus ausgeführt werden?

11

Ich möchte, dass auto-complete(ac) funktioniert, wenn ich mich im AucTeXModus befinde. Ich erhalte alle Pakete von MELPA per Paketinstallation.

Dies ist mein relevanter Code in der init.elDatei:

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

Wie Sie sehen können, wird aces nicht angezeigt , obwohl ich es global einstelle AucTeX. Durch Befolgen der Anweisungen in diesem Emacswiki wurde der acModus in der Statusleiste angezeigt, AucTeXjedoch nicht funktionsfähig, keine automatische Vervollständigung durch Eingabe von Zeichen.

Hinweise
Emacs 24.4 unter Windows 7 32bit und Pakete wurden aktualisiert.

Promotion
quelle
Ihr Problem ist es, AC im LaTex-Modus als Yasnippet oder nur alleine zusammenarbeiten zu lassen? Im letzteren Fall verwende ich AC mit AUCTeX ohne viel Arbeit.
Giordano
Erstens möchte acich gut damit umgehen können auctex. Ich erwähnte, yasnippetweil ich es auch benutze, um einige benutzerdefinierte Schnipsel in Latex zu haben. Bis Sie Ihren Code angeben, kann ich nicht sagen, ob dies yasim Weg steht ac.
Promotion am
Ton bitte! Versuchen Sie herauszufinden yasnippet, ob Autocomplete und AUCTeX zusammenarbeiten, wie von @giordano vorgeschlagen. Wenn ja, dann liegt das Problem bei der Aufnahme von yasnippet. Wenn ja, ist es wahrscheinlich Ihr Autocomplete-Setup.
Dan
Wir können vergessen, dass yasnippetich es von meiner init.el entfernt habe. Das Problem liegt höchstwahrscheinlich in der Einrichtung von auctexund ac.
Promotion am
1
Siehe ein Paket von Christopher Monsanto github.com/monsanto/auto-complete-auctex . Ich habe es nicht getestet.
Name

Antworten:

11

Nachdem ich lange im Internet recherchiert und die acDokumentation sorgfältig geprüft und viele Versuche auf meinem Computer durchgeführt hatte, um den Code Zeile für Zeile zu überprüfen, kam ich zu dieser Lösung, die yasnippetauch ohne Probleme funktionieren kann (optioinal).

Setzen Sie dies in Ihre init.eloder .emacskümmern Sie sich um die Reihenfolge:

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

Hinweise:
Wie in der Dokumentation von erwähnt ac, sollten das Hinzufügen ac-modesund Einhängen vor dem Laden erfolgen (ac-config-default).

Einige schlugen vor, Code zum Spielen mit dem TABSchlüssel zu verwenden, den ich nicht brauchte, und empfehlen ihn nicht, da er später irgendwie etwas anderes zerstören würde. Ich habe jedoch gesehen, wie Leute am Ende kurz zuvor so etwas geschrieben haben global-auto-complete:

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

Bis ich die (ac-flyspell-workaround)automatische Vervollständigung hinzufügte, war es zu langsam, daran zu denken, sie in Auctex zu verwenden, da ich Flyspell verwende. Dieser Fehler wurde auch in der Dokumentation erwähnt. Vielen Dank!

Bonus
Ich war froh aus der Dokumentation zu wissen, obwohl nicht sehr klar, wie man ein benutzerdefiniertes Wörterbuch hinzufügen kann! Ich habe es versucht und gut gearbeitet.

Fügen Sie diese beiden Zeilen direkt nach der require-auto-completeobigen Zeile hinzu:

(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  

Fügen Sie nun in Ihrer .txtDatei Ihre Lieblingskandidaten zur Vervollständigung hinzu. Sparen Sie sich vor Kandidaten, die weniger als 4 Buchstaben lang sind, sie sind es nicht wert! Setzen Sie einfach Wörter Ihrer Art durch einen Zeilenvorschub oder getrennt RET.

Beispiel für den Inhalt der .txtDatei:

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

Genießen Sie die automatische Vervollständigung in LaTeX / AUCTeX mit Emacs!

Promotion
quelle
Es wäre schön, wenn es eine elispFunktion gäbe, ein markiertes Wort in einen Puffer zu werfen, während man es .txtspontan in dieses Diktat schreibt und es ohne großen Aufwand anfügt!
Promotion am
6

Wie ich in meinem obigen Kommentar sagte, kann das Paket auto-complete-auctexauch das Problem lösen. Ich habe beide getestet und beide funktionieren gut. Es wäre schön, die Lösung von @doctorate und das obige Paket mit Screenshots zu vergleichen . Wenn ich schreibe $\sig$, gibt der Promotionscode so etwas

Geben Sie hier die Bildbeschreibung ein

und das des Pakets auto-complete-auctexgibt so etwas

Geben Sie hier die Bildbeschreibung ein

Hinzugefügt: Ich sollte erwähnen, dass die Lösung von @giordano auch funktioniert, hier ein Screenshot:

Geben Sie hier die Bildbeschreibung ein

Name
quelle
Ich denke, auto-completesollte das Hauptpaket sein, während auto-complete-auctexes einige zusätzliche Funktionen haben könnte. Ich werde es versuchen und gegebenenfalls berichten. Danke
Promotion
2
Ich habe das Paket installiert, kann aber das Popup mit den Vervollständigungen nicht öffnen ... Wie haben Sie es gemacht und gibt es eine Dokumentation zu diesem Paket?
Raven
@ Raven Ich bin mir nicht sicher, ob es "wirklich" funktioniert. Wenn Sie jedoch die TAB-Schlüsselschritte hinzufügen, die die Promotion vermeiden soll, funktioniert das Drücken von TAB (für mich).
Chill2Macht
4

Das Folgende ist mein auto-complete verwandte Konfiguration:

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

Wie Sie sehen, gibt es für AUCTeX nichts Besonderes, es ist die Standardkonfiguration von auto-complete. Die Konfiguration für ac-mathist auf der Website beschrieben. Wenn Sie nicht verwenden ac-math, ist der einzige sinnvolle Unterschied zu Ihrer Konfiguration (add-to-list 'ac-modes 'latex-mode).

Giordano
quelle
-1: Verwenden package-initialize. Sie mögen es vielleicht nicht, aber bitte empfehlen Sie load-pathin Ihren Antworten keine schlechten Praktiken wie manuelle Verwaltung.
Mondhorn
2
@lunaryorn Ich glaube nicht, dass ich schlechte Praktiken empfohlen habe. Ich habe klar geschrieben, dass es ein schmutziger Hack ist, nur um ein Hilfspaket zu laden. Ich werde versuchen, die Antwort package-initializespäter trotzdem zu verbessern .
Giordano