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 pycode
etiquetas 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 :front
y :back
especifican expresiones regulares para delimitadores. Las últimas dos líneas solicitan que mmm-mode
con la latex-python
clase 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-python
clase, la definimos como un grupo que contiene las dos clases latex-python-envs
y 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-envs
continuación reconocerá ambos pycode
y pyverbatim
LaTeX envs ( ~1
en se :back
refiere 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-block
es 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-block
cuando 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-mode
bloques 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.