Source code for pyexlatex.models.format.text.linespacing

from typing import Optional
from pyexlatex.models.item import (
    StringAdditionMixin,
    IsSpecificClassMixin,
    IsLatexItemMixin,
    _basic_item_str,
    _multi_option_item_str,
    ItemBase
)

[docs]class LineSpacing(ItemBase):
[docs] def __init__(self, line_spacing: float): self.logical_line_spacing = line_spacing self.latex_line_spacing = latex_line_spacing_from_logical_line_spacing(line_spacing) super().__init__()
@property def name(self): if self.logical_line_spacing == 2: return 'doublespacing' if self.logical_line_spacing == 1.5: return 'onehalfspacing' if self.logical_line_spacing == 1: return 'singlespacing' else: return 'setstretch' @property def _options_str(self) -> str: if self.logical_line_spacing in (1, 1.5, 2): return '' return f'{self.latex_line_spacing}' def __str__(self): options = self._options_str if options: return _basic_item_str(self.name, options) return _multi_option_item_str(self.name)
[docs]def latex_line_spacing_from_logical_line_spacing(line_spacing: float) -> float: """ Latex for some reason has 1.65 as double line spacing, 1.325 as one and a half line spacing, and 1 as single spacing. Take an input on a normal scale (2 is double spaced, 1 is single space, 1.5 is one and a half spacing, and so on), and convert to the latex scale. Args: line_spacing: Returns: """ return round((line_spacing - 1) * (0.65/1) + 1, 2)