AucTeXモードでオートコンプリートを機能させる方法は?


11

モードauto-completeに入っているときに(ac)を動作させたいAucTeX。パッケージのインストールにより、すべてのパッケージを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の32ビット版とパッケージの下のEmacs 24.4が更新されました。


あなたの問題は、LaTexモードで、ACをyasnippetまたは単独で動作させることですか?後者の場合、あまり作業せずにAUCTeXでacを使用します。
giordano 2015年

第一に、ac上手にしたいですauctex。私yasnippetはまた、latexでユーザー定義のスニペットを作成するためにも使用しているため、言及しました。したがって、あなたがコードを提供するまで、私がyas邪魔になるかどうかはわかりませんac
博士号

調子、お願い!yasnippet@giordanoが提案するように、オートコンプリートとAUCTeXが連動するかどうかを確認してください。はいの場合、問題はを含めることですyasnippet。もしそうなら、それはおそらくあなたのオートコンプリートセットアップです。
ダン

yasnippetinit.elから削除したことを忘れてしまいます。問題はおそらくとの設定にauctexありacます。
博士号

1
Christopher Monsanto github.com/monsanto/auto-complete-auctexによるパッケージを参照してください。私はそれをテストしていません。
名前

回答:


11

Webで長い調査を行い、acコードを1行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) 

注:
ドキュメント説明されているようac、への追加ac-modesとフックは、をロードする前に行う必要があります(ac-config-default)

一部は、TAB私が必要としなかったキーで遊ぶためにいくつかのコードを置くことを提案しました。しかし、私は人々が直前に最後にこのようなものを置くのを見ましたglobal-auto-complete

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

(ac-flyspell-workaround)自動補完を追加するまで、フライスペルを使用しているため、オートコンプリートをAuctexで使用することを考えるには遅すぎました。このバグはドキュメントにも記載されています。ありがとう!

ボーナス
私はドキュメントから知ってうれしかったですが、方法はあまり明確ではありませんが、ユーザー定義の辞書を追加できることを知っています!私はこれを試してうまくいきました。

require-auto-complete上記の2 行を上記の行の直後に追加します。

(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ファイルにお気に入りの候補を追加して完了させます。4文字未満の候補者から身を守ってください。彼らはそれに値するものではありません!好きな単語を改行またはで区切って入力してください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は、そのWebサイトに記載されています。を使用しない場合ac-math、構成との唯一の実用的な違いは(add-to-list 'ac-modes 'latex-mode)です。


-1:を使用しpackage-initializeます。気に入らないかもしれませんload-pathが、回答に手動管理などの悪い習慣はお勧めしません。
lunaryorn 2015年

2
@lunaryorn私は悪い習慣を勧めたとは思いません。補助パッケージをロードするだけの汚いハックだとはっきり書いています。package-initializeとにかく後で使って答えを改善してみます。
giordano 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.