2011-05-20 16 views
10

Tengo las siguientes líneas para prestar anotaciones TeX en mi matplotlib parcela:TeX, las llaves, y el formato de cadenas de sintaxis en matplotlib

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import rc 

rc('text', usetex=True) 
rc('font', family='serif') 

voltage = 220 

notes = r"\noindent $V_2 = {0:.5} V$".format(voltage) 

plt.annotate(notes, xy=(5,5), xytext=(7,7)) 
plt.show() 

Funciona perfectamente, pero mi primera nitpick es que V es una unidad de medida, por lo tanto, debe estar en modo texto, en lugar de modo matemático (en cursiva). Trato de la siguiente cadena:

notes = r"\noindent $V_2 = {0:.5} \text{V}$".format(voltage) 

Eso genera un error, porque { llaves } son la propiedad de cadenas de Python formato a la sintaxis. En la línea anterior, solo {0:.5} es correcto; {V} es tratado como un extraño. Por ejemplo:

s1 = "Hello" 
s2 = "World!" 
print "Some string {0} {1}".format(s1, s2) 

debe dar Some string Hello World!.

¿Cómo me aseguro de que { llaves de Tex } no interfieran con { llaves de Python }?

Respuesta

15

Tienes que duplicar las llaves a tratar literalmente:

r"\noindent $V_2 = {0:.5} \text{{V}}$".format(voltage) 

Por cierto, también se puede escribir

\text V 

pero lo mejor es

\mathrm V 

ya que una unidad no es realmente un símbolo de texto.

5

Puede doble rizado corsé ellos:

>>> print '{{asd}} {0}'.format('foo') 
{asd} foo 
Cuestiones relacionadas