13

Python でフォーマット文字列を使用すると、数値を「科学表記法」で簡単に出力できます。

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

数値を LaTeX 形式、つまり 1\times10^{+09} でフォーマットする最も簡単な方法は何ですか?

4

3 に答える 3

23

siunitx LaTeX パッケージは、結果の文字列を解析して有効な LaTeX に変換することなく、python float 値を直接使用できるようにすることで、これを解決します。

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

LaTeX ドキュメントがコンパイルされると、上記のコードは に変わります ここに画像の説明を入力。andybuckley がコメントで指摘しているように、プラス記号は siunitx で受け入れられない可能性があるため (私はテストしていません)、.repace("+", "")結果に対して a を実行する必要がある場合があります。

使用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^{{{1}}}".format(base, int(exponent))
    else:
        return float_str

テスト:

>>> latex_float(1e9)
'1 \\times 10^{9}'
于 2012-11-21T09:57:06.377 に答える
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))
于 2012-11-21T10:04:02.740 に答える