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

24

我有以下代码来在我的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()

它运行得很好,但我有一个小问题,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 的 {花括号} 冲突?

3个回答

29

您需要将大括号重复一次以让它们被视为文字:

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

顺便提一下,您也可以写成

\text V

但是最好的是

\mathrm V

因为单位并不是真正的文本符号。


6
你需要在它们两侧加上双大括号:
>>> print '{{asd}} {0}'.format('foo')
{asd} foo

2

我更喜欢使用“%”进行格式化,而不是使用“{}”进行Python格式化,这样可以避免大量的括号。

因此,为了呈现类似于3*pi/2的内容,我使用以下代码:

r'\frac{%.0f\pi}{2}' % (3)

替代

r'\frac{{{:.0f}\pi}}{{2}}'.format(3)

在Jupyter中使用它,代码如下:
from IPython.display import display, Math, Latex
display(Math(  r'\frac{%.0f\pi}{2}' % (3)  ))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接