MMM-mode(複数の主要モード)はまさにあなたが探しているもののようです。emacs wikiで言及されています。LaTeXとpythonを混合するサブモードクラスを定義し、pythonの部分がpycodeLaTeXタグで区切られていることを指定する必要があります。以下をinitファイルに追加することで実行できます:
(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)
:frontそして:back、キーワードを指定した正規表現の区切り文字のために。最後の2行は、メジャーモードがであるすべてのバッファで、デフォルトでクラスがアクティブになることmmm-modeを要求していlatex-pythonますlatex-mode。
他のオプションについては、ドキュメントを参照してください(ファイル名に基づいて、またはファイル変数を使用して手動でアクティブ化します)。
複数の区切り文字のペアを指定するには、2つの方法があります。まず、いくつかのクラスをグループに参加させることができます。以下は、代わりの定義latex-pythonクラスを、我々は2つのクラスを含むグループとして定義latex-python-envsし、latex-python-cmds(自身が認識\pyc{…}して\py{…}LaTeXのコマンド)。
第二に、各クラスは、いくつかのいくつかの区切り文字のペアを指定することができる:クラスはlatex-python-envs以下の両方を認識するであろうpycodeとpyverbatimLaTeXのENVSを(~1で:back最初の括弧のグループ内で一致した値を意味します: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 "}")))
区切り文字が認識されるようにするには、mmm-parse-buffer(C-c % C-b)(またはmmm-parse-region、またはmmm-parse-blockポイントの周りの数行)を行う必要があります。LaTeX-insert-environment(C-c C-e)を介してLaTeX envsを挿入することに慣れている場合、MMMが挿入されたばかりのタグをすぐに認識するように、完了時に実行するようにアドバイスすると便利mmm-parse-blockです。
(advice-add 'LaTeX-insert-environment ':after
'(lambda (env) (mmm-parse-block 2)))
org-modeソースブロック(TeXも生成します)で簡単に実行できるものですが、これによりLaTeXの上に間接層がさらに追加され、生成されるTeXコードに影響を与えることが難しくなる場合があります。