astropy:docs

Source code for astropy.units.format.latex

# Licensed under a 3-clause BSD style license - see LICENSE.rst

"""
Handles the "LaTeX" unit format.
"""

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

from . import base
from . import utils


[docs]class Latex(base.Base): """ Output LaTeX to display the unit based on IAU style guidelines. Attempts to follow the `IAU Style Manual <http://www.iau.org/static/publications/stylemanual1989.pdf>`_. """ def __init__(self): pass def _latex_escape(self, name): # This doesn't escape arbitrary LaTeX strings, but it should # be good enough for unit names which are required to be alpha # + "_" anyway. return name.replace('_', r'\_') def _get_unit_name(self, unit): name = unit.get_format_name('latex') if name == unit.name: return self._latex_escape(name) return name def _format_unit_list(self, units): out = [] for base, power in units: if power == 1: out.append(self._get_unit_name(base)) else: out.append('{0}^{{{1}}}'.format( self._get_unit_name(base), utils.format_power(power))) return r'\,'.join(out) def _format_exponential_notation(self, val): m, ex = utils.split_mantissa_exponent(val) parts = [] if m: parts.append(m) if ex: parts.append("10^{{{0}}}".format(ex)) return r" \times ".join(parts)
[docs] def to_string(self, unit): from .. import core latex_name = None if hasattr(unit, '_format'): latex_name = unit._format.get('latex') if latex_name is not None: s = latex_name elif isinstance(unit, core.CompositeUnit): if unit.scale == 1: s = '' else: s = self._format_exponential_notation(unit.scale) + r'\,' if len(unit.bases): positives, negatives = utils.get_grouped_by_powers( unit.bases, unit.powers) if len(negatives): if len(positives): positives = self._format_unit_list(positives) else: positives = '1' negatives = self._format_unit_list(negatives) s += r'\frac{{{0}}}{{{1}}}'.format(positives, negatives) else: positives = self._format_unit_list(positives) s += positives elif isinstance(unit, core.NamedUnit): s = self._latex_escape(unit.name) return r'$\mathrm{{{0}}}$'.format(s)

Page Contents