Exemple #1
0
    def dumps(self):
        """Represent the plot as a string in LaTeX syntax.

        :return:
        :rtype: str
        """

        string = Command('addplot', options=self.options).dumps()

        if self.coordinates is not None:
            string += ' coordinates {\n'

            if self.error_bar is None:
                for x, y in self.coordinates:
                    # ie: "(x,y)"
                    string += '(' + str(x) + ',' + str(y) + ')\n'

            else:
                for (x, y), (e_x, e_y) in zip(self.coordinates,
                                              self.error_bar):
                    # ie: "(x,y) +- (e_x,e_y)"
                    string += '(' + str(x) + ',' + str(y) + \
                        ') +- (' + str(e_x) + ',' + str(e_y) + ')\n'

            string += '};\n\n'

        elif self.func is not None:
            string += '{' + self.func + '};\n\n'

        if self.name is not None:
            string += Command('addlegendentry', self.name).dumps()

        super().dumps()

        return string
Exemple #2
0
    def change_thickness(self, element, thickness):
        r"""Change line thickness.

        Changes the thickness of the line under/over the header/footer
        to the specified thickness.

        Args
        ----
        element: str
            the name of the element to change thickness for: header, footer
        thickness: float
            the thickness to set the line to
        """

        if element == "header":
            self.data.append(
                Command("renewcommand",
                        arguments=[
                            NoEscape(r"\headrulewidth"),
                            str(thickness) + 'pt'
                        ]))
        elif element == "footer":
            self.data.append(
                Command("renewcommand",
                        arguments=[
                            NoEscape(r"\footrulewidth"),
                            str(thickness) + 'pt'
                        ]))
Exemple #3
0
 def algorithmic(self, inp=None, out=None):
     alg = Algorithmic(options="1")
     if inp is not None:
         alg.append(Command('Require', inp))
     if out is not None:
         alg.append(Command('Ensure', out))
     self.append(alg)
     return alg
Exemple #4
0
 def append(self, keys):
     if isinstance(keys, list):
         for key in keys:
             self.args.append(r"{}".format(key))
             self.args.append(Command("quad"))
     else:
         self.args.append(r"{}".format(keys))
         self.args.append(Command("quad"))
     self.set()
Exemple #5
0
    def add_item(self, isChecked, s):
        """Add an item to the list.

        Args
        ----
        isChecked: boolean
            Description of the item.
        s: str or `~.LatexObject`
            The item itself.
        """
        if isChecked == True:
            self.append(Command('CorrectChoice'))
        else:
            self.append(Command('choice'))

        self.append(s)
Exemple #6
0
def notes(doc):
    doc.append(Command('newgeometry', 'top=1in,bottom=1in'))
    with doc.create(Section('Modeling Notes')):
        with doc.create(Subsection('Tax-Calculator')):
            doc.append(tax_calculator_string)
            with doc.create(Subsection('Modeling Assumptions')):
                doc.append(modeling_assumptions_string)
Exemple #7
0
    def __init__(self, data=None, options=None):
        packages = [
            Package('pgfplots'),
            Command('pgfplotsset', 'compat=newest')
        ]

        super().__init__(data=data, options=options, packages=packages)
Exemple #8
0
    def generate_preview(perturbed_fonts):
        document = PdfGenerator.setup_document()

        for perturbed_font in perturbed_fonts:
            document.append(Command('setmainfont', arguments=NoEscape(perturbed_font)))
            document.append(string.ascii_lowercase + string.ascii_uppercase)
            document.append("\n")

        return document
Exemple #9
0
def algorithm(name, inp=None, out=None, core=None, label=None):
    al = Algorithm()
    al.caption(name)
    alc = al.algorithmic(inp, out)
    if core is not None:
        if label is not None:
            core.pre_append(Command("floatname", arguments=("algorithm", label[0])))
            core.global_define([r"\algorithmicrequire", r"\algorithmicensure"],
                               [f"\\textbf{{{label[1]}:}}", f"\\textbf{{{label[2]}:}}"], True)
    return al, alc
