matplotlib中的TeX渲染,花括号和字符串格式化语法

Kit*_*Kit 15 python string matplotlib tex

我有以下几行在我的matplotlib情节中渲染TeX注释:

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()
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我的第一个挑剔是它V是一个度量单位,因此它应该是文本模式,而不是(斜体)数学模式.我尝试以下字符串:

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

这引发了一个错误,因为{花括号}是Python的字符串格式化语法的所有权.在上面这行,只是{0:.5}正确的; {V}被视为陌生人.例如:

s1 = "Hello"
s2 = "World!"
print "Some string {0} {1}".format(s1, s2)
Run Code Online (Sandbox Code Playgroud)

应该给Some string Hello World!.

我如何确保TeX的{花括号}不会干扰Python的{花括号}

Phi*_*ipp 21

你需要加倍大括号才能按字面意思对待:

r"\noindent $V_2 = {0:.5} \text{{V}}$".format(voltage)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你也可以写

\text V
Run Code Online (Sandbox Code Playgroud)

但最好的是

\mathrm V
Run Code Online (Sandbox Code Playgroud)

因为单位不是真正的文字符号.


Ble*_*der 6

你双重卷曲他们:

>>> print '{{asd}} {0}'.format('foo')
{asd} foo
Run Code Online (Sandbox Code Playgroud)