feat: render new tables in LaTeX

This commit is contained in:
Tim Grelka
2025-11-09 11:46:46 +01:00
parent f72879967c
commit 42ba32cc11
+26 -16
View File
@@ -8,7 +8,7 @@ from .photo import Photo
from .picture import Picture from .picture import Picture
from .question import Question from .question import Question
from .quote import Quote from .quote import Quote
from .table import Table from .table import Table, TableBody, TableCell, TableHeader, TableRow
from .tag import Tag from .tag import Tag
from .underline import Underline from .underline import Underline
@@ -28,9 +28,17 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
Picture, Picture,
Photo, Photo,
Table, Table,
TableBody,
TableRow,
TableHeader,
TableCell,
) )
self.question_renderer = question_renderer self.question_renderer = question_renderer
def render_inner(self, token, base="") -> str:
# Filter out None values, so block tokens can return None to not be rendered.
return base.join(filter(lambda x: x is not None, [self.render(child) for child in token.children]))
def render_document(self, token): def render_document(self, token):
self.footnotes.update(token.footnotes) self.footnotes.update(token.footnotes)
return self.render_inner(token) return self.render_inner(token)
@@ -118,23 +126,25 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
return self.render_photo_helper(token.id, token.ref, token.text, token.number) return self.render_photo_helper(token.id, token.ref, token.text, token.number)
def render_table(self, token): def render_table(self, token):
alignments = token.alignment table = "\\begin{DARCtabular}" + f"{self.render_inner(token)}" + "\\end{DARCtabular}"
align = ""
for alignment in alignments:
align += alignment
table = f"\\begin{{DARCtabular}}{{{align}}}\n"
for row in token.children:
for j, cell in enumerate(row.children):
table += self.render_inner(cell)
if j < len(row.children) - 1:
table += " & "
table += r"\\" + "\n"
table += "\\end{DARCtabular}"
if token.caption != "": if token.caption != "":
table += f"\\captionof{{figure}}{{{token.caption}}}\n" table += f"\\captionof{{figure}}{{{token.caption}}}\n"
table += f"\\label{{{token.name}}}\n" table += f"\\label{{{token.name}}}\n"
return table return table
def render_table_body(self, token: TableBody):
return self.render_inner(token)
def render_table_row(self, token: TableRow):
return rf"{self.render_inner(token, ' & ')}\\" + "\n"
def render_table_header(self, token: TableHeader):
align = ""
for alignment in token.alignment:
align += alignment
return f"{{{align}}}\n{self.render_table_row(token)}"
def render_table_cell(self, token: TableCell):
return self.render_inner(token)