MMM-mode(vários modos principais) parece exatamente o que você está procurando. É mencionado no wiki do emacs . Você precisa definir uma classe de submodo para combinar o LaTeX e o python, especificando que as partes do python são delimitadas pelas pycodetags LaTeX. Adicionar o seguinte ao seu arquivo init deve fazê-lo:
(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)
As palavras :front- :backchave e especificam expressões regulares para delimitadores. As duas últimas linhas solicitam que mmm-modea latex-pythonclasse seja ativada por padrão em todos os buffers cujo modo principal é latex-mode.
Consulte a documentação para outras opções (ativando-a manualmente, com base no nome do arquivo ou com variáveis de arquivo).
Existem duas maneiras de especificar vários pares de delimitadores. Primeiro, várias classes podem ser ingressadas em um grupo . Abaixo, em vez de definir a latex-pythonclasse, definimos como um grupo que contém as duas classes latex-python-envse latex-python-cmds(ele próprio reconhece os comandos \pyc{…}e \py{…}LaTeX).
Segundo, cada classe pode especificar vários pares de delimitadores: a classe latex-python-envsabaixo reconhecerá os dois pycodee os pyverbatimenvs do LaTeX ( ~1in :backrefere-se ao valor correspondente no primeiro grupo entre parênteses em :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 "}")))
Para que os delimitadores sejam reconhecidos, é necessário mmm-parse-buffer( C-c % C-b) (ou mmm-parse-region, ou mmm-parse-blockseja, algumas linhas ao redor do ponto). Se você está acostumado a inserir envs do LaTeX através de LaTeX-insert-environment( C-c C-e), pode ser conveniente aconselhá- lo a executar mmm-parse-blockquando terminar, para que o MMM reconheça imediatamente as tags inseridas recentemente:
(advice-add 'LaTeX-insert-environment ':after
'(lambda (env) (mmm-parse-block 2)))
org-modeblocos de origem (também gera TeX), mas isso adiciona outra camada de indireção sobre o LaTeX e às vezes dificulta a afetação do código TeX que está sendo gerado.