Exemple #10
0
 def __init__(self, *params, data=None):
     # Disable escaping for now
     old_escape = LatexObject.escape
     LatexObject.escape = False
     command_name = self.__class__.__name__.lower()
     args = list(signature(self.definition).parameters.keys())
     num_args = len(args)
     if len(params) != num_args:
         raise ValueError(f'Expected {num_args} parameters from '
                          f'definition, but got {len(params)}.')
     if data is not None:
         if not set(data.keys()).issubset(set(self.data.keys())):
             raise KeyError('Data contains invalid keys')
         self.data.update(data)
     if hasattr(self, 'packages'):
         NewCommand.packages |= self.packages
     if hasattr(self, 'provide_commands'):
         NewCommand.provide_commands |= self.provide_commands
     if hasattr(self, 'provide_lengths'):
         NewCommand.provide_lengths |= self.provide_lengths
     # Bind values from __init__ args to self before calling definition
     for name, p in zip(args, params):
         setattr(self, f'__{name}', p)
     definition = self.definition(*params)
     if isinstance(definition, (list, tuple)):
         definition = ''.join([
             NoEscape(x.dumps()) if hasattr(x, 'dumps') else str(x)
             for x in definition
         ])
     elif hasattr(definition, 'dumps'):
         definition = definition.dumps()
     definition = NoEscape(definition)
     if command_name not in NewCommand.commands:
         args_str = None if num_args == 0 else NoEscape(f'{num_args}')
         registry_command = Command(
             'renewcommand' if self.renew else 'newcommand',
             arguments=Command(command_name),
             options=args_str,
             extra_arguments=definition,
         )
         NewCommand.commands[command_name] = registry_command
     super(NewCommand, self).__init__(arguments=params)
     LatexObject.escape = old_escape
Exemple #11
0
    def setup_document(letterspace=25):
        document = Document(document_options='a4paper', geometry_options={'left': '10mm', 'top': '10mm'},
                            lmodern=False, inputenc=None,
                            page_numbers=False, indent=False)

        # Add Font integration and glyph spacing.
        document.packages.append(Package('fontspec'))
        document.packages.append(Command('defaultfontfeatures', arguments=f"LetterSpace={letterspace}"))

        return document
    def dumps(self):
        # note: most of the following was copied from the pyLaTeX library so
        #       in order to fix a logic error at the end of the function.

        content = self.dumps_content()

        if not content.strip() and self.omit_if_empty:
            return ""

        string = ""

        start = Command(self.latex_name,
                        arguments=self.arguments,
                        options=self.options)

        string += start.dumps()

        if content != "":
            string += "{{ \n {} \n}}".format(content)

        return string
Exemple #13
0
    def dumps(self):
        """Represent the function as a string in LaTeX syntax.

        Returns
        -------
        str
            A LaTeX string representing the function.
        """

        content = self.dumps_content()
        if not content.strip() and self.omit_if_empty:
            return ''

        string = ''

        if self.args is not None:
            begin = Command(self.command, arguments=(self.name, self.args))
        else:
            begin = Command(self.command, arguments=self.name)

        string += begin.dumps() + self.content_separator
        string += content + self.content_separator
        string += Command('End' + self.command).dumps()

        return string
Exemple #14
0
    def dumps(self):
        """Represent the section as a string in LaTeX syntax.

        :return:
        """

        if not self.numbering:
            num = '*'
        else:
            num = ''

        string = Command(self.latex_name + num, self.title).dumps()
        if self.label is not None:
            string += '%\n' + self.label.dumps()
        string += '%\n' + self.dumps_content()

        return string
Exemple #15
0
    def __init__(self, *args, **kwargs):
        preamble = self.create_preamble()
        body = self.create_body()
        self.packages |= NewCommand.packages

        super(DocumentBase, self).__init__(*args, **kwargs)
        # 1. newcommands 2. preamble 3. Body

        for p in NewCommand.provide_commands:
            self.preamble.append(
                Command('providecommand', [NoEscape(rf'\{p}'), '']))
        for length in NewCommand.provide_lengths:
            self.preamble.append(NewLength(length))
        self.preamble += preamble
        self += body
        for c in NewCommand.commands.values():
            self.preamble.append(c)
Exemple #16
0
    def __init__(self,
                 name=None,
                 func=None,
                 coordinates=None,
                 error_bar=None,
                 options=None):
        self.name = name
        self.func = func
        self.coordinates = coordinates
        self.error_bar = error_bar
        self.options = options

        packages = [
            Package('pgfplots'),
            Command('pgfplotsset', 'compat=newest')
        ]

        super().__init__(packages=packages)
                      r'\\rotatebox{90}{\\textbf{\1}}', lines[i])
    lines[i] = re.sub(r'(\\textbf{family})', r'\\rotatebox{45}{\\textbf{\1}}',
                      lines[i])
    #lines[i] = re.sub(r'(\bX\b)', r'\\ding{51}', lines[i]) # tick
    lines[i] = re.sub(r'(\bX\b)', r'\\ding{54}', lines[i])
    print lines[i]

with open(outfile, 'w') as f:
    f.write('\n'.join(lines))

import pylatex as pl
from pylatex.utils import italic, NoEscape
from pylatex.package import Package
from pylatex.base_classes import Command
import os

doc = pl.Document('basic')
doc.documentclass = Command(
    'documentclass',
    options=['12pt', 'landscape'],
    arguments=['standalone'],
)
doc.packages.append(Package('array'))
doc.packages.append(Package('graphicx'))
doc.packages.append(Package('booktabs'))
doc.packages.append(Package('multirow'))
doc.packages.append(Package('pifont'))
doc.append(NoEscape('\n'.join(lines)))

doc.generate_pdf(os.path.splitext(outfile)[0] + '_standalone', clean_tex=True)
Exemple #18
0
 def caption(self, s):
     self.append(Command('caption', s))
Exemple #19
0
 def add_state(self, s):
     self.append(Command('State', s))  # *(2)占格,!占一整行
Exemple #20
0
def author(doc):
    doc.append(NoEscape(r'\noindent\\'))
    doc.append(Command('textbf', paper_author + ' '))
    doc.append(paper_bio)
Exemple #21
0
def add_packages(doc):
    """
    Add packages to the LaTeX file.
    """
    doc.preamble.append(Command('usepackage', 'xcolor'))
    doc.preamble.append(Command('usepackage', 'hyperref'))
    doc.preamble.append(Command('usepackage', 'xcolor'))
    doc.preamble.append(Command('usepackage', 'enumitem'))
    doc.preamble.append(Command('usepackage', 'titling'))
    doc.preamble.append(Command('usepackage', 'graphicx'))
    doc.preamble.append(Command('usepackage', 'sectsty'))
    doc.preamble.append(Command('usepackage', 'titlesec'))
    doc.preamble.append(Command('usepackage', 'setspace'))
    doc.preamble.append(Command('usepackage', 'tikz'))
    doc.preamble.append(Command('usepackage', 'calc'))
    doc.preamble.append(Command('usetikzlibrary', 'calc'))
    doc.preamble.append(Command('renewcommand', NoEscape(r'\rmdefault}{phv')))
    doc.preamble.append(Command('renewcommand', NoEscape(r'\sfdefault}{phv')))
    doc.preamble.append(Command('sectionfont', NoEscape(r'\fontsize{12}{15}\selectfont')))
    doc.preamble.append(Command('titlespacing*', NoEscape(r'\section}{0pt}{0.5\baselineskip}{0.5\baselineskip')))
Exemple #22
0
 def add_task(self, s):
     self.append(Command('task'))  # *(2)占格,!占一整行
     self.append(s)