Usando el paquete LaTeX pythontex I, uno puede insertar el código python en el documento de látex que se ejecuta (e imprime en su archivo de látex si lo desea) si ejecuta látex. Utilizo auctex para editar archivos de látex, sin embargo, editar el código de python dentro del documento de látex es un poco doloroso ya que el búfer está en modo de látex y no en modo de pitón, por lo que no hay ayuda para la sangría adecuada del código de python y sin resaltado de sintaxis .
Entonces, ¿hay alguna forma razonable de mezclar el modo python con el modo latex? Por ejemplo, ¿que el búfer salta automáticamente al modo python si el punto está dentro de un código python cortado? ¿Qué debo agregar a mi archivo .emacs para que funcione? ¿Alguna otra idea?
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
print('test1')
def f( ):
print('test2')
f()
\end{pycode}
\pyc{f()}
\end{document}
Tenga en cuenta que pythontex
tiene múltiples entornos y comandos que pueden contener pythoncode, por ejemplo pycode
o pyverbatim
como entornos \pyc
o \py
como comandos.
fuente
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.Respuestas:
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 laspycode
etiquetas LaTeX. Agregar lo siguiente a su archivo init debería hacerlo:Las palabras clave
:front
y:back
especifican expresiones regulares para delimitadores. Las últimas dos líneas solicitan quemmm-mode
con lalatex-python
clase se active por defecto en todos los buffers cuyo modo principal eslatex-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 claseslatex-python-envs
ylatex-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á ambospycode
ypyverbatim
LaTeX envs (~1
en se:back
refiere al valor que coincide en el primer grupo entre paréntesis:front
).Para que los delimitadores sean reconocidos necesita
mmm-parse-buffer
(C-c % C-b
) (ommm-parse-region
,mmm-parse-block
es decir, algunas líneas alrededor del punto). Si está acostumbrado a insertar envios de LaTeX a través deLaTeX-insert-environment
(C-c C-e
), podría ser conveniente aconsejarle que se ejecutemmm-parse-block
cuando esté hecho, para que MMM reconozca de inmediato las etiquetas recién insertadas:fuente
\pyc
opyverbatim
)? ¿Hay alguna manera de hacer que el modo mmm detecte automáticamente si inserto unpycode
entorno?\begin{pycode}
+ ENTRAR + luego inserte unfor
bucle, por ejemplo,for i in range(0,10):
+ ENTRAR +print(i)
+ ENTRAR +\end{pycode}
. ¿El ENTER después de lafor
línea sangra esta declaración pero noprint(i)
funciona para usted?pycode
entorno, el modo látex lo intenta automáticamente y tiene que usar TAB explícitamente para corregir esto, se produce otro problema, si usa pycode dentro de otro entorno. Hice un screencast para aclarar lo que quiero decir: expirebox.com/download/e348355feabb8bb5d8c8399b97bccdb8.html\pyc
y\py
?