วิธีทำให้การเติมข้อความอัตโนมัติทำงานในโหมด 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แต่ไม่ใช่การทำงานไม่มีอัตโนมัติเสร็จโดยตัวละครพิมพ์

Notes
Emacs 24.4 ภายใต้ Windows 7 32 บิตและแพ็คเกจได้รับการอัพเดต


ปัญหาของคุณคือการทำให้ AC ทำงานร่วมกันกับ yasnippet หรือเพียงอย่างเดียวในขณะที่อยู่ในโหมด LaTex? ในกรณีหลังฉันใช้ ac กับ AUCTeX โดยไม่ต้องทำงานมาก
giordano

1 ผมต้องการที่จะมีการทำดีกับac auctexฉันพูดถึงyasnippetเพราะฉันยังใช้มันเพื่อมีตัวอย่างบางส่วนที่ผู้ใช้กำหนดในน้ำยาง ดังนั้นจนกว่าคุณจะให้รหัสของคุณฉันไม่สามารถบอกได้ว่าจะได้รับในทางของyas ac
ปริญญาเอก

โทนโปรด! ลองนำออกyasnippetไปดูว่าการเติมข้อความอัตโนมัติและ AUCTeX ทำงานร่วมกันตามที่ @giordano แนะนำหรือไม่ yasnippetถ้าใช่แล้วปัญหาคือมีการรวมของ ถ้าเป็นเช่นนั้นอาจเป็นการตั้งค่าการเติมข้อความอัตโนมัติของคุณ
แดน

เราสามารถลืมได้ว่าyasnippetฉันลบออกจาก init.el ของฉัน ปัญหาที่เกิดขึ้นเป็นส่วนใหญ่อาจในการตั้งค่าของและauctex ac
ปริญญาเอก

1
ดูแพคเกจโดยคริส Monsanto github.com/monsanto/auto-complete-auctex ฉันไม่ได้ทดสอบ
ชื่อ

คำตอบ:


11

หลังจากทำวิจัยในเว็บเป็นเวลานานและตรวจสอบacเอกสารด้วยการทดลองบนเครื่องของฉันอย่างถี่ถ้วนเพื่อตรวจสอบโค้ดบรรทัดต่อบรรทัดฉันมาพร้อมกับโซลูชันนี้ที่สามารถyasnippetทำงานได้ดี (optioinal) โดยไม่มีความผิด

ใส่สิ่งนี้ลงในของคุณ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 ตั้งแต่ฉันใช้ flyspell ข้อผิดพลาดนี้ถูกกล่าวถึงในเอกสารด้วย ขอบคุณ!

โบนัส
ฉันดีใจที่ได้ทราบจากเอกสารแม้ว่าจะไม่ชัดเจนว่าจะสามารถเพิ่มพจนานุกรมที่ผู้ใช้กำหนดเอง (IES) ได้อย่างไร! ฉันลองและใช้งานได้ดี

เพิ่มสองบรรทัดหลังrequire-auto-completeบรรทัดด้านบน:

(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

เพลิดเพลินกับการเติมข้อมูลอัตโนมัติใน LaTeX / AUCTeX ด้วย Emacs!


มันจะดีถ้ามีelispฟังก์ชั่นที่จะโยนคำที่ถูกทำเครื่องหมายไว้ในบัฟเฟอร์ในขณะที่เขียนลงใน.txtdictioinary on-the-fly และผนวกมันโดยไม่ต้องใช้ความพยายามมาก!
ปริญญาเอก

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อธิบายไว้ในเว็บไซต์ หากคุณไม่ได้ใช้ที่แตกต่างที่เหมาะสมกับการกำหนดค่าของคุณac-math(add-to-list 'ac-modes 'latex-mode)


-1: package-initializeการใช้งาน คุณอาจไม่ชอบ แต่โปรดอย่าแนะนำวิธีปฏิบัติที่ไม่ดีเช่นload-pathการจัดการด้วยตนเองในคำตอบของคุณ
Lunaryorn

2
@ lunaryorn ฉันไม่คิดว่าฉันแนะนำวิธีปฏิบัติที่ไม่ดีฉันเขียนไว้อย่างชัดเจนว่าเป็นแฮ็คที่สกปรกเพียงเพื่อโหลดแพ็คเกจเสริม ฉันจะพยายามปรับปรุงคำตอบโดยใช้ในpackage-initializeภายหลัง
giordano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.