MMM-mode
(複数の主要モード)はまさにあなたが探しているもののようです。emacs wikiで言及されています。LaTeXとpythonを混合するサブモードクラスを定義し、pythonの部分がpycode
LaTeXタグで区切られていることを指定する必要があります。以下を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
とpyverbatim
LaTeXの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コードに影響を与えることが難しくなる場合があります。