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 pycode
thẻ 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 :front
và :back
xá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-mode
với các latex-python
lớ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-python
lớp chúng ta định nghĩa nó là một nhóm có chứa hai lớp latex-python-envs
và 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-envs
bên dưới sẽ nhận ra cả hai pycode
và pyverbatim
LaTeX envs ( ~1
trong :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-block
mộ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-block
khi 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-mode
cá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.