TeX-рендеринг, фигурные скобки и синтаксис форматирования строк в matplotlib
У меня есть следующие строки для рендеринга аннотаций TeX в моем графике 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()
Это работает отлично, но мой первый nitpick состоит в том, что V
является единицей измерения, поэтому он должен быть в текстовом режиме, а не в (курсивом) математическом режиме. Я пробую следующую строку:
notes = r"\noindent $V_2 = {0:.5} \text{V}$".format(voltage)
Это вызывает ошибку, потому что {
фигурные скобки }
являются собственностью синтаксиса форматирования строки Python. В приведенной выше строке используется только {0:.5}
; {V}
рассматривается как чужой. Например:
s1 = "Hello"
s2 = "World!"
print "Some string {0} {1}".format(s1, s2)
должен дать Some string Hello World!
.
Как убедиться, что фигурные скобки TeX {
}
не мешают Python {
фигурные скобки }
?
Ответы
Ответ 1
Вам нужно удвоить фигурные скобки, которые нужно обрабатывать буквально:
r"\noindent $V_2 = {0:.5} \text{{V}}$".format(voltage)
Кстати, вы также можете написать
\text V
но лучше всего
\mathrm V
так как единица не является текстовым символом.
Ответ 2
Вы дублируете их:
>>> print '{{asd}} {0}'.format('foo')
{asd} foo