如何在Astropy中指定LaTeX输出格式

时间:2017-08-16 14:37:11

标签: python latex astropy

我刚开始使用Astropy以LaTeX格式编写表格。然而,当我写下表时,标准化为大质量的单位,通常为1e6太阳质量,在没有科学记数法的情况下显示。

一个例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


def table_write():
    from astropy.io import ascii
    import astropy.table
    import astropy.units as u


    #fake data, ~ the same order of magnitude of real ones
    Mbh = [1e1,  7e3]
    t_final = [13, 12.2]

    tab = astropy.table.Table([Mbh, t_final],
            names =  ['Mbh', 't_final'])
    tab['Mbh'].unit = '1e6 Msun'
    tab['t_final'].unit = 'Gyr'

    ascii.write(tab,
            Writer=ascii.Latex,
            latexdict=ascii.latex.latexdicts['AA'])


if __name__ == "__main__":
    table_write()

输出

\begin{table}
\begin{tabular}{cc}
\hline \hline
Mbh & t_final \\
$\mathrm{1000000\,M_{\odot}}$ & $\mathrm{Gyr}$ \\
\hline
10.0 & 13.0 \\
7000.0 & 12.2 \\
\hline
\end{tabular}
\end{table}

除了

之外没什么问题
  

\ mathrm {百万\中,M _ {\ ODOT}}

哪个应该不错

  

\ mathrm {10 ^ {6} \中,M _ {\ ODOT}}

所以,我想格式化部分单位。 documentation似乎报告了一种方法,但绝对不清楚。

1 个答案:

答案 0 :(得分:2)

您可以使用u.Msun方法定义新单元 astropy.units.def_unit()。如果需要,您还可以使用formats方法的参数astropy.io.ascii.write()列的格式指定为科学记数法,

from astropy.io import ascii
import astropy.table
import astropy.units as u

def table_write():

    #fake data, ~ the same order of magnitude of real ones
    Mbh = [1e1,  7e3]
    t_final = [13, 12.2]

    tab = astropy.table.Table([Mbh, t_final],
            names =  ['Mbh', 't_final'])

    # Define new unit with LaTeX format
    new_Msun = u.def_unit('1E6 Msun', 10**6*u.Msun, format={'latex': r'10^6\,M_{\odot}'})

    tab['Mbh'].unit = new_Msun
    tab['t_final'].unit = u.Gyr

    ascii.write(tab,
            Writer=ascii.Latex,
            latexdict=ascii.latex.latexdicts['AA'],
            formats={'Mbh':'%.0E'}) # Set the column's format to scientific notation


if __name__ == "__main__":
    table_write()

<强>乳胶

\begin{table}
\begin{tabular}{cc}
\hline \hline
Mbh & t_final \\
$\mathrm{10^6\,M_{\odot}}$ & $\mathrm{Gyr}$ \\
\hline
1E+01 & 13.0 \\
7E+03 & 12.2 \\
\hline
\end{tabular}
\end{table}

正如你在这里看到的那样,新单位实际上是太阳质量的10 ^ 6倍,而使用LaTeX的文本格式是正确的,

enter image description here