使用Python中的LaTeX表示法格式化数字

时间:2012-11-21 09:41:11

标签: python formatting latex

在Python中使用格式字符串我可以轻松地在"科学记数法"中打印一个数字,例如

>> print '%g'%1e9
1e+09

格式化LaTeX格式数字的最简单方法是什么,即1 \ times10 ^ {+ 09}?

3 个答案:

答案 0 :(得分:17)

siunitx LaTeX包通过允许您直接使用python float值而不需要解析生成的字符串并将其转换为有效的LaTeX来解决这个问题。

>>> print "\\num{{{0:.2g}}}".format(1e9)
\num{1e+09}

编译LaTeX文档时,上面的代码将被转换为 enter image description here。正如andybuckley在评论中指出的那样,siunitx可能不接受加号(我没有测试过它),因此可能需要对结果进行.repace("+", "")

如果以某种方式使用siunitx,请编写如下自定义函数:

def latex_float(f):
    float_str = "{0:.2g}".format(f)
    if "e" in float_str:
        base, exponent = float_str.split("e")
        return r"{0} \times 10^{>>> latex_float(1e9)
'1 \\times 10^{9}'
}".format(base, int(exponent))
    else:
        return float_str

测试:

{{1}}

答案 1 :(得分:5)

您可以编写frexp10函数:

def frexp10(x):
    exp = int(math.floor(math.log10(abs(x))))
    return x / 10**exp, exp

然后以LaTeX样式格式化:

'{0}^{{{1:+03}}}'.format(*frexp10(-1.234e9))

答案 2 :(得分:0)

安装num2tex

pip install num2tex

并按原样使用它:

>>> from num2tex import num2tex
>>> '{:.0e}'.format(num2tex(1e9))
'1 \\times 10^{9}'

num2tex继承自str,因此format函数可以以相同的方式使用。

免责声明:一段时间(对于Jupyter,Matplotlib等)使用(并投票)Lauritz V. Thaulow's answer之后,我认为最好为我的工作流程编写一个简单的Python模块,因此我在{{ 3}},并将其注册到GitHub。我希望获得一些有关如何使其更有用的反馈。