2012-11-28 24 views
8

Tôi muốn thực hiện thay thế văn bản động (chỉ hiển thị được thay thế, tệp được lưu trữ thực tế không được thay thế) cho Emacs, sử dụng Elisp. Ví dụ, trong tài liệu LaTeX, tôi muốn nhập \alpha và để Emacs hiển thị nó giống như α, do đó dễ đọc hơn. Nhưng trong tập tin kết quả .tex, tôi vẫn muốn \alpha, thay vì α để được lưu. (Lưu ý: Tôi có thể sử dụng XeTeX hoặc LuaTeX để hỗ trợ trực tiếp UTF-8. Nhưng vì lý do yêu cầu hợp tác và tạp chí, tôi không muốn các ký tự UTF-8 được lưu trực tiếp trong các tệp .tex. xem trước trong AUCTeX. Nhưng điều đó không giúp ích gì khi tôi đang chỉnh sửa công thức)Làm cách nào để Emacs hiển thị một nhân vật khác với thực tế được lưu trữ?

Ví dụ hiện tại ở chế độ org, khi chúng tôi nhập [[link][name]], ngay sau khi nhập ] cuối cùng, văn bản được hiển thị được thay thế bằng chỉ tên, với siêu liên kết. Mặt khác, khi lưu tệp này, nội dung đã lưu là [[link][name]] gốc, khác với nội dung được hiển thị.

Bất kỳ ý tưởng nào về cách thực hiện điều này?

PS: Phần Display Specs That Replace The Text của hướng dẫn sử dụng Emacs sắp hết. Tuy nhiên, tôi cần phải xác định điểm bắt đầu và điểm kết thúc, thay vì chuỗi mong muốn cho các thay thế. Điều này có nghĩa là tôi cần thực hiện tìm kiếm sau mỗi lần nhập của người dùng để quyết định điểm bắt đầu và điểm kết thúc. Điều này có vẻ không thực tế do hiệu suất và độ phức tạp của thuật toán.

Trả lời

6

Một cách để làm điều này là để thêm từ khóa khóa phông chữ cho các phương thức phù hợp và sử dụng compose-region để hiển thị các hình tượng mới ở vị trí của chuỗi cũ:

(font-lock-add-keywords 
'latex-mode `(("\\(\\\\alpha\\)" 
       (0 (progn (compose-region (match-beginning 1) 
              (match-end 1) "α") 
          nil))))) 

hãy cũng lưu ý rằng org-mode có một tính năng thuộc loại này đã được tích hợp sẵn, không chỉ cho các liên kết như bạn đã đề cập, mà còn cho các đối tượng giống như LaTeX:

(setq org-pretty-entities t) 
Các vấn đề liên quan