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 pycode
tags 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
- :back
chave e especificam expressões regulares para delimitadores. As duas últimas linhas solicitam que mmm-mode
a latex-python
classe 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-python
classe, definimos como um grupo que contém as duas classes latex-python-envs
e 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-envs
abaixo reconhecerá os dois pycode
e os pyverbatim
envs do LaTeX ( ~1
in :back
refere-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-block
seja, 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-block
quando 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-mode
blocos 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.