diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py
index 7e8b1e7..de7bbe2 100644
--- a/renderer/fifty_ohm_html_renderer.py
+++ b/renderer/fifty_ohm_html_renderer.py
@@ -74,8 +74,8 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
if(token.tagtype == "webmargin"):
type = "margin"
- elif(token.tagtype == "webtipp"):
- type = "tipp"
+ elif(token.tagtype == "webtip"):
+ type = "tip"
elif(token.tagtype == "webindepth"):
type = "indepth"
else :
diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py
new file mode 100644
index 0000000..5e55998
--- /dev/null
+++ b/renderer/fifty_ohm_latex_renderer.py
@@ -0,0 +1,97 @@
+from mistletoe.latex_renderer import LaTeXRenderer
+
+from renderer.comment import BlockComment, SpanComment
+from renderer.dash import Dash
+from renderer.halfwidth_spaces import HalfwidthSpaces
+from renderer.nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots
+from renderer.quote import Quote
+from renderer.tag import Tag
+from renderer.underline import Underline
+
+
+class FiftyOhmLaTeXRenderer(LaTeXRenderer):
+
+ def __init__(self):
+ super().__init__(
+ Dash,
+ BlockComment,
+ SpanComment,
+ Quote,
+ Underline,
+ Tag,
+ HalfwidthSpaces,
+ NonbreakingSpaces,
+ NonbreakingSpacesDots,
+ )
+
+ def render_document(self, token):
+ self.footnotes.update(token.footnotes)
+ return self.render_inner(token)
+
+ def render_dash(self, token):
+ return " -- "
+
+ def render_block_comment(self, token):
+ return "" # TODO propagate comments to the LaTeX document
+
+ def render_span_comment(self, token):
+ return "" # TODO propagate comments to the LaTeX document
+
+ def render_quote(self, token):
+ return fr"\enquote{{{self.render_inner(token)}}}"
+
+ def render_emphasis(self, token):
+ return fr"\emph{{{self.render_inner(token)}}}"
+
+ def render_underline(self, token):
+ return fr"\underline{{{self.render_inner(token)}}}"
+
+ def render_thematic_break(self, token):
+ return ""
+
+ def render_tag(self, token): # noqa: C901
+
+ tagtype = None
+
+ match token.tagtype:
+ case "danger":
+ tagtype = "MarginDanger"
+ case "warning":
+ tagtype = "MarginWarning"
+ case "attention":
+ tagtype = "MarginAttention"
+ case "tip":
+ tagtype = "MarginTip"
+ case "webtip":
+ tagtype = "WebTip"
+ case "unit":
+ tagtype = "MarginUnit"
+ case "indepth":
+ tagtype = "MarginInDepth"
+ case "webindepth":
+ tagtype = "MarginWebInDepth"
+ case "webmargin":
+ tagtype = "WebMargin"
+ case "fullwidth":
+ tagtype = "FullWidth"
+ case "latexonly":
+ return self.render_inner(token)
+ case "webonly":
+ return ""
+ case _:
+ tagtype = "Margin"
+
+ return fr"\{tagtype}{{{self.render_inner(token)}}}"
+
+ def render_halfwidth_spaces(self, token):
+ return f"{token.first}.\,{token.second}."
+
+ def render_nonbreaking_spaces(self, token):
+ return f"{token.first}~{token.second}"
+
+ def render_nonbreaking_spaces_dots(self, token):
+ lookup = {
+ "" : "",
+ " " : "~"
+ }
+ return f"{lookup[token.first]}{token.second}{lookup[token.third]}"
\ No newline at end of file
diff --git a/test/test_tag.py b/test/test_tag.py
index 40352cf..09e6193 100644
--- a/test/test_tag.py
+++ b/test/test_tag.py
@@ -19,8 +19,8 @@ def test_tag_html() :
"
Foo
",1,0)+'\n', "Foo
",1,0)+'\n', "Foo
",1,0)+'\n', - "Foo
",1,0)+'\n', - "Foo
",1,0)+'\n', + "Foo
",1,0)+'\n', + "Foo
",1,0)+'\n', "Foo
",1,0)+'\n', "Foo
",1,0)+'\n', "Foo
",1,0)+'\n',