-
Notifications
You must be signed in to change notification settings - Fork 0
/
latex.py
38 lines (35 loc) · 1.65 KB
/
latex.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from base.objects import TeXObject, TeXCommand
from base.collections import TeXCollection, TeXRow, TeXSet
class LaTeXEnvironment(TeXCollection):
def __init__(self, env, objs=None):
TeXCollection.__init__(self, objs)
# We need to add the \n by hand here because the separator
# isn't included for the start/end delimiters
self.start = TeXSet([TeXCommand("begin", env), "\n"])
self.end = TeXSet(["\n", TeXCommand("end", env)])
self.sep = TeXObject("\n")
class LaTeXTabular(LaTeXEnvironment):
def __init__(self, env, colfmt, objs=None):
LaTeXEnvironment.__init__(self, env, objs)
self.start = TeXSet([TeXCommand("begin", env, colfmt), "\n"])
def addObj(self, obj):
if len(self.objs) > 0:
self.objs[-1].end = TeXRow.end
obj.end = TeXObject()
LaTeXEnvironment.addObj(self, obj)
def simple_latex_document(body, packages=None, pagestyle="empty"):
if packages is None:
packages = []
extra_packages = TeXCollection(sep="\n")
for package in packages:
if type(package) is str:
extra_packages.addObj(TeXCommand("usepackage", package))
else:
extra_packages.addObj(TeXCommand("usepackage", package[0], package[1]))
return TeXCollection([
TeXCommand("documentclass", "article", opts=["12pt"]),
TeXCommand("usepackage", "geometry", opts=["margin=1in"]),
extra_packages,
TeXCommand("pagestyle", pagestyle),
LaTeXEnvironment("document", body)
], sep="\n").compile()