2012-02-12 7 views
9

Para la mayor parte de mi trazado interactivo con matplotlib, no quiero usar el procesamiento de látex de matemáticas. (Sobre todo porque es demasiado lento, pero también porque es demasiado borroso para mi uso frecuente en mi humilde opinión.) Pero también uso mis propias macros todo el tiempo cuando escribo látex. Como solo un ejemplo, en lugar de hacer algo como $M_{\odot}$, defino $\Msun$. Entonces cuando uso matplotlib, tengo la tendencia de simplemente escribir el último automáticamente, y luego obtener un error y tener que arreglarlo. Este es solo un ejemplo particularmente simple, y me gustaría tener la flexibilidad para redefinir una macro en mis documentos y mis trazados simultáneamente sin demasiado trabajo.Extendiendo el analizador de matplotlib mathtext

Entonces, ¿hay alguna manera razonablemente buena de que pueda extender el analizador de texto matemático para comprender cosas como $\Msun$? ¿O tendría que hackear mathtext.py o algo así?

(Mi repliegue está definiendo Msun como la cadena r'M_{\odot}' así que podría escribir algo como r'$M = 10\,' + Msun + '$', pero eso es desagradable y ciertamente no sería nada más automático para mí.)

Respuesta

4

Las macros no son compatibles con mathtext de matplotlib, tendrías que editar mathtext.py. Tal vez lo más fácil sea hacer su propia expansión macro antes de pasar la cadena al analizador de texto matemático, p. text(x,y,expand(r'$M = \Msun$')) donde expand reemplaza sus propias macros como \Msun con su significado.

+1

Y para ahorrar esfuerzo de escritura, podría crear su propia función de "texto" que primero llama "expandir" y luego pasa los resultados al "texto" de matplotlib. Ahora simplemente llama a mike.text (x, y, '$ \ Msun $') o cualquier otra macro de látex que le guste. – Daan

+0

Sí, esto debería funcionar. Además, como utilizo 'ipython --pylab' de todos modos, creo que puedo' del texto', luego importo 'mike.text', que llamará' matplotlib.pyplot.text' - y de manera similar para 'xlabel', 'ylabel', etc. (Aunque soy un novato de Python, así que por favor corrígeme si eso es estúpido.) ¡Gracias! – Mike

0

Usted puede añadir su látex \newcommand s en el preámbulo, como aquí: Matplotlib latex working directory/search path

+0

Pero esto es para cuando específicamente _no quiero usar el procesamiento de tex ('rcParams ['text.usetex'] = False'), por lo que el preámbulo de látex no se usa. – Mike