MMM-mode(nhiều chế độ chính) dường như chính xác những gì bạn đang tìm kiếm. Nó được đề cập trên wiki emacs . Bạn cần xác định một lớp mã hóa để trộn LaTeX và python, chỉ định rằng các phần python được phân định bởi các pycodethẻ LaTeX. Thêm phần sau vào tệp init của bạn sẽ làm điều đó:
(require 'mmm-auto)
(mmm-add-classes
'((latex-python
:submode python-mode
:face mmm-default-submode-face
:front "\\\\begin{pycode}\n"
:back "\\\\end{pycode}\n")))
(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class 'latex-mode nil 'latex-python)
Các từ khóa :frontvà :backxác định các biểu thức chính quy cho các dấu phân cách. Hai dòng cuối cùng yêu cầu mmm-modevới các latex-pythonlớp được kích hoạt theo mặc định trong tất cả các bộ đệm có chế độ chính là latex-mode.
Xem tài liệu cho các tùy chọn khác (kích hoạt thủ công, dựa trên tên tệp hoặc với các biến tệp).
Có hai cách để xác định một số cặp dấu phân cách. Đầu tiên, một số lớp có thể được tham gia trong một nhóm . Dưới đây, thay vì định nghĩa latex-pythonlớp chúng ta định nghĩa nó là một nhóm có chứa hai lớp latex-python-envsvà latex-python-cmds(chính nó nhận ra các lệnh \pyc{…}và \py{…}LaTeX).
Thứ hai, mỗi lớp có thể chỉ định một vài một vài cặp delimiter: lớp latex-python-envsbên dưới sẽ nhận ra cả hai pycodevà pyverbatimLaTeX envs ( ~1trong :backđề cập đến giá trị khớp lệnh trong nhóm ngoặc đầu tiên trong :front).
(mmm-add-group 'latex-python
'((latex-python-envs
:submode python-mode
:face mmm-default-submode-face
:front "\\\\begin{\\(pycode\\|pyverbatim\\)}\n"
:back "\\\\end{~1}\n"
:save-matches 1)
(latex-python-cmds
:submode python-mode
:face mmm-default-submode-face
:front "\\\\pyc?{"
:back "}")))
Để các dấu phân cách được nhận ra, bạn cần mmm-parse-buffer( C-c % C-b) (hoặc mmm-parse-region, hoặc mmm-parse-blockmột vài dòng xung quanh điểm). Nếu bạn được sử dụng để chèn LaTeX envs thông qua LaTeX-insert-environment( C-c C-e), có thể thuận tiện để khuyên nó chạy mmm-parse-blockkhi hoàn thành, để MMM nhận ra ngay các thẻ vừa chèn:
(advice-add 'LaTeX-insert-environment ':after
'(lambda (env) (mmm-parse-block 2)))
org-modecác khối nguồn (nó cũng tạo TeX), nhưng điều này lại thêm một lớp cảm ứng khác trên đỉnh LaTeX, và đôi khi gây khó khăn cho việc ảnh hưởng đến mã TeX được tạo.