2011-05-20 12 views
10

Ho le seguenti righe per rendere le annotazioni TeX nel mio matplotlib trama:TeX, parentesi graffe, e la formattazione delle stringhe di sintassi nel 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() 

Funziona perfettamente, ma il mio primo pignoli è che V è un'unità di misura, quindi dovrebbe essere in modalità testo, invece di (in corsivo) modalità matematica. Io cerco la seguente stringa:

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

che genera un errore, perché { parentesi graffe } sono la proprietà della stringa di Python formattazione sintassi. Nella riga sopra, solo {0:.5} è corretto; {V} viene trattato come un estraneo. Ad esempio:

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

dovrebbe dare Some string Hello World!.

Come posso fare in modo che { parentesi graffe di TeX } non interferiscano con { parentesi graffe di Python }?

risposta

15

è necessario fare doppio le parentesi da trattare letteralmente:

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

BTW, è possibile anche scrivere

\text V 

ma il migliore è

\mathrm V 

poiché un'unità non è realmente un simbolo di testo.

5

È doppio parentesi graffe loro:

>>> print '{{asd}} {0}'.format('foo') 
{asd} foo 
Problemi correlati