Làm cách nào tôi có thể tắt phương thức nhập chim cút trong công thức LaTeX?


7

Nếu bạn đặt phương thức nhập (ví dụ qua M-x set-input-methodRET cyrillic-translitRET), bạn có thể nhập các ký tự Cyrillic bằng bàn phím Hoa Kỳ: Emacs sẽ sử dụng quy tắc chuyển ngữ để chuyển đổi các ký tự La Mã thành các ký tự Cyrillic. Nếu bạn nhìn vào cyrillic.el, bạn sẽ thấy ("f" ?ф), ví dụ, gõ fcho ф.

Bây giờ hãy tưởng tượng bạn đang chỉnh sửa tệp LaTeX và LaTeX-mode( AocateeX ) được bật. Bạn sử dụng các ký tự Cyrillic trong phần thân của văn bản và các ký tự La Mã trong các công thức. Trong bối cảnh này, bạn muốn fđể sản xuất fkhông ф ở chế độ toán học, (tức là trong $...$, \[...\], \(...\), và trong môi trường toán học).

Nếu tôi hiểu câu hỏi làm thế nào để phát hiện nếu trong môi trường toán học LaTeX? câu trả lời này một cách chính xác, hàm texmathpcó thể phát hiện nếu chúng ta ở trong môi trường toán học.

Câu hỏi của tôi là về khả năng chuyển ngữ có điều kiện sau đây bằng cách sử dụng quail

fcho fbên trong một môi trường toán học LaTeX và фcác nơi khác.


Liên quan (nhưng không có câu trả lời): tex.stackexchange.com/questions/195369/...
Giordano

@giordano: Lưu ý rằng các câu hỏi mà bạn có liên quan đến các liên kết đến một câu hỏi StackOverflow mà khôngmột câu trả lời . Tôi đã không so sánh nó với câu trả lời của tôi, mặc dù. (Tuy nhiên, tôi có thể có thời gian để làm việc đó sau.)
Constantine

@Constantine Tôi thích cách tiếp cận của bạn, hơn cả câu trả lời trên Stack Overflow. Tôi đã tìm kiếm chức năng để tư vấn, nhưng tôi không thực sự quen thuộc với các phương thức nhập liệu.
giordano

@giordano: Tôi cũng không quen thuộc với các phương thức nhập liệu, tôi chỉ sử dụng nó như một cái cớ để đào bới và tìm hiểu về nó. :-) Tôi đã cập nhật câu trả lời. Tôi nghĩ bây giờ nó ít hơn một chút về hack.
Constantine

Câu trả lời:


6

Đã gần 10 năm kể từ lần cuối cùng tôi cần chỉnh sửa tài liệu LaTeX bằng tiếng Nga, nhưng tôi có thể liên quan. :-)

Theo Hướng dẫn Lisp của Emacs, mọi phương thức nhập sẽ vô hiệu hóa bản dịch và chuyển đổi khóa nếu overriding-local-mapđược đặt.

Chúng ta có thể dựa vào điều này để vô hiệu hóa quailđiều kiện.

Trong Emacs 24.4 trở lên (sử dụng cơ chế tư vấn mới), hãy thêm phần này vào tệp init của bạn:

(advice-add 'quail-input-method :around
            (lambda (orig key)
              "Disable quail-input-method in TeX and LaTeX formulas. Uses AUCTeX."
              (if (and (eq major-mode 'latex-mode)
                       (fboundp 'texmathp)
                       (texmathp))
                  (let ((overriding-local-map t))
                    (funcall orig key))
                (funcall orig key))))

Lưu ý rằng tôi kiểm tra nếu chế độ chính hiện tại là latex-mode; bạn có thể cần phải điều chỉnh điều đó. (Chúng tôi phải kiểm tra chế độ chính vì một khi AocateeX được tải texmathpbị ràng buộc trong tất cả các bộ đệm và chúng tôi không muốn gây rối với các phương thức nhập chỉ vì có ký hiệu đô la trong bộ đệm hiện tại.)

Trong các phiên bản Emacs cũ hơn (được thử nghiệm theo Emacs 23.4.1), chúng tôi phải sử dụng defadvice:

(defadvice quail-input-method (around disable-quail-in-formulas activate)
  "Disable quail-input-method in TeX and LaTeX formulas. Uses AUCTeX."
  (if (and (eq major-mode 'latex-mode)
           (fboundp 'texmathp)
           (texmathp))
      (let ((overriding-local-map t))
        ad-do-it)
    ad-do-it))

Cảm ơn câu trả lời của bạn, khi tôi đặt mã của bạn, tôi nhận được lỗi Định nghĩa hàm của biểu tượng là void: lời khuyên-add . tôi không biết vấn đề này phát sinh từ đâu.
Tên

@ Tên: advice-addđã được thêm vào trong Emacs 24.4. Tôi sẽ cập nhật câu trả lời để bao gồm một phiên bản mã hoạt động với các phiên bản Emacs cũ hơn. (Tôi sẽ cho bạn biết khi đã xong.)
Constantine

@ Tên: Tôi đã cập nhật câu trả lời; cho tôi biết nếu nó làm việc cho bạn bây giờ
Constantine

+1000 cho câu trả lời tuyệt vời này, nó hoạt động hoàn hảo.
Tên
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.