Làm cách nào để tự động hoàn thành công việc trong chế độ AucTeX?


11

Tôi muốn auto-complete(ac) hoạt động khi tôi ở trong AucTeXchế độ. Tôi nhận được tất cả các gói từ MELPA bằng cách cài đặt gói.

Đây là mã có liên quan của tôi trong init.eltệp:

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

như bạn có thể thấy, mặc dù tôi đang thiết lập actrên toàn cầu nhưng nó không xuất hiện AucTeX. Tuy nhiên, bằng cách làm theo các hướng dẫn trong emacswiki này , acchế độ đã được hiển thị trên thanh trạng thái AucTeXnhưng không hoạt động, không tự động hoàn thành bằng cách nhập các ký tự.

Ghi chú
Emacs 24.4 trong Windows 7 32 bit và các gói đã được cập nhật.


Vấn đề của bạn là làm cho ac hoạt động cùng nhau yasnippet hoặc chỉ một mình, trong khi ở chế độ LaTex? Trong trường hợp sau, tôi sử dụng ac với AocateeX mà không cần làm việc nhiều.
giordano

1, tôi muốn aclàm tốt với auctex. Tôi đã đề cập yasnippetbởi vì tôi cũng sử dụng nó để có một số đoạn do người dùng định nghĩa trong latex. Vì vậy, cho đến khi bạn cung cấp mã của bạn, tôi không thể biết liệu yassẽ cản trở ac.
tiến sĩ

Giai điệu, làm ơn! Hãy thử lấy ra yasnippetđể xem tự động hoàn thành và AocateeX hoạt động cùng nhau như @giordano đề xuất. Nếu có, thì vấn đề là bao gồm yasnippet. Nếu vậy, có lẽ đó là thiết lập tự động hoàn thành của bạn.
Dân

Chúng ta có thể quên yasnippettôi đã xóa nó khỏi init.el. Vấn đề có lẽ là trong việc thiết lập auctexac.
tiến sĩ

1
Xem gói của Christopher Monsanto github.com/monsanto/auto-complete-auctex . Tôi đã không kiểm tra nó.
Tên

Câu trả lời:


11

Sau khi thực hiện một nghiên cứu dài trên web và kiểm tra actài liệu cẩn thận với rất nhiều thử nghiệm trên máy của tôi để kiểm tra từng dòng mã, tôi đã tìm ra giải pháp này có thể hoạt yasnippetđộng tốt (quang học) mà không cần bất kỳ lời kết tội nào.

đặt điều này trong init.elhoặc .emacschăm sóc trình tự của bạn:

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

Lưu ý:
như đã đề cập trong tài liệu về ac, việc thêm ac-modesvà móc nên được thực hiện trước khi tải (ac-config-default).

Một số đề nghị đặt một số mã để chơi với TABkhóa mà tôi không cần và không khuyến nghị vì nó sẽ phá hủy thứ khác sau đó. Tuy nhiên, tôi đã thấy mọi người đặt một cái gì đó như thế này vào cuối global-auto-complete:

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

Cho đến khi tôi thêm (ac-flyspell-workaround)tự động hoàn thành thì quá chậm để nghĩ đến việc sử dụng nó trong Auctex kể từ khi tôi sử dụng flyspell. Lỗi này cũng đã được đề cập trong tài liệu. Cảm ơn!

Phần thưởng
Tôi rất vui khi biết từ tài liệu này, mặc dù không rõ lắm về cách thức, người ta có thể thêm một từ điển do người dùng định nghĩa! Tôi đã thử điều này và làm việc tốt.

thêm hai dòng sau ngay sau require-auto-completedòng trên:

(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  

Bây giờ trong .txttập tin của bạn thêm các ứng cử viên yêu thích của bạn để hoàn thành. Hãy tự cứu mình khỏi những ứng cử viên dài dưới 4 chữ cái, họ không xứng đáng! Đơn giản chỉ cần đặt các từ giống như của bạn được phân tách bằng một nguồn cấp dữ liệu hoặc RET.

Ví dụ về nội dung trong .txttệp:

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

Tận hưởng tự động hoàn thành trong LaTeX / AocateeX với Emacs!


Sẽ thật tuyệt nếu có một elispchức năng để ném bất kỳ từ được đánh dấu nào vào bộ đệm trong khi viết vào thứ độc tài đó .txtngay lập tức và nối nó mà không cần nỗ lực nhiều!
tiến sĩ

6

Như tôi đã nói trong nhận xét trên của tôi, gói auto-complete-auctexcũng có thể giải quyết vấn đề. Tôi đã thử nghiệm cả hai, và cả hai đều hoạt động tốt. Sẽ thật tuyệt khi so sánh giải pháp của @doctorate và gói trên bằng cách chụp ảnh màn hình. Nếu tôi viết $\sig$, mã tiến sĩ sẽ cho một cái gì đó như thế này

nhập mô tả hình ảnh ở đây

và gói auto-complete-auctexđó cung cấp một cái gì đó như thế này

nhập mô tả hình ảnh ở đây

Đã thêm: Tôi nên đề cập rằng giải pháp của @giordano cũng hoạt động, ở đây một ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây


Tôi nghĩ auto-completenên là gói chính trong khi auto-complete-auctexcó thể có một số tính năng bổ sung. Tôi sẽ thử nó và báo cáo nếu cần thiết. Cảm ơn
tiến sĩ

2
Tôi đã cài đặt gói nhưng tôi không thể mở cửa sổ bật lên với các phần hoàn thành ... Bạn đã làm như thế nào và có một số tài liệu về cái này không?
Quạ

@Raven Tôi không chắc là tôi "thực sự" hoạt động. Nhưng nếu bạn thêm vào các bước chính của TAB mà tiến sĩ đã nói để tránh, nhấn TAB sẽ khiến nó hoạt động (đối với tôi).
Chill2Macht

4

Sau đây là auto-completecấu hình liên quan của tôi :

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

Như bạn có thể thấy, không có gì đặc biệt đối với AocateeX, đó là cấu hình tiêu chuẩn của auto-complete. Cấu hình cho ac-mathđược mô tả trên trang web của nó. Nếu bạn không sử dụng ac-math, sự khác biệt hợp lý duy nhất với cấu hình của bạn là (add-to-list 'ac-modes 'latex-mode).


-1: Sử dụng package-initialize. Bạn có thể không thích nó, nhưng vui lòng không đề xuất các thực hành xấu như load-pathquản lý thủ công trong câu trả lời của bạn.
âm lịch

2
@lunaryorn Tôi không nghĩ rằng tôi đã khuyến nghị thực hành xấu, tôi đã viết rõ ràng đó là một bản hack bẩn chỉ để tải gói phụ trợ. Tôi sẽ cố gắng cải thiện câu trả lời bằng cách package-initializenào.
giordano
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.