MMM-mode(múltiples modos principales) parece exactamente lo que estás buscando. Se menciona en la wiki de emacs . Debe definir una clase de submodo para mezclar LaTeX y python, especificando que las partes de Python están delimitadas por las pycodeetiquetas LaTeX. Agregar lo siguiente a su archivo init debería hacerlo:
(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)
Las palabras clave :fronty :backespecifican expresiones regulares para delimitadores. Las últimas dos líneas solicitan que mmm-modecon la latex-pythonclase se active por defecto en todos los buffers cuyo modo principal es latex-mode.
Consulte la documentación para otras opciones (activándola manualmente, según el nombre del archivo o con variables de archivo).
Hay dos formas de especificar varios pares de delimitadores. Primero, se pueden unir varias clases en un grupo . A continuación, en lugar de definir la latex-pythonclase, la definimos como un grupo que contiene las dos clases latex-python-envsy latex-python-cmds(que reconoce los comandos \pyc{…}y \py{…}LaTeX).
En segundo lugar, cada clase puede especificar varios pares de delimitadores: la clase a latex-python-envscontinuación reconocerá ambos pycodey pyverbatimLaTeX envs ( ~1en se :backrefiere al valor que coincide en el primer grupo entre paréntesis :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 los delimitadores sean reconocidos necesita mmm-parse-buffer( C-c % C-b) (o mmm-parse-region, mmm-parse-blockes decir, algunas líneas alrededor del punto). Si está acostumbrado a insertar envios de LaTeX a través de LaTeX-insert-environment( C-c C-e), podría ser conveniente aconsejarle que se ejecute mmm-parse-blockcuando esté hecho, para que MMM reconozca de inmediato las etiquetas recién insertadas:
(advice-add 'LaTeX-insert-environment ':after
'(lambda (env) (mmm-parse-block 2)))
org-modebloques fuente (también genera TeX), pero esto agrega otra capa de indirección sobre LaTeX, y a veces hace que sea difícil afectar el código TeX que se genera